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