Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode <> vbKeyReturn Then Exit Sub 'Enter以外は、処理を終了
ListBox1.Clear 'リストボックスをクリア'データベースを検索
For i = 2 To Sheets("DB").Cells(Rows.Count, "A").End(xlUp).Row
'部分一致で商品を検索
If InStr(Sheets("DB").Cells(i, "A"), TextBox1.Text) > 0 Then
ListBox1.AddItem Sheets("DB").Cells(i, "A") 'リストボックスに値を追加
End If
Next
'リストボックスにデータがある場合
If ListBox1.ListCount > 0 Then
ListBox1.SetFocus 'リストボックスをフォーカス
ListBox1.ListIndex = 0 '一番上を選択
Else
KeyCode = 0 'テキストボックスをフォーカスしたままにする
MsgBox "データがありません"
End If
End Sub
では、VBAコードを実行してみます。
条件を絞り込む
F5キーを押して、ユーザーフォームを表示します。
絞り込む条件を入力して、Enterを押します。
商品を抽出することができます。
商品を抽出することができました。
抽出する値がない場合は、メッセージを表示することができます。
抽出する値がない場合はメッセージを表示
データベースにない値を入力して、Enterを押してみます。
抽出する値がデータベースにない場合は、メッセージボックスを表示できます。
こんな感じで、メッセージボックスを表示することができます。
リストボックスから値を検索
次は、リストボックスから値を検索するVBAコードになります。
「検索」シートのシートモジュールに記載します。
Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode <> vbKeyReturn Then Exit Sub 'Enter以外は、処理を終了'データベースを検索する
For i = 2 To Sheets("DB").Cells(Rows.Count, "A").End(xlUp).Row
'リストボックスで選択した値と同じ商品を検索
If Sheets("DB").Cells(i, "A") = ListBox1.List(ListBox1.ListIndex) Then
Sheets("検索").Range("B3") = Sheets("DB").Cells(i, "A") '商品
Sheets("検索").Range("D3") = Sheets("DB").Cells(i, "B") '価格
Sheets("検索").Range("B5") = Sheets("DB").Cells(i, "C") '残り数量
Sheets("検索").Range("B6") = Sheets("DB").Cells(i, "D") '必要数量
Sheets("検索").Range("A8") = Sheets("DB").Cells(i, "E") '備考
End If
Next
End Sub