B-Teck!

お仕事からゲームまで幅広く

【VBA】配列であるかを判定し、配列であれば要素数を返すプロシージャ

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

f:id:beatdjam:20141216023624p:plain