質問のタイトルには、ループ ソリューションは遅く、非ループ ソリューションは高速であるという仮定があります。ということで、比較して確認してみました。
テストケース
50,000 個のサンプルと 50% の一致値で構成されるサンプル データをいくつか作成しました。最速の方法として、さらに 2 つのサンプル セットを作成しました。これも 50,000 行で、1 つには 10% 一致する行があり、もう 1 つには 90% 一致する行があります。
投稿された各メソッドをこのデータに対してループで実行し、ロジックを 10 回繰り返しました (合計 500,000 行を処理するための時間です)。
50% 10% 90%
ExactaBox 1300 1240 1350 ms
Scott Holtzman 415000
John Bustos 12500
Chris neilsen 310 310 310
Brettdj 970 970 970
OP 1530 1320 1700
したがって、教訓は明らかです。ループが含まれているからといって、遅くなることはありません。遅いのはワークシートへのアクセスなので、それを最小限に抑えるためにあらゆる努力をする必要があります。
更新
Brettdj のコメントのテストを追加: 1 行のコード
完全を期すために、ここに私の解決策があります
Sub GetRows()
Dim valMatch As String
Dim rData As Range
Dim a() As Long, z As Variant
Dim x As Long, i As Long
Dim sCompare As String
Set rData = Range("A1:A50000")
z = rData
ReDim a(1 To UBound(z, 1))
x = 1
sCompare = "aa"
For i = 1 To UBound(z)
If z(i, 1) = sCompare Then a(x) = i: x = x + 1
Next
ReDim Preserve a(1 To x - 1)
End Sub