Home » ExcelVBA Rangeオブジェクト » セル検索 » Find・FindNextで検索したセルを選択する

Find・FindNextで検索したセルを選択する

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「ExcelマクロでFindしたセルをすべて選択するにはどうしたらいいのでしょうか?」
といったご質問をいただくことがあります。

RangeオブジェクトのFindメソッドで検索を行って、ヒットしたセルをすべて選択したいという要望です。

[スポンサードリンク]

Find・FindNextで検索したセルをすべて選択するサンプルマクロ

Range.Findメソッドは、検索を行って見つかった1個のセルを表すRangeオブジェクトを返すだけですから、全部を選択するには、Range.FindNextメソッドと組み合わせてループ処理を行う必要があります。

Sub 北海道という文字列を検索してすべて選択する()
 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

 fnd_all.Select
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 » ExcelVBA Rangeオブジェクト » セル検索 » Find・FindNextで検索したセルを選択する

Home » ExcelVBA Rangeオブジェクト » セル検索 » Find・FindNextで検索したセルを選択する

「セル検索」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.