【VBA】シート上の文字列を検索する

VBAで
 ・シート上の文字列を検索
できます!

PR

VBAコード

ここでは例として、
 ・シート「sample」上の文字列「佐藤」を検索
します。
※検索結果として「設定されているセル(例:C3など)」と「そのセルに設定されている値」を取得します。
※検索結果をDictionaryへ設定します。
※検索結果(=Dictionaryの内容)をイミディエイトウィンドウへ出力します。

シート「sample」上の文字列「佐藤」
シート「sample」上の文字列「佐藤」

シート「sample」上の文字列「佐藤」は3つのセルに設定されています。
※セル「C3」、「C6」、「C9に設定されています。

Option Explicit

Sub sample()
    
    Dim dicResult As Object
    Dim findStr As String
    Dim ws As Worksheet
    Dim resultRange As Range
    Dim address As String
    Dim arrAddress As Variant
    Dim resultRangeStr As String
    Dim key As Variant
    
    Set dicResult = CreateObject("Scripting.Dictionary")
    
    '検索対象の文字列を指定
    findStr = "佐藤"
    '検索対象のシートを指定
    Set ws = Worksheets("sample")
    
    '検索を実行(1回目)
    Set resultRange = ws.Cells.Find(What:=findStr, LookIn:=xlValues, LookAt:=xlPart)
    
    '検索を実行(最後まで繰り返し)
    Do While Not (resultRange Is Nothing)
        '見つかったセルのアドレスを取得(例:C$3など)
        address = resultRange.address(RowAbsolute:=True, ColumnAbsolute:=False)
        '見つかったセルを取得(例:C3など)
        resultRangeStr = Split(address, "$")(0) & resultRange.Row
        '見つかったセルが既にDictionaryに設定済みの場合はLoopを抜ける
        If dicResult.Exists(resultRangeStr) Then
            Exit Do
        End If
        '見つかったセルの情報をDictionaryへ設定
        dicResult.Add resultRangeStr, resultRange.Value
        '次を検索
        Set resultRange = ws.Cells.FindNext(After:=resultRange)
    Loop
    
    '検索結果(=Dictionaryの内容)をイミディエイトウィンドウへ出力
    If dicResult.Count <> 0 Then
        For Each key In dicResult.Keys
            Debug.Print key & "," & dicResult(key)
        Next
    Else
        MsgBox "指定した文字列は存在しませんでした。"
    End If
    
End Sub

以下を指定します(17~19行目)。
・検索対象の文字列
・検索対象のシート

「Worksheetオブジェクト」の「Cells」プロパティにより、「Range」オブジェクトを取得します(22行目)。

「Range」オブジェクトの「Find」メソッドにより、1回目の検索を実行します(22行目)。
※「What」に「検索対象の文字列」を指定します。
※「LookIn」に「検索するデータの種類」を指定します。上記では「xlValues(値)」を指定しています。

※「LookAt」に「検索テキスト全体または検索テキストの一部を検索するかどうか」を指定します。
 上記では「xlPart(検索テキストの一部を検索)」を指定しています。

見つかったセルを取得します(27~29行目)。

見つかったセルの情報をDictionaryへ設定します(35行目)。

「Range」オブジェクトの「FindNext」メソッドにより、2回目以降の検索を実行します(37行目)。

検索結果(=Dictionaryの内容)をイミディエイトウィンドウへ出力します(41~47行目)。

PR

実行結果

シート上の文字列を検索できました。
※検索結果として「設定されているセル(例:C3など)」と「そのセルに設定されている値」を取得できました。
※検索結果をイミディエイトウィンドウへ出力できました。

実行結果
実行結果
PR

参考①

上記のVBAコードは以下の記事を参考にして作成しました。

PR

参考②

シート上の文字列を置換することもできます。

詳細は以下の記事をご確認ください。

PR

参考③

上記のVBAコードで使用している以下の詳細は、公式サイトをご確認ください。

●「Worksheetオブジェクト」の「Cells」プロパティ


●「Range」オブジェクトの「Find」メソッド


●「Range」オブジェクトの「FindNext」メソッド


Dictionary」オブジェクト