MENU

【VBA】特定の文字列を検索したいならコレ!【Findメソッド】

マクロを作成していると、「特定の文字列が入力されているセルを探したい!」と思う場面があります。この記事では、エクセルマクロを用いて特定の文字列が入力されているセルを効率的に探す方法を紹介します。

目次

基本構文

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

このコードでは、文字列searchStringInputBoxにより取得してシート全体から検索し、見つかった場合はそのセルのアドレスを表示します。見つからなかった場合は、見つからなかった旨を表示します。

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メソッドを使用することで、シート内の任意の文字列を効率的に検索することができます。また、条件に基づいた検索や複数の一致を検索する方法も紹介しました。この記事を参考にして、エクセルマクロを使ったデータ検索をさらに効率化してください。

エクセルマクロに関する他の質問やリクエストがあれば、コメントで教えてください!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

自動車メーカーで、VBAやRPAを用いた業務効率化・業務改善を行っております。

目次