例文を使って繰り返し業務を時短

【マクロ・VBA】複数シート検索

エクセル、マクロ、VBAで複数シートを検索する方法 VBA

複数シート検索

このコードは、Excelブック内のすべてのワークシートから特定のキーワードを検索し、その結果を「検索」という名前のワークシートに表示するものです。コード全体を解説します。

Sub 複数シート検索()
    Dim i As Long, j As Long, keyword As String, Lastrow1 As Long
    keyword = Worksheets("検索").Cells(2, 1).Value
    
    For i = 1 To Worksheets.Count
    
        If Worksheets(i).Name <> "検索" Then
            Lastrow1 = Worksheets(i).Cells(Rows.Count, 1).End(xlUp).Row
            
            For j = 1 To Lastrow1
            If Worksheets(i).Cells(j, 2) Like keyword Then
            
            'If memo Like "*" & sStr & "*" Then
                'If Worksheets(i).Cells(j, 2).Value = keyword Then
                Worksheets("検索").Activate
                Lastrow1 = Worksheets("検索").Cells(Rows.Count, 1).End(xlUp).Row
                Worksheets("検索").Cells(Lastrow1 + 1, 1).Value = Worksheets(i).Name
                Worksheets("検索").Cells(Lastrow1 + 1, 2).Value = Worksheets(i).Cells(j, 1).Value
                Worksheets("検索").Cells(Lastrow1 + 1, 3).Value = Worksheets(i).Cells(j, 4).Value
                Worksheets("検索").Cells(Lastrow1 + 1, 4).Value = Worksheets(i).Cells(j, 7).Value
                End If
           Next j
           
        End If
        
    Next i
    
 MsgBox "完了"
End Sub

解説

  1. 最初の行で、検索対象のキーワードを「検索」という名前のシートの2行目の1列目から取得しています。
  2. Forループを使用して、すを使用して、すべてのシートを順番に処理します。
  3. もし現在のシートが「検索」でなければ、そのシートの最終行を取得します。
  4. 次に、現在のシートの各行でキーワードを検索します。Like演算子を使用することで、キーワードがセルの中に含まれているかどうかを判定しています。
  5. もしキーワードが見つかった場合、その行のデータを「検索」という名前のシートに追加します。最初に、目的のシートをアクティブにします。
  6. 次に、シートの最後の行を取得して、その下の行にデータを追加します。

*上記のコードは、指定されたキーワードを検索するという簡単なタスクを処理していますが、改善
 の余地があります。例えば、シートの範囲を限定することで検索速度を向上させたり、検索結果を
 色付けして見やすくするなどの工夫ができます。

シートをまたがって検索する(Part2)

Sub 複数シートを指定して検索する()

Dim searchValue As String
searchValue = "検索したい文字列"

Dim sheetsToSearch() As Variant
sheetsToSearch = Array("Sheet1", "Sheet2", "Sheet3")

For Each sheetName In sheetsToSearch
    With Worksheets(sheetName).Cells
        '検索対象の範囲を指定します。
        Set searchRange = .Find(searchValue, LookIn:=xlValues, LookAt:=xlWhole)
        
        '検索結果が見つかった場合、処理を行います。
        If Not searchRange Is Nothing Then
            '検索結果が見つかったセルを選択します。
            searchRange.Select
            
            '検索結果が複数ある場合、次の検索結果を検索します。
            Do
                Set searchRange = .FindNext(searchRange)
                '検索結果が見つからなくなった場合、ループを抜けます。
                If searchRange Is Nothing Then Exit Do
                '検索結果が見つかった場合、処理を行います。
                searchRange.Select
            Loop While searchRange.Address <> firstResultAddress
        End If
    End With
Next sheetName

 MsgBox "完了"
End Sub

解説

1.検索したい文字列を変数に格納します。

  1. 検索したい文字列を変数に格納します。
  2. 検索範囲となるシートを配列に格納します。
  3. ループを使用して、各シートを検索します。

*上記のコードでは、配列に格納した各シートを順番にループし、Findメソッドを使用して検索を行い
 ます。検索結果が見つかった場合、検索結果が複数ある場合に備えて、FindNextメソッドを使用して 
 次の検索結果を探索します。また、検索結果を選択することで、見つかったセルに対して追加の処理
 を行うことができます。

 ただし、上記のコードでは検索対象のセルが見つからなくなった場合にループが終了するようになっ
 ています。これは、各シートを検索するための最初の検索結果が必要であるためです。各シートを最
 初から検索する必要がある場合は、最初の検索結果を記録するための変数を作成することができま
 す。

コメント

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