|
おはようございます。
シートSheet3に
以下の表があったとします。
C D E F G H
5 あ い う え お
6 イ 100 120 140 160 180
7 ロ 110 140 160 180 200
8 ハ 120 160 180 200 220
9 ニ 130 180 200 220 240
左端の数字が行番号、上端のアルファベットは列を表わします。
これで表の要素の起点をセル$D$6
列方向の要素数は 5
行方向の要素数は 4
と言うことにします。
関係をよく把握してください。
Userform1に配置するテキストボックスは、
> Textbox1----検索行の指定用
上記の表で「ロ」の指定で7行目を検索対象にします
でもこれは、Hirofumiさんの仕様のコンボボックスに賛成です。
変更は、考えてみて下さい
> Textbox2----検索値指定用
> Textbox3----検索結果表示用
textbox4----検索の結果みつかった列見出し
(上記の「あ」とか「い」)を表示
では、Userform1のモジュールです。
'================================
Dim 検索セル範囲 As String
Dim 検索開始セル As String
'****** ↓表の位置により以下の3つの値を変更します *******
Const strng As String = "$d$6" '表の起点セル
Const c_num As Long = 5 '表の列方向要素数
Const r_num As Long = 4 '表の行方向の要素数
'=======================================================================
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim 行見出し As Range
Dim crow As Variant
With Worksheets("sheet3") '対象シートにする
Set 行見出し = .Range(strng).Offset(0, -1).Resize(r_num, 1)
crow = Application.Match(TextBox1.Value, 行見出し, 0)
If Not IsError(crow) Then
検索セル範囲 = .Range(strng).Offset(crow - 1, 0).Resize(, c_num).Address
検索開始セル = .Range(strng).Offset(crow - 1, 0).Address
Else
MsgBox "行指定エラー"
Cancel = True
End If
End With
End Sub
'=======================================================================
Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim 検索値 As String
Dim col As Long
With Worksheets("sheet3") '対象シートにする
If Val(TextBox2.Value) > Application.Max(.Range(検索セル範囲)) Then
MsgBox "検索値指定エラー"
Cancel = True
Else
検索値 = TextBox2.Text
col = .Evaluate("IF(ISERROR(MATCH(" & _
検索値 & "," & 検索セル範囲 & ",1)),0," & _
"IF(ISERROR(MATCH(" & 検索値 & "," & 検索セル範囲 & ",0))," & _
"MATCH(" & 検索値 & "," & 検索セル範囲 & ",1)," & _
"MATCH(" & 検索値 & "," & 検索セル範囲 & ",1)-1))")
TextBox3.Text = .Evaluate("=OFFSET(" & 検索開始セル & ",0," & col & ",1,1)")
TextBox4.Text = .Evaluate("=OFFSET(" & strng & ",-1," & col & ",1,1)")
End If
End With
End Sub
確認してください。
|
|