|
おはようございます。
Hirofumiさんとはだいぶ方法が違いますが、
私は前回の数式をVBAコード内でも生かしました。
>ご丁寧に有難うございます。正常に動作いたしました。
>もし、下記のように探索範囲が複数行の表となった場合で
> A B C D E・・・
>1 100 120 140 160 180
>2 130 160 190 210 240
>3 150 190 230 270 310
>・
>・
>・
このシートをアクティブな状態にして下さい。
>
>その行がtextbox等で1行目とか3行目とか指定された場合に、その指定された配列から同じように探索するには、”探索範囲の先頭セル”下記の部分を変更すればいいのでしょうか?
ユーザーフォーム(Userform1)には
Textbox1----検索行の指定用--1と指定すると1行目を
検索対象とします
Textbox2----検索値指定用
Textbox3----検索結果表示用
とすると、
標準モジュールに
'=================================================
Sub main()
UserForm1.Show
End Sub
userform1のモジュールに
'================================================
Dim 検索セル範囲 As String
Dim 検索開始セル As String
'=======================================================================
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim crow As Long
If IsNumeric(TextBox1.Text) Then
crow = Val(TextBox1.Text)
If crow > 0 Then
With ActiveSheet
検索セル範囲 = .Range(.Cells(crow, 1), .Cells(crow, .Columns.Count).End(xlToLeft)).Address
検索開始セル = .Cells(crow, 1).Address
End With
Else
MsgBox "検索行指定エラー"
Cancel = True
End If
Else
MsgBox "検索行指定エラー"
Cancel = True
End If
End Sub
'====================================================================
Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim 検索値 As String
With ActiveSheet
If Val(TextBox2.Value) > Application.Max(.Range(検索セル範囲)) Then
MsgBox "検索値指定エラー"
Cancel = True
Else
検索値 = TextBox2.Text
TextBox3.Text = .Evaluate("=OFFSET(" & 検索開始セル & ",0,IF(ISERROR(MATCH(" & _
検索値 & "," & 検索セル範囲 & ",1)),0," & _
"IF(ISERROR(MATCH(" & 検索値 & "," & 検索セル範囲 & ",0))," & _
"MATCH(" & 検索値 & "," & 検索セル範囲 & ",1)," & _
"MATCH(" & 検索値 & "," & 検索セル範囲 & ",1)-1)),1,1)")
End If
End With
End Sub
対象シートをアクティブにした状態で
mainを実行してみて下さい。
|
|