Home » ExcelVBA Rangeオブジェクト » セル検索 » Find・FindNextで全ての行番号・列番号を取得する

Find・FindNextで全ての行番号・列番号を取得する

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

「vba find 行番号取得 全て取得」
「excel vba find 条件に合う 行番号を全て取得」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。

「vba find 列番号 全て取得」
という同じような検索キーワードも見かけます。

Excel VBA(Visual Basic for Applications)の、Range.Findメソッドで検索を行って、見つかったすべての行番号や列番号を取得するには、どのようなプロシージャを書けばいいのかを探している方による検索です。

[スポンサードリンク]

検索を行い全ての行番号を取得するサンプルマクロ

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

Sub 北海道という文字列を検索して全ての行番号を取得する()
 Dim rng As Range
 Dim adr As String ' 最初に見つかったセルのAddress

 Set rng = Cells.Find("北海道")
 If rng Is Nothing Then
  MsgBox "見つかりませんでした。"
  Exit Sub
 Else
  adr = rng.Address
  Debug.Print rng.Row
 End If

 Do
  Set rng = Cells.FindNext(After:=rng)
  If rng.Address = adr Then
   Exit Do
  Else
   Debug.Print rng.Row
  End If
 Loop
End Sub

上記のマクロを実行すると、アクティブなワークシート上で「北海道」という文字列の入力されているセルが検索され、その行番号がイミディエイトウィンドウにすべて出力されます。

既にご紹介済みのRange.FindとRange.FindNextで検索を行い、ヒットした個数をカウントするマクロと、基本構造は同じです。

違うのは、見つかったセルの個数を数えるために変数をインクリメントしていた部分が、
  Debug.Print rng.Row
になっていることだけです。

検索を行い全ての列番号を取得する場合は

行番号ではなく、すべての列番号を取得したい場合、2か所の、
  Debug.Print rng.Row
というコードを、
  Debug.Print rng.Column
にするだけです。

RangeオブジェクトのRowプロパティを使えば行番号が取得でき、

Find・FindNextで全ての行番号・列番号を取得するExcelマクロ

Columnプロパティなら列番号を取得できます。

Find・FindNextで全ての行番号・列番号を取得するExcelマクロ

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » セル検索 » Find・FindNextで全ての行番号・列番号を取得する

「セル検索」の記事一覧

検索


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

.