VBAでデータを繰り返し処理する際、「ループが遅い」「1行ずつ処理していると時間がかかる」と感じたことはありませんか?
その悩み、実は配列(Array)を使うことで劇的に改善できるかもしれません。
配列の基本と、どんな場面で使うと効果的なのかをわかりやすく解説します。
配列とは?まとめて扱える箱のようなもの
配列は、複数の値をひとつの変数でまとめて扱うための仕組みです。
たとえば、A列の100行分の値を1つ1つ変数に入れるのは現実的ではありません。
そんなときに配列を使うと、次のようにまとめて扱えます。
Dim dataArr As Variant
' A列のデータを配列に格納(2次元で取得される)
dataArr = Range("A1:A100").Value
このコードでは、セル範囲の値を dataArr という変数にまとめて格納しています。
配列にすることで、一括処理が可能になり、ループも高速化されます。
配列を使った繰り返し処理の基本
通常、セルを1つずつループで処理するには、次のように書きます。
Dim i As Long
For i = 1 To 100
If Cells(i, 1).Value = "OK" Then
Cells(i, 2).Value = "済"
End If
Next i
この方法でも問題なく動きますが、1000行、10000行と増えると一気に処理が遅くなります。
では、同じ処理を配列で書き直してみましょう。
Dim i As Long
Dim dataArr As Variant
' 値の取得と代入を分けて処理
dataArr = Range("A1:A100").Value
For i = 1 To UBound(dataArr, 1)
If dataArr(i, 1) = "OK" Then
dataArr(i, 2) = "済"
End If
Next i
' 処理済み配列を一括で戻す
Range("A1:B100").Value = dataArr
この方法では、処理の対象となる範囲をいったん配列に取り込んで、配列上で処理します。
そして、処理が終わった配列をまとめてシートに戻すことで、書き込みの回数を減らすことができます。
これにより、セルの読み書きが原因で遅くなっていた処理が大幅に高速化されます。
配列を使うメリットと注意点
配列を使うことで得られる主なメリットは次のとおりです。
- セルへのアクセス回数が減り、処理が高速になる
- 範囲全体を一度に扱えるため、コードがスッキリする
- フォームや関数でも使い回ししやすくなる
一方で、次の点には注意が必要です。
Range("A1:A100").Valueのように読み込むと2次元配列になる- 配列のサイズ(要素数)を正しく把握するために
UBoundやLBoundを使う
たとえば次のようにして、配列のサイズを調べながらループ処理ができます。
Dim i As Long
Dim arr As Variant
arr = Range("A1:A100").Value
For i = LBound(arr, 1) To UBound(arr, 1)
' arr(i, 1) で各セルの値にアクセスできる
Next i
まとめ
配列は、繰り返し処理の効率を一気に高める便利な仕組みです。
特に、データ量が多いときは、1セルずつ処理するのではなく、まとめて処理 → まとめて出力の流れを意識すると、処理時間が大幅に短縮されます。
- 配列は複数の値を1つにまとめて扱える変数
- セルの値を配列に入れて処理すれば、高速化が期待できる
Range.Valueで配列に読み込むと、2次元配列になることを意識する
この基本を押さえておけば、マクロの処理が重くて困っている場面でも、配列を使ってスピードアップが実現できるようになります。
