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で検索したセルを選択する

TrackBack:2

TrackBack URL
Find・FindNextで検索して行をすべて選択するExcelマクロ from インストラクターのネタ帳
Range.lFind・Range.FindNextで検索して行をすべて選択するExcelマクロをご紹介しています。
Do~Loop文のほうが書きやすい例 from インストラクターのネタ帳
Excel VBAの場合、Do~Loop文でなければ書けない処理が少ないため、はじめに学習するループ処理として、For~Next文をおすすめします。

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

「セル検索」の記事一覧

検索


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

.