Excel VBA 逆引き集 | 検索フォーム

Excel VBA
スポンサーリンク

検索フォームの基本

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で ユーザーが自由にキーワード検索できる便利な入力フォーム を簡単に作成できます。

タイトルとURLをコピーしました