「ExcelマクロでFindしたセルをすべて選択するにはどうしたらいいのでしょうか?」
といったご質問をいただくことがあります。
RangeオブジェクトのFindメソッドで検索を行って、ヒットしたセルをすべて選択したいという要望です。
Find・FindNextで検索したセルをすべて選択するサンプルマクロ
Range.Findメソッドは、検索を行って見つかった1個のセルを表すRangeオブジェクトを返すだけですから、全部を選択するには、Range.FindNextメソッドと組み合わせてループ処理を行う必要があります。
Dim fnd As Range
Dim fnd_all As Range ' 見つかったすべてのセル
Dim adr As String ' 最初に見つかったセルのAddress
Set fnd = Cells.Find("北海道")
If fnd Is Nothing Then
MsgBox "見つかりませんでした。"
Exit Sub
Else
Set fnd_all = fnd
adr = fnd.Address
End If
Do
Set fnd = Cells.FindNext(After:=fnd)
If fnd.Address = adr Then
Exit Do
Else
Set fnd_all = Union(fnd_all, fnd)
End If
Loop
End Sub
上記のマクロを実行すると、アクティブシートで「北海道」という文字列の入力されたセルを検索して、みつかったすべてのセルが選択されます。
サンプルマクロの解説
基本構造はこれまでにご紹介してきた、Range.FindとRnge.FindNextを組み合わせたマクロと同じです。
大きく違うのは、Do~Loop文の中の、
Set fnd_all = Union(fnd_all, fnd)
と、ループを抜けたあとの
fnd_all.Select
です。
ループ文の中の、
Set fnd_all = Union(fnd_all, fnd)
は、ApplicationオブジェクトのUnionメソッドを使って、オブジェクト変数・fnd_allが表すセルを、どんどん増やしています。
全部のセルを見つけ終わった時点では、オブジェクト変数・fnd_allには、みつかった全てのセルを表すRangeオブジェクトがセットされた状態になっていますから、ループを抜けてからRangeオブジェクトのSelectメソッドで選択を行っています。
fnd_all.Select
最終更新日時:2019-04-17 14:49
Home » Excel VBA Rangeオブジェクト » セル検索 » Find・FindNextで検索したセルを選択する