Home » Excel VBA Rangeオブジェクト » セル検索 » Findメソッドで範囲を指定して検索する

Findメソッドで範囲を指定して検索する

対象:Excel2003, Excel2007, Excel2010, Excel2013

「excel2010 vba find 範囲 名前」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

Excel 2010のVBA(Visual Basic for Applications)で、Findメソッドを使おうとしている方による検索です。

セル範囲に名前が定義されているときに、その定義されている名前を使って検索・Findを行う方法を探してらしたのでしょうか。

例えば「北海道」という文字列の検索をマクロ記録すると、以下のようなコードができます。

Cells.Find(What:="北海道", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate

マクロ初心者の方、VBAのオブジェクト式を理解できていない方だと、たくさんある引数のどれかを指定すると、セル範囲を指定した検索ができると考えてしまうかもしれません。

[スポンサードリンク]

Findメソッドの検索範囲はRangeオブジェクトで指定

検索範囲は引数で指定するのではなく、「.Find」の前の、Rangeオブジェクトを取得するオブジェクト式で指定してください。
▼セル範囲を指定して検索を行うコード
※「都道府県名」という名前の定義されているセル範囲から「北海道」を探して選択する例
Range("都道府県名").Find("北海道").Select

Excel VBAでは、名前が定義されている場合、Rangeプロパティの引数に名前を指定することでRangeオブジェクトを取得できます。

例えば「都道府県名」という名前が定義されているときに、
  Range("都道府県名").Select
というコードを実行すると「都道府県名」という名前のセル範囲が選択されます。

この書き方を利用すれば、セル範囲を指定したFindも可能になります。

それが
  Range("都道府県名").Find("北海道").Select
というオブジェクト式です。

行番号を取得したいのならRowプロパティを使った、
  Range("都道府県名").Find("北海道").Row
列番号を取得したいのならColumnプロパティを使った、
  Range("都道府県名").Find("北海道").Column
といったオブジェクト式です。

Rangeオブジェクトの様々な指定方法

この書き方は、名前が定義されているときにしか使えないというわけでは勿論ありません。
  Range("A:A").Find("北海道").Select
或いは、
  Columns("A"). Find("北海道").Select
というオブジェクト式にすれば、A列から「北海道」という文字列を見つけて選択してくれます。

また、
  Range("A1" , "G7").Find("北海道").Select
または、
  Range("A1:G7").Find("北海道").Select
といったオブジェクト式なら、A1:G7セルから「北海道」という文字列を見つけて選択してくれます。

マクロ記録してできるコードが、
  Cells.Find(What:="北海道", After;=...
となっているのは、アクティブなシートのすべてのセルから検索を行う操作を記録したので、Cellsプロパティが使われているのです。

[スポンサードリンク]

Home » Excel VBA Rangeオブジェクト » セル検索 » Findメソッドで範囲を指定して検索する

「セル検索」の記事一覧

検索


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

.