マクロを作成していると、「特定の文字列が入力されているセルを探したい!」と思う場面があります。この記事では、エクセルマクロを用いて特定の文字列が入力されているセルを効率的に探す方法を紹介します。
基本構文
VBAで特定の文字列を検索する方法
エクセルVBAには、セル内の特定の文字列を検索するためのいくつかの方法があります。その中でも、最も一般的な方法はFind
メソッドを使用する方法です。これにより、シート内で特定の文字列を含むセルを簡単に見つけることができます。基本的な使い方は下記コードを参照ください。
Sub FindString()
Dim searchString As String
Dim cell As Range
' 検索するシート全体を検索
searchString = InputBox("検索する文字を入力してください。")
' キャンセル時は終了
If searchString = "" Then Exit Sub
' シート全体を検索
Set cell = Cells.Find(What:=searchString, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
If Not cell Is Nothing Then
MsgBox "文字列 '" & searchString & "' はセル " & cell.Address & " に見つかりました。"
Else
MsgBox "文字列 '" & searchString & "' は見つかりませんでした。"
End If
End Sub
このコードでは、文字列searchString
をInputBox
により取得してシート全体から検索し、見つかった場合はそのセルのアドレスを表示します。見つからなかった場合は、見つからなかった旨を表示します。

InputBox
の使い方については下記の記事で詳しく解説しています。
応用例
例1:一致する全てのセルを見つける
上記のコードは最初に一致するセルを見つけるだけですが、シート内に特定の文字列のセルが複数ある場合は、これらすべてを検索する方法も必要です。次のコードは、シート内の全ての一致するセルを検索し、結果をリストとして表示します。
Sub FindAllOccurrences()
Dim searchString As String
Dim cell As Range
Dim firstAddress As String
Dim result As String
searchString = InputBox("検索する文字を入力してください。")
' キャンセル時は終了
If searchString = "" Then Exit Sub
result = ""
' シート全体を検索
Set cell = Cells.Find(What:=searchString, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)
If Not cell Is Nothing Then
firstAddress = cell.Address
Do
result = result & cell.Address & vbNewLine
Set cell = Cells.FindNext(cell)
Loop While Not cell Is Nothing And cell.Address <> firstAddress
MsgBox "文字列 '" & searchString & "' は以下のセルに見つかりました:" & vbNewLine & result
Else
MsgBox "文字列 '" & searchString & "' は見つかりませんでした。"
End If
End Sub
このコードでは、最初に見つかったセルのアドレスをfirstAddress
として保存し、FindNext
メソッドを使用して他の一致するセルを検索します。すべての一致するセルが見つかるまでループし、結果をまとめて表示します。
例2:条件に基づいた検索
特定の条件に基づいて検索する場合もあります。例えば、大文字と小文字を区別して検索したい場合や、セルの一部ではなく完全一致するセルを検索したい場合などです。次のコードは大文字と小文字を区別する検索方法です。
Sub FindStringCaseSensitive()
Dim searchString As String
Dim cell As Range
searchString = InputBox("検索する文字を入力してください。")
' キャンセル時は終了
If searchString = "" Then Exit Sub
' シート全体を検索(大文字小文字を区別)
Set cell = Cells.Find(What:=searchString, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True)
If Not cell Is Nothing Then
MsgBox "文字列 '" & searchString & "' はセル " & cell.Address & " に見つかりました。"
Else
MsgBox "文字列 '" & searchString & "' は見つかりませんでした。"
End If
End Sub
まとめ
エクセルマクロを使用して特定の文字列が入力されているセルを検索する方法について解説しました。Find
メソッドを使用することで、シート内の任意の文字列を効率的に検索することができます。また、条件に基づいた検索や複数の一致を検索する方法も紹介しました。この記事を参考にして、エクセルマクロを使ったデータ検索をさらに効率化してください。
エクセルマクロに関する他の質問やリクエストがあれば、コメントで教えてください!