Home > 即効テクニック > Excel VBA > セル操作関連のテクニック > 文字列検索−Findメソッドの応用

即効テクニック

セル操作関連のテクニック

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

(Excel 97/2000)
特定の文字列をセル範囲から検索するには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