【VBA】ループでの配列への要素追加

VBA初めて触っていて、ちょっと詰まった点があったのでメモ

配列が初期化されているかの判定において、Sgn関数は環境によってエラーになることがあるっというのを参考記事で学ばせていただきました。
そこで、下記のように行なったのですがエラーになってしまいました。

Dim arr() As String

If isArrayEx(arr) = -1 Then
    ReDim Preserve arr(0)
Else
    ReDim Preserve arr(UBound(arr) + 1)
End If

環境によるかもですが、要素数の指定のない配列ではUBoundが「インデックスが有効範囲にありません」とエラーになりました。

Dim arr() As String
Debug.Print UBound(arr) '← これがエラーになるためisArrayEx()では0が返ってきてしまう

幸いにも私がやりたかったことは単純だったので、
初期化はループの外で行い、ループの初回でなければ要素を追加する
っという手法で落ち着いた。

Dim arr() As String
ReDim Preserve arr(0)

Dim isFirst As Boolean
isFirst = True

For i = 0 To 10
    If Not isFirst Then
        ReDim Preserve arr(UBound(arr) + 1)
    End If
    arr(UBound(arr)) = i * 2
    isFirst = False
Next

参考

コメントを残す

メールアドレスが公開されることはありません。