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
Thanks a lot for the detailed information
Thanks for the valuable information
Exactly!