Home » Excel VBA Rangeオブジェクト » セル検索 » Find・FindNextでみつかった行番号を配列に

Find・FindNextでみつかった行番号を配列に

対象:Excel2010, Excel2013, Windows版Excel2016

「VBA 文字列を検索して見つかったセルの行番号を配列に入れる」
という検索で、このサイト『インストラクターのネタ帳』へアクセスがありました。

[スポンサードリンク]

Find・FindNextで検索した行番号を配列に格納するサンプルマクロ

以下のSubプロシージャを参考にしてください。

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

Stop
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」のままになります)。

[スポンサードリンク]

Home » Excel VBA Rangeオブジェクト » セル検索 » Find・FindNextでみつかった行番号を配列に

「セル検索」の記事一覧

検索


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

.