検索フォームの基本
Excel VBAで「シートの中から条件に合うデータを探したい」「ユーザーが入力したキーワードで検索したい」といった場面では 検索フォーム を作ると便利です。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- 検索フォームとは?
UserFormに入力欄(TextBox)やボタン(CommandButton)を配置し、ユーザーが入力したキーワードでシートのデータを検索する仕組み。 - 用途:
- 顧客名や商品名を検索
- IDやコードから該当データを探す
- 検索結果を一覧表示(ListBoxなど)
テンプレ1:単純検索(最初に見つかったセルを表示)
UserFormに TextBox1(検索キーワード) と CommandButton1(検索ボタン) を配置。
Private Sub CommandButton1_Click()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rng As Range
Set rng = ws.Range("A:A").Find(What:=TextBox1.Value, LookAt:=xlPart)
If Not rng Is Nothing Then
MsgBox "見つかりました! セル: " & rng.Address
Else
MsgBox "該当データは見つかりませんでした"
End If
End Sub
VB- ポイント:
Findメソッドで検索。- 最初に見つかったセルのアドレスを表示。
テンプレ2:検索結果をListBoxに一覧表示
UserFormに TextBox1(検索キーワード)、ListBox1(結果表示)、CommandButton1(検索ボタン) を配置。
Private Sub CommandButton1_Click()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Dim i As Long
ListBox1.Clear
For i = 2 To lastRow
If InStr(1, ws.Cells(i, 1).Value, TextBox1.Value) > 0 Then
ListBox1.AddItem ws.Cells(i, 1).Value
End If
Next i
If ListBox1.ListCount = 0 Then
MsgBox "該当データは見つかりませんでした"
End If
End Sub
VB- ポイント:
InStrで部分一致検索。- 複数結果をListBoxに表示。
テンプレ3:検索結果をシート上で選択
Private Sub CommandButton1_Click()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rng As Range
Set rng = ws.Range("A:A").Find(What:=TextBox1.Value, LookAt:=xlPart)
If Not rng Is Nothing Then
rng.Select
MsgBox "セル " & rng.Address & " を選択しました"
Else
MsgBox "該当データは見つかりませんでした"
End If
End Sub
VB- ポイント:
- 検索結果をシート上で選択状態にできる。
テンプレ4:複数条件で検索(AND条件)
UserFormに TextBox1(名前)、TextBox2(年齢)、CommandButton1 を配置。
Private Sub CommandButton1_Click()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Dim i As Long, found As Boolean
found = False
For i = 2 To lastRow
If ws.Cells(i, 1).Value = TextBox1.Value And ws.Cells(i, 2).Value = TextBox2.Value Then
MsgBox "見つかりました! 行番号: " & i
found = True
Exit For
End If
Next i
If Not found Then
MsgBox "該当データは見つかりませんでした"
End If
End Sub
VB- ポイント:
- 複数条件を組み合わせて検索可能。
テンプレ5:検索結果を別シートにコピー
Private Sub CommandButton1_Click()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim wsResult As Worksheet: Set wsResult = Worksheets("Result")
Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Dim i As Long, r As Long
r = 2
wsResult.Range("A2:A100").ClearContents
For i = 2 To lastRow
If InStr(1, ws.Cells(i, 1).Value, TextBox1.Value) > 0 Then
wsResult.Cells(r, 1).Value = ws.Cells(i, 1).Value
wsResult.Cells(r, 2).Value = ws.Cells(i, 2).Value
r = r + 1
End If
Next i
MsgBox "検索結果をResultシートにコピーしました"
End Sub
VB- ポイント:
- 検索結果を別シートにまとめて出力。
- レポート作成に便利。
例題で練習
'例1:単純検索 → Findで最初の一致を表示
'例2:複数結果をListBoxに表示
'例3:検索結果をシート上で選択
'例4:複数条件で検索
'例5:検索結果を別シートにコピー
VB初心者向けポイント
- Findで検索 → 最初の一致を探す。
- InStrで部分一致 → 複数候補を拾える。
- ListBoxに表示 → 結果を一覧化できる。
- 複数条件検索 → 実務でよく使う。
- 結果をコピー → レポートや抽出に便利。
👉 この「検索フォームテンプレ」を覚えておけば、Excel VBAで ユーザーが自由にキーワード検索できる便利な入力フォーム を簡単に作成できます。
