ExcelVBA

配列の宣言(静的/動的/1次元/2次元)【ExcelVBA】

VBAで高速処理に欠かせない配列処理

ExcelVBAマクロは動作が遅いと言われがちです。それは大きな間違いです。
大体そういう方は、大量のデータをワークシート内のセルで、検索代入計算しており
その処理方法が間違いです。

一次元配列もしくは二次元配列にデータを格納してから処理をすることで、
速度の改善が見込めます。

今回は配列の基礎部分のコードを紹介します。

配列の宣言

'■1次元配列(静的配列)の宣言
Public arr1(10) As Variant      '■Variant型の0~10の11個要素
Private arr2(1 To 5) As Long    '■Long型   の1~ 5の 5個要素

Private Sub test_Array()
    '■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個要素
    
    
    '■要素数の変更(★配列に入っていたデータは消える)動的配列
    ReDim arr1(10)
    ReDim arr1(1)       '要素を減らしたり
    ReDim arr1(5, 10)   '次元数を増やしたり
    ReDim arr1(10)      '        減らしたりできる
    
    '■要素数の変更(★配列に入っていたデータを残す)動的配列
    ReDim Preserve arr1(11)   '一次元配列はデータを残して簡単に要素数を増やすことが可能。
    ReDim arr1(2, 3)
    ReDim Preserve arr1(2, 4) '二次元配列は最終次元のサイズのみ簡単に増やす事が可能。
End Sub

変数なので当たり前ですが、宣言の範囲は以下の通りに可能です。データ型も基本のデータ型と同一です。

■宣言範囲
・Dim ステートメント
・Private ステートメント
・Public ステートメント

二次元配列の一次元目の要素数を増やす方法

静的配列や動的配列の基本部分を上記でご説明しました。
配列は動的な二次元配列でデータをPreserveしながら要素数増やす、計算を配列内で行う。

上記がある意味基本形だと考えています。

しかし、Redim Preserveで簡単に要素数を増やすのは最終次元のみと案内しました。
セルで言うと、列方向を増やす形です。
二次元配列で、列方向は増えても無意味!それなら最初に宣言しますよね。

圧倒的に1次元目(セルで言う縦方向)を増やしたいケースが多いでしょう。
その場合はTranspose関数を上手く使い、1次元目を増やす事が可能です。
ExcelVBAマクロ「二次元配列を動的に行数(一次元目)を増やす」をパーツ化する

関連記事

配列はセルと同じ関係性と考えると、理解がしやすいのではないでしょうか。
まずは下記のように、セルを配列に格納し、計算は配列で行い、セルに貼り付ける事で、
配列に慣れて頂ければと考えています。

配列にセル範囲を格納/動的配列をセルに貼付【ExcelVBA】

 

 

コメント

タイトルとURLをコピーしました