文字列検索−Findメソッドの応用

特定の文字列をセル範囲から検索するにはFindメソッドを用いますが、検索結果として
返されるセルを対象にしてさまざまなことを行うことが出来ます。

例えば、検索結果のセル背景色を変えたり、検索文字列のフォントを操作したり、隣あ
ったセルとの結合を行ったりなど、セルの操作で可能なことをFindメソッドの実行結果
に対して行うことが出来ます。

以下のサンプルではFindNextメソッドと併せて応用例を考えます。

(サンプル1)

●検索結果のセルに含まれる検索文字列のフォントを操作する●

Sub PaintTargetCharacter()

    Dim Target As String
    Dim FoundCell As Range
    Dim Addr As String
    Dim SearchArea As Range
    
    Target = Application.InputBox("検索文字列入力", "検索", Type:=2)
    If Target = "False" Then Exit Sub
    
    Set SearchArea = ActiveSheet.UsedRange '検索対象範囲
    Set FoundCell = SearchArea.Find(what:=Target) '検索実行
    If FoundCell Is Nothing Then Exit Sub '検索文字列が含まれるセルがない場合中断
    Addr = FoundCell.Address '最初の検索結果のアドレスを格納
    Do
        Call PaintCh(FoundCell, Target) '対象文字の操作のためたプロシージャ呼び出し
        Set FoundCell = SearchArea.FindNext(after:=FoundCell)
    Loop While FoundCell.Address <> Addr And Not FoundCell Is Nothing

End Sub

'上記プロシージャから呼び出されてフォント色の変更と太字化を行う
Sub PaintCh(FoundCell As Range, Target As String)

    Dim StartPos As Integer
    StartPos = InStr(1, FoundCell.Value, Target, vbTextCompare)
    
    With FoundCell.Characters(StartPos, Len(Target)).Font
        .Color = vbRed
        .Bold = True
    End With

End Sub
(サンプル2)

●検索結果のセルをすべて選択する●

※プロシージャ中に使用しているJoinメソッドはExcel2000のみ対応

Sub SelectTargets()

    Dim Target As String
    Dim FoundCell As Range
    Dim Addr As String
    Dim SearchArea As Range
    Dim FoundAddr() As String
    Dim i As Long
    
    Target = Application.InputBox("検索文字列入力", "検索", Type:=2)
    If Target = "False" Then Exit Sub
    Set SearchArea = ActiveSheet.UsedRange
    Set FoundCell = SearchArea.Find(what:=Target)
    If FoundCell Is Nothing Then Exit Sub
    Addr = FoundCell.Address
    
    Do
        ReDim Preserve FoundAddr(i) '配列の内容を維持したまま再宣言
        FoundAddr(i) = FoundCell.Address '検索結果のアドレスを配列に格納
        Set FoundCell = SearchArea.FindNext(after:=FoundCell)
        i = i + 1
    Loop While FoundCell.Address <> Addr And Not FoundCell Is Nothing
    
    '配列に格納された値をコンマ区切りで結合してセル範囲を一括選択
    Range(Join(FoundAddr, ",")).Select

End Sub

Excel97/2000



戻る


Excel Word Access VBA! モーグ