- VBAで大量データを処理したいけど、ループが遅い…
- 配列って難しそうで避けてきた…
- 静的配列と動的配列の違いは?
このような方に向けて書きました。
結論、配列を使えるだけでVBAの処理速度は劇的に改善します。
特に大量データを扱う業務では、配列に置き換えるだけで何十倍も処理速度アップすることもあります。
特にVBAの配列はちょっと億劫に感じてしまいがちですが、ぜひマスターして欲しいテクニックです。
本記事では、VBAの配列を基礎から実務で使うテクニックまでご紹介します。
配列とは?VBAにおけるデータのまとめ方
配列は、「複数の値を1つの変数でまとめて管理する仕組み」です。
処理速度が高速
高速なメモリ領域で実行できるので、ループなどに比べて処理が高速です。
' 遅い:ループを使う方法
For i = 1 To 10000
Cells(i, 1).Value = Cells(i, 2).Value
Next i
' 早い:配列を使った例
Dim arr
arr = Range("A1:B10000").Value
For i = 1 To 10000
arr(i,1) = arr(i,2)
Next i
Range("A1:B10000").Value = arr変数宣言が楽になる
例えば、30人分のテスト点数を扱う場合に30個分の変数を用意するのは大変ですよね。
Dim score1 as Integer
Dim score2 as Integer
Dim score3 as Integer
' これを30人分繰り返す
scores1 = 80
scores2 = 65
scores3 = 85次のように配列を使うと、30人分を一括管理できます。
Dim scores(29) As Integer
scores(0) = 80
scores(1) = 65
scores(2) = 85VBAの配列の種類
VBAには2種類の配列があります。
- 静的配列
- 動的配列
それぞれの特徴を説明します。
① 静的配列(サイズ固定)
最初から要素数が決まっている配列です。
次の例では、配列の要素数は5となります。
Dim cities(4) As String
cities(0) = "東京"
cities(1) = "大阪"静的配列は「シンプル」で「処理が少し早い」というメリットがあります。
一方で、後から配列のサイズを変更することができないので、数量が決まっているものを配列で扱う場合に有効です。
② 動的配列(サイズ変更OK)
動的配列は、あとからサイズを決められる配列です。
# 空の配列を定義
Dim cities() As String
# 4つの要素を追加
ReDim cities(4)
# 5番目の要素を追加
ReDim Preserve cities(5)特徴は、データを保持したまま配列を拡張できることです。
データの件数が不明だったり、後から要素数が増減する場合には便利。
実務では、動的配列を使うことが多いです。
配列を使った実践テクニック
配列をループ処理する
配列に入れたデータを取り出して、処理したい場合にはループ処理しましょう。
Dim i As Long
For i = LBound(cities) To UBound(cities)
Debug.Print cities(i)
Next iLBoundは、配列の最小インデックス番号、UBoundは、配列の最大インデックス番号が取得できます。
これらを使えば、配列サイズが変わっても安全に扱えます。
配列のコピー
配列をコピーすることもできます。
イコールで繋げばコピーできますが、参照コピー扱いになります。
つまり、元々の配列を変えるとコピー先も変更されます。
copiedArray = originalArray別物としてコピーしたい場合には、次のようにします。
For i = LBound(originalArray) To UBound(originalArray)
copiedArray(i) = originalArray(i)
Next iまとめ:配列を使える人はVBAが速い
- 配列はデータをまとめて管理できる
- 動的配列は実務で特に便利
- 大量データ処理は配列必須
VBAで処理が遅いと感じたら、まず配列を使うことを検討してみてください。


コメント