【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
以上になります。
お疲れさまでした。
“【VBA】配列” に対して1件のコメントがあります。