RangeオブジェクトのFindメソッドを使って、行を選択するExcelマクロをご紹介しています。
ご紹介済みのこのマクロでは、検索で見つかった最初の行が選択されるだけです。
検索を行って見つかった全ての行を選択したい、というニーズも実務ではあるでしょう。
そんなマクロをご紹介します。
文字列を検索してみつかった行全体をすべて選択するサンプルマクロ
以下のマクロを実行すると、A列で「北海道」という文字列を検索して、見つかった行がすべて選択されます。
Dim fnd As Range
Dim fnd_all As Range ' 見つかったすべてのセル
Dim adr As String ' 最初に見つかったセルのAddress
Set fnd = Range("A:A").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
fnd_all.EntireRow.Select
End Subサンプルマクロの解説
RangeオブジェクトのFindメソッドとFindNextメソッドを使って、検索したセルを全て選択するマクロをご紹介しています。
上記のマクロも構造はほとんど同じです。
違うのは最後の選択を行う行です。
ご紹介済みのセルを全て選択するマクロでは
fnd_all.Select
となっていたのが、
fnd_all.EntireRow.Select
となっています。
行全体を取得する、RangeオブジェクトのEnterRowプロパティを使っています。
Rangeオブジェクトには、Rangeオブジェクトを返すプロパティがたくさん用意されていて、このような使い方をできるのが(オブジェクト式やオブジェクト構造がわかっていないと難しいと感じるかもしれませんが)とても便利なところです。
- Newer:Microsoft Scripting Runtimeへの参照設定を行うマクロ
- Older:VBAの型宣言文字一覧
Home » Excel VBA Rangeオブジェクト » セル検索 » Find・FindNextで検索して行を選択する