「VBA 文字列を検索して見つかったセルの行番号を配列に入れる」
という検索で、このサイト『インストラクターのネタ帳』へアクセスがありました。
Find・FindNextで検索した行番号を配列に格納するサンプルマクロ
以下のSubプロシージャを参考にしてください。
Dim rng As Range
Dim adr As String
Dim arr() As Long
Set rng = Cells.Find("北海道")
If rng Is Nothing Then
MsgBox "見つかりませんでした。"
Exit Sub
Else
adr = rng.Address
ReDim arr(1)
arr(1) = rng.Row
End If
Do
Set rng = Cells.FindNext(After:=rng)
If rng.Address = adr Then
Exit Do
Else
ReDim Preserve arr(UBound(arr) + 1)
arr(UBound(arr)) = rng.Row
End If
Loop
End Sub
上記のSubプロシージャを実行すると、アクティブシートで「北海道」と入力されたセルを検索して、みつかった場合にそのセルの行番号が配列に格納されます。
End Sub直前のStopステートメントでステップ実行に入ったら、ローカルウィンドウでどう格納されているかを確認できます。
サンプルマクロの解説
基本構造は、ご紹介済みのヒットした件数をカウントするマクロと同じです。
見つかったセルの行番号を配列に格納したいとのことですから、要素数不定で配列変数の宣言を行い、
Dim arr() As Long
最初に見つかった時点で、配列のサイズを決めて、1つ目のセルの行番号を格納します。
Set rng = Cells.Find("北海道")
If rng Is Nothing Then
Else
adr = rng.Address
ReDim arr(1)
arr(1) = rng.Row
あとは、Range.FindNextメソッドで検索を繰り返し、
Do
Set rng = Cells.FindNext(After:=rng)
見つかるたびに配列のサイズを拡張して、行番号を格納しています。
If rng.Address = adr Then
Else
ReDim Preserve arr(UBound(arr) + 1)
arr(UBound(arr)) = rng.Row
「VBA 文字列を検索して見つかったセルの行番号を配列に入れる」
と検索なさった方は、配列の扱いに慣れていないのでしょうから、配列変数arrの1つ目の要素arr(0)を使わないようにしています(arr(0)は初期値「0」のままになります)。
- Newer:全Rectangleを削除する
- Older:MergeCellsとMergeAreaの違い
Home » Excel VBA Rangeオブジェクト » セル検索 » Find・FindNextでみつかった行番号を配列に