VBAで高速処理に欠かせない配列処理
ExcelVBAマクロは動作が遅いと言われがちです。それは大きな間違いです。
大体そういう方は、大量のデータをワークシート内のセルで、検索、代入、計算しており、
その処理方法が間違いです。
一次元配列もしくは二次元配列にデータを格納してから処理をすることで、
速度の改善が見込めます。
今回は配列の基礎部分のコードを紹介します。
配列の宣言
'■1次元配列(静的配列)の宣言 '■2次元配列(静的配列)の宣言 Dim arr3(2, 3) As String 'String型の3(0~2)x4(0~3)の12個要素 Dim arr4(1 To 2, 1 To 3) As String 'String型の2(1~2)x3(1~3)の 6個要素 Dim arr5() As Variant 'Variant型の動的配列 '■要素数の変更(★配列に入っていたデータは消える)動的配列 ReDim arr5(10) ReDim arr5(1) '要素を減らしたり ReDim arr5(5, 10) '次元数を増やしたり ReDim arr5(10) ' 減らしたりできる '■要素数の変更(★配列に入っていたデータを残す)動的配列 ReDim Preserve arr1(11) '一次元配列はデータを残して簡単に要素数を増やすことが可能。 ReDim arr5(2, 3) ReDim Preserve arr5(2, 4) '二次元配列は最終次元のサイズのみ簡単に増やす事が可能。
変数なので当たり前ですが、宣言の範囲は以下の通りに可能です。データ型も基本のデータ型と同一です。
■宣言範囲
・Dim ステートメント
・Private ステートメント
・Public ステートメント
・Dim ステートメント
・Private ステートメント
・Public ステートメント
二次元配列の一次元目の要素数を増やす方法
静的配列や動的配列の基本部分を上記でご説明しました。
配列は動的な二次元配列で、データをPreserveしながら要素数増やす、計算を配列内で行う。
上記がある意味基本形だと考えています。
しかし、Redim Preserveで簡単に要素数を増やすのは最終次元のみと案内しました。
セルで言うと、列方向を増やす形です。
二次元配列で、列方向は増えても無意味!それなら最初に宣言しますよね。
圧倒的に1次元目(セルで言う縦方向)を増やしたいケースが多いでしょう。
その場合はTranspose関数を上手く使い、1次元目を増やす事が可能です。
ExcelVBAマクロ「二次元配列を動的に行数(一次元目)を増やす」をパーツ化する
関連記事
配列はセルと同じ関係性と考えると、理解がしやすいのではないでしょうか。
まずは下記のように、セルを配列に格納し、計算は配列で行い、セルに貼り付ける事で、
配列に慣れて頂ければと考えています。
配列にセル範囲を格納/動的配列をセルに貼付【ExcelVBA】
コメント