「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プロパティが使われているのです。
- Newer:置換のショートカットキーは?-Ctrl+H
- Older:Word 2013でページ番号を挿入する
Home » Excel VBA Rangeオブジェクト » セル検索 » Findメソッドで範囲を指定して検索する