VBAはもっと配列回りが楽にいじれるようになってもいいとおもう。
配列判定のついでに要素数を取得するプロシージャ。
空の配列を参照するとエラーになってしまうので、扱いやすくするために実装。
しょぼい。
Option Explicit '/** ' * IsArrayLen ' * 引数が配列かを判定し、配列の場合は要素数を返す ' * @param i_varArray 配列 ' * @return 配列の長さ(0を含む)、配列以外の場合は-1 ' */ Public Function IsArrayLen(ByVal i_varArray As Variant) As Long Dim lngFuncResult As Long On Error GoTo Proc_Err '配列かを判定し、要素数を取得 If IsArray(i_varArray) Then lngFuncResult = UBound(i_varArray) Else lngFuncResult = -1 End If Proc_Exit: IsArrayLen = lngFuncResult Exit Function Proc_Err: '初期化されていない場合要素数0を返す If Err.Number = 9 Then lngFuncResult = 0 End If Resume Proc_Exit End Function Sub test() Dim ary1(9) As Variant Dim ary2() As Variant '配列以外を渡した場合 Debug.Print IsArrayLen(1) '初期化済みの配列を渡した場合 Debug.Print IsArrayLen(ary1) '宣言のみの配列を渡した場合 Debug.Print IsArrayLen(ary2) End Sub