【VBA】配列

おだねこ

~簡単な自己紹介~

  • 嫁と猫3匹と暮らすフルリモートの三十路SE
  • 投資・節約・副業で資産形成中
  • 現在の金融資産は約1,750万円、めざせアッパーマス層(資産3,000万円)

VBAの配列の初期化、配列系関数の使い方などをメモしていきます。

内容は随時更新していきます。

初期化・格納(静的配列)

要素数が固定タイプの配列です。

要素数=1で0と1が使えます。

他の言語(PHPやJavaなど)に慣れている方は「要素数=2」では?と戸惑うと思います。

Dim arr(1)
arr(0) = ""
arr(1) = ""

下記でも同じ内容になります。

arr = Array("", "")

動的配列

要素数が可変タイプの配列です。

Dimで初期化後、ReDimで配列の要素数を設定します。

Dim arr()
ReDim arr(1)
arr(0) = ""
arr(1) = ""

ReDimを実行すると、配列の値は破棄されてしまいます。

配列の値を保持したまま要素数を変えたい場合、Preserveを使います。

Dim arr()
For counter = 0 To 5
    ReDim Preserve arr(counter)
    arr(counter) = counter
Next

他の言語だとpushなどで末尾に要素を追加できますが、VBAにはそういった関数はないので、私は自分で下記のような関数を用意しています。

'配列の末尾に要素を追加
Public Function ArrayPush(arr, val)
    '更新する配列の長さを取得(デフォルト:0)
    arr_length = 0
    On Error Resume Next
    arr_length = UBound(arr) + 1
    
    '配列の長さ更新
    ReDim Preserve arr(arr_length)
    
    '末尾に要素を追加
    arr(arr_length) = val
End Function

VBAの引数は基本的に参照渡しなので、関数内で引数を編集すればreturnなどをしなくても、呼び出し元でも編集結果を使用することができます。

Ubound(キーの最大値を取得=プラス1すれば配列の要素数を取得)

私はPHPやJavaに慣れているので、下記の例だと2が返ってきてほしいですが、VBAでは1が返ってきます。

arr = Array("", "")
array_max_key = UBound(arr) '1

プラス1してあげれば要素数を取得することになります。

arr = Array("", "")
array_count = UBound(arr) + 1 '2

LBound(キーの最小値を取得)

arr = Array("", "")
array_min_key = UBound(arr) '0

Filter(配列を検索)

配列から引数の値に一致する要素だけの配列を生成します。

arr = Array("", "", "")
result = Filter(arr, "")
'result(0) => "猫"
'result(1) => "猫"

Filterは絞り込みになるので、単純に存在チェック(PHPでいうとin_array)がしたい場合はこちらになります。

arr = Array("", "", "")
result1 = UBound(Filter(arr, "")) > -1 'True
result2 = UBound(Filter(arr, "")) > -1 'False

私はPHPのin_arrayが好きなので、独自で関数を用意しています。

'配列存在チェック
Public Function InArray(arr, val)
    InArray = UBound(Filter(arr, val)) > -1
End Function

IsArray(配列型かチェック)

result1 = IsArray(Array("", "")) 'True
result2 = IsArray("")              'False

以上になります。

お疲れさまでした。

Follow me!

【VBA】配列” に対して1件のコメントがあります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA