「vba find 行番号取得 全て取得」
「excel vba find 条件に合う 行番号を全て取得」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが時折あります。
「vba find 列番号 全て取得」
という同じような検索キーワードも見かけます。
Excel VBA(Visual Basic for Applications)の、Range.Findメソッドで検索を行って、見つかったすべての行番号や列番号を取得するには、どのようなプロシージャを書けばいいのかを探している方による検索です。
検索を行い全ての行番号を取得するサンプルマクロ
Range.Findは、検索を行って見つかった1個のセルを表すRangeオブジェクトを返すだけのメソッドですから、全部を検索するには、Range.FindNextメソッドと組み合わせてループ処理を行いましょう。
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
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プロパティを使えば行番号が取得でき、
Columnプロパティなら列番号を取得できます。
Home » Excel VBA Rangeオブジェクト » セル検索 » Find・FindNextで全ての行番号・列番号を取得する