今回は超個人的な備忘録です。
通常の業務アプリで必要となるシーンは思い浮かばないのですが、先日、汎用的なツールを作成しているときに必要となった処理です。それは、Variant 型変数に配列が入っていた時にその配列の次元数を確認する方法です。
配列であるかの確認
Variant 型 に配列が入っているかは、IsArray 関数で判定できます。
If IsArray(vUnknown) = True Then 'vUnknown は配列 Else 'vUnknown は配列ではない End If |
要素数の確認と次元
上記関数では、配列かどうかの判定はできますが、その次元数は判定できません。LotusScript にそれを取得する関数がないようなので、自作することにしました。
利用したのは UBound(LBound でも可)関数です。配列の要素数の最大値(最小値)を取得する関数なのですが、2 つ目の引数に次元を指定できます。
UBound ( arrayName [ , dimension ] ) |
例えば、3 次元配列の場合、以下のように記述すれば各次元の要素数の最大値が取得できます。
Dim aiArray(5, 3, 15) As Integer Dim iMax1 As Integer Dim iMax2 As Integer Dim iMax3 As Integer iMax1 = UBound(aiArray, 1) ' 5 iMax2 = UBound(aiArray, 2) ' 3 iMax3 = UBound(aiArray, 3) ' 15 |
次元数の確認
UBound で存在しない次元数を指定した場合、エラーが発生します。これを利用して Variant 変数内の次元数を確認します。
次元数を返す関数のサンプルは次の通りです。
Function GetDimension(vaArray As Variant) As Integer Dim i As Integer Dim j As Integer On Error GoTo GeneralError For i = 1 To 8 ' 存在しない次元を指定するとここでエラーになる j = UBound(vaArray, i) 'エラーがないのその次元は存在 GetDimension = i Next ExitFunc: Exit Function GeneralError: Resume ExitFunc End Function |
もし引数に配列でない値がセットされた場合には、初回の UBound でエラーが発生するので、0 が返されます。
0 件のコメント:
コメントを投稿