Excel VBA 動的配列が空かどうかの確認方法

次のように配列の要素を確保しないでUBoundなどを使うと,
「インデックスが有効範囲にありません。」というエラーが出る.

Sub test()
    Dim i As Long
    Dim a() As Long

    For i = 0 To UBound(a) ‘エラー
        ‘~~~
    Next
End Sub

エラーを回避しようと思っても Not a Is Nothing とかは使えない。
次のようにするとエラーを回避できる.

Sub test()
    Dim i As Long
    Dim a() As Long
    If Not Not a Then ‘Notを2つ
        For i = 0 To UBound(a)
            ‘~~~
        Next
    End If
End Sub

または,

Sub test()
    Dim i As Long
    Dim a() As Long
    If Sgn(a) <> 0 Then ‘Sgn関数を使う(なぜ使えるのかは不明)
        For i = 0 To UBound(a)
            ‘~~~
        Next
    End If
End Sub

または,

Private Declare Function SafeArrayGetDim Lib “oleaut32” (ByRef psa() As Any) As Long

Sub test()
    Dim i As Long
    Dim a() As Long
    If SafeArrayGetDim(a) <> 0 Then ‘APIを使う
        For i = 0 To UBound(a)
            ‘~~~
        Next
    End If
End Sub

“Excel VBA 動的配列が空かどうかの確認方法” への1件の返信

コメントを残す

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