セルへのアクセスは
・コストが高い
とされています!
※「セルへのアクセス」とは「Range等を使用した処理」のことです。
コストが高いため、セルへのアクセス回数が多いと
処理が重くなってしまいます!
※例えば「繰り返し処理でセルへ数百回アクセス」すると、重くなってしまいます。
よって
・セルへのアクセス回数は少ない方が良い
です!
ここでは
・指定した範囲のデータを一括で取得して
・2次元配列へ格納する方法
を紹介します!
※「一括で取得」とは「セルへのアクセスが1回」ということです。
※セルへのアクセスが1回のため、処理が重くなりません。
一括で取得したデータは
・2次元配列を使った繰り返し処理で使用
します!
※「配列を使う」とは「配列へのアクセス」であり、「メモリへのアクセス」です。
※メモリへのアクセスのため、高速に動作します(処理が重くなりません)。
※「繰り返し処理で配列へ数百回アクセス」しても、処理は重くなりません。
VBAコード
ここでは例として、シート「sample」上の
・セル「B3」~「E7」の範囲のデータを一括で取得して2次元配列へ格納し、
・2次元配列を使った繰り返し処理のよりデータを表示
します。
Option Explicit
Sub sample()
'1番右の列を定義
Const DEPT_COLUMN As Integer = "5"
Dim startRange As Range
Dim endRow As Long
Dim endRange As Range
Dim arrData As Variant
Dim i As Long
'開始セルを取得 ※B列「ID」の最初の行のセルを取得
Set startRange = Worksheets("sample").Range("B3")
'最終行を取得
endRow = startRange.End(xlDown).Row
'最終セルを取得 ※E列「部署」の最終行のセルを取得
Set endRange = Worksheets("sample").Cells(endRow, DEPT_COLUMN)
'指定した範囲を一括で取得 ※2次元配列として取得
arrData = Range(startRange, endRange)
'2次元配列の数だけ繰り返し
For i = LBound(arrData) To UBound(arrData)
'一括で取得した範囲を表示
MsgBox i & "行目のデータ" & vbLf & _
arrData(i, 1) & " | " & _
arrData(i, 2) & " | " & _
arrData(i, 3) & " | " & _
arrData(i, 4)
Next
End Sub
実行結果
指定した範囲のデータを一括で取得して、2次元配列へ格納できました。
2次元配列を使った繰り返し処理のよりデータを表示できました。
参考①
指定した1列/1行のデータを一括で取得して、(1次元の、普通の)配列へ格納することもできます。
詳細は以下の記事をご確認ください。
参考②
上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。
●「Applicationオブジェクト」の「Range」プロパティ
●LBound関数
●UBound関数