配列

中級VBA

配列の使い方

 配列はプログラムに慣れていない人にとっては難しい部類に入るかもしれません。
それでも避けては通れませんので、まずはしっかりと基礎を積みましょう。

配列の使い方

 配列は複数の同じ型の変数の集合体です。
変数の宣言は、

Dim 変数名 ( 要素の最大値 )  As 変数型

とします。

カッコの中は、要素数ではなく、要素の最大値である点に注意してください。
以下のように変数を宣言した時の様子を下の図に示します。

  Dim A(4) As Long

このように、A(4)と宣言した時、要素のインデックス番号は0から始まるので、要素数は5個となります。

また、配列のインデックス番号を0以外の数値から始める定義方法もあります。

Dim 変数名 ( 要素の最小値 To 要素の最大値 )  As 変数型

  Dim B(1 To 5) As Long

このように要素の最小値を1にすれば要素の最大値要素数は同じ値になります。

最後の要素(UBound) 最初の要素(LBound)

実はVBAには、配列の要素数を返す関数が用意されていません。
その代わり、
配列の最後の要素(インデックス番号)を返す UBound関数 と
配列の最初の要素(インデックス番号)を返す LBound関数 が用意されています。

要素数は、以下のようにすれば求められます。

要素数UBound(配列変数) – LBound(配列変数) + 1

二次元配列

二次元配列は、以下のように宣言します。

  Dim A( 2 , 3 ) As Long

覚え方としては、
  Dim A( , ) As Long

このような感じで、列を消化してから行に移るイメージです。
以下のようにZ字に進んで行きます。

最後の要素を得るUBound関数の使い方は、

UBound配列変数 , 次元数) 

とします。上記の例では、

  UBound(A , 1)  = 2
  UBound(A , 2)  = 3

となります。

動的配列

途中から要素を追加できる配列を動的配列と呼びます。
動的配列を宣言するには、

Dim 変数名 ( )  As 変数型

のように要素の最大値を書かずに宣言します。
その後、ReDim を使って必要な要素の最大値をセットして宣言します。

ReDim 変数名 ( )  

再び、要素数を変更したい場合は、またReDimで宣言します。

ReDim 変数名( 要素の最大値 )

今までの要素をそのまま使いたいときは、

ReDim Preserve 変数名( 要素の最大値 )

と宣言します。以下が使い方の例です。

Sub ArrTest()

    Dim A() As Long '動的配列として宣言
    Dim i As Long
    
    ReDim A(1)      '要素最大値をセット

    A(0) = 1
    A(1) = 2
    
    ReDim Preserve A(3) '要素最大値を再セット。これまでの要素を継続。
    
    A(2) = 3
    A(3) = 4
    
    For i = 0 To UBound(A)
        Debug.Print A(i)
    Next i
    
End Sub

イミディエイトウィンドウには、
  1
  2
  3
  4
と表示されます。

※Debug.Print を使うと、イミディエイトウィンドウに値が表示されます。

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