140730-err

 VBもしくはVBAで動的配列に要素数を設定する前の状態を確認したい場合の方法を下記に明記しておきます。

 私はAccessによる開発をよく行うのですが(PHPの開発も同じく多いです)、その時にVBAは欠かせない物です。そのVBAでは動的配列をよく使用します。例えば下記のようなプログラムです。

Public Sub test()

    Dim var() As Variant
    
    ReDim var(2)
    
    var(0) = "a"
    var(1) = "b"
    var(2) = "c"
    
End Sub

 通常、プログラムは上記のようにDimで動的配列を宣言しReDimで要素数を設定。設定した配列に各値をセットしています。しかし、時と場合によってReDimで要素数を設定する前の状態で、その配列に要素数がセットしてあるかどうかをチェックする場合があります。

 そうした場合

UBound(var)

で、要素数の数を取得すればいいような気がするのですが、ReDimの前でUBoundを行うとエラー番号「9」の「インデックスが有効範囲にありません。」で怒られてしまいます。

 では、どうやってReDimの前の状態で要素数がセットされているのかチェックする方法を下記に紹介します

Errを使う

 まずはオーソドックスな方法としてエラー処理で取得する方法です。

Public Sub test1()
On Error GoTo test3_Err
    Dim var() As Variant
    Dim temp
    temp = UBound(var)
    MsgBox "動的配列の割り当てが設定済みです"
test3_Err_Exit:
    Exit Sub
test3_Err:
    If Err.Number = 9 Then
        MsgBox "動的配列の割り当てが未設定です"
    Else
        Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
    End If
End Sub

Not Notを使う

 これはどうしてこのような方法でわかるのかはよくわかりませんが、この方法でもチェックはできます。

Public Sub test2()
    Dim var() As Variant
    If Not Not var Then
        MsgBox "動的配列の割り当てが設定済みです"
    Else
        MsgBox "動的配列の割り当てが未設定です"
    End If
End Sub

Sgn関数を使う

 関数にSgn関数というのがあります。この関数は引数にセットした数字の正負を求める関数なのですが、この関数でも調べることができます。なぜかはよくわかりません。

Public Sub test3()
    Dim var() As Variant
    If Sgn(var) <> 0 Then
        MsgBox "動的配列の割り当てが設定済みです"
    Else
        MsgBox "動的配列の割り当てが未設定です"
    End If
End Sub

APIを使う

 最後の手段としてAPIを使う方法があります。

Private Declare PtrSafe Function SafeArrayGetDim Lib "oleaut32" (ByRef psa() As Any) As Long
Public Sub test4()
    Dim i As Long
    Dim var() As Variant
    If SafeArrayGetDim(var) <> 0 Then 'APIを使う
        MsgBox "動的配列の割り当てが設定済みです"
    Else
        MsgBox "動的配列の割り当てが未設定です"
    End If
End Sub

最後に

 上記のどの方法を使用してもいいですが、2つめの方法が一番スマートな方法のような気がしますが、1番目のErrの方法が無難かな。

 それにしてもDimで変数を宣言したときの変数って何なんでしょうね?ちょっと調べると「NullReferenceException」という言葉が見つかりましたが、NullでもEmptyでもないとはよくわかりません。

【参考サイト】
Excel VBA 動的配列が空かどうかの確認方法: T_Nary ブログ

Accessマクロ&VBAのプログラミングのツボとコツがゼッタイにわかる本

著者/訳者:立山 秀利

出版社:秀和システム( 2010-08-20 )

定価:

Amazon価格:¥ 2,592

単行本 ( 319 ページ )

ISBN-10 : 4798027073

ISBN-13 : 9784798027074