複数シート検索
このコードは、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
解説
- 最初の行で、検索対象のキーワードを「検索」という名前のシートの2行目の1列目から取得しています。
For
ループを使用して、すを使用して、すべてのシートを順番に処理します。- もし現在のシートが「検索」でなければ、そのシートの最終行を取得します。
- 次に、現在のシートの各行でキーワードを検索します。
Like
演算子を使用することで、キーワードがセルの中に含まれているかどうかを判定しています。 - もしキーワードが見つかった場合、その行のデータを「検索」という名前のシートに追加します。最初に、目的のシートをアクティブにします。
- 次に、シートの最後の行を取得して、その下の行にデータを追加します。
*上記のコードは、指定されたキーワードを検索するという簡単なタスクを処理していますが、改善
の余地があります。例えば、シートの範囲を限定することで検索速度を向上させたり、検索結果を
色付けして見やすくするなどの工夫ができます。
シートをまたがって検索する(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.検索したい文字列を変数に格納します。
- 検索したい文字列を変数に格納します。
- 検索範囲となるシートを配列に格納します。
- ループを使用して、各シートを検索します。
*上記のコードでは、配列に格納した各シートを順番にループし、Find
メソッドを使用して検索を行い
ます。検索結果が見つかった場合、検索結果が複数ある場合に備えて、FindNext
メソッドを使用して
次の検索結果を探索します。また、検索結果を選択することで、見つかったセルに対して追加の処理
を行うことができます。
ただし、上記のコードでは検索対象のセルが見つからなくなった場合にループが終了するようになっ
ています。これは、各シートを検索するための最初の検索結果が必要であるためです。各シートを最
初から検索する必要がある場合は、最初の検索結果を記録するための変数を作成することができま
す。
コメント