'配列データをセル範囲に一括出力 Range("A2:C3") = bh配列データ
配列データを一括で出力するには、指定セル範囲に配列変数名を代入するだけで可能です
配列データはメモリ上での操作で取得・加工を行うため、その部分は少し難しい内容になりますが、出力は非常に簡単にできますし、セルの更新自体も1回で済むので処理が高速になります
実際の使用例
Dim bh配列データ(99) As Long, bhインデックス番号 As Long For bhインデックス番号 = 0 To 99 bh配列データ(bhインデックス番号) = Range("A1").Offset(0, bhインデックス番号) * 1.1 Next bhインデックス番号 Range(Range("A2"), Range("A2").Offset(0, 99)) = bh配列データ
配列データを計算をしてから代入していき、計算が終わってから一括で出力します
こうすることで、1セルずつ処理を実行していくよりも遥かに早く出来ます
例コードでは、1行目の100セルに10%上乗せした数値を計算して出力しています
ようするに、税抜き金額から税込み金額を計算して出力している形です
まずは、コード実行前と後の結果画像を確認します
コード実行前の状態です
100セルを表示することはできませんので、SUM関数で合計金額を表示します
D3には、計算結果が正しいかを分かり易くするために、答えを先に表示しています
この状態でコードを実行すると、2行目に計算結果金額が出力されます
コード実行後の状態です
100セル全ての計算を行い、セルへの入力は1回のみなので瞬時に終わります
金額が答えのセルと一致していることも確認してください
ループ処理により1セルずつ行っていった場合、自分の環境では10倍速度が違いました
セルの個数が増えれば、その幅はどんどん大きくなっていきます
このように、ループ処理で計算を行っていけば出来るような処理でも配列を使用すると非常に高速に処理できることがわかります
コードの解説
Dim bh配列データ(99) As Long, bhインデックス番号 As Long
まず配列データの変数宣言です
ここでは静的配列として宣言しています、個数が確定している場合は静的配列の方が便利です
静的配列と動的配列の違いと宣言方法に関しては以下の記事を確認してください
For bhインデックス番号 = 0 To 99
Forループの開始コードです
要素数分ループを実行します
bh配列データ(bhインデックス番号) = Range("A1").Offset(0, bhインデックス番号) * 1.1
左辺は、配列データのインデックス番号をForループの変数値で指定しています
右辺は、A1セルからForループの変数値分Offsetで移動しながら、そのセル数値に「1.1」を乗算した数値を代入しています
ここで、実際の計算が行われていますが、セルへの出力は行われていないため
このループ処理自体は非常に高速に終了します
Next bhインデックス番号
Forループの終了コードです、次のインデックス番号に移動します
Range(Range("A2"), Range("A2").Offset(0, 99)) = bh配列データ
ここで一括出力を行っています
配列で一括代入する場合は、要素数と同じセル範囲を指定する必要があります
なので、ここではA2セルからOffsetを使用して99セル右に移動したところまでを範囲指定しています
ここで、要素数未満であった場合はその選択範囲分データが出力され
超えていた場合は「#N/A」が出力されます
またセル範囲は連続している必要があります、連続していない場合はその範囲ごとにインデックス番号が最初から入力されます
そのあたりについては以下の記事で対策と合わせて解説しています
後は、配列変数名だけでデータ全ての指定が可能です