VBAで配列の要素数0を判定したいときはないでしょうか。
けど、そんな中で悩むことは、
・配列の要素数0と要素が無い(空)場合との違いがよくわからない
ですよね。
今回はそんなお悩みを解決する
・配列の要素数0と要素が無い場合との違い
についてまとめます!
もくじ
VBAで配列の要素数0を判定するイメージ
VBAで配列の要素数0を判定するイメージについて説明をします。
以下のように配列を作成し、要素に値を入れます。
arrTemp = Array(1)
配列の要素数が表示されます。
この処理で、配列の要素数が0の場合と要素が全くない場合の判定を行っていきます。
それでは早速試してみましょう。
配列の要素数0と要素が無い場合の違い
配列の要素数0と要素が無い場合の違いについて説明をします。
配列の要素は0番目から始まりますので、要素数0というのは0番目に要素が一つある状態を意味します。
判定で使用する関数はUBound関数で、配列の最大要素数を取得する関数となります。
構文 | UBound(配列) |
---|---|
説明 | 配列の最大要素数を取得します。 |
1つの要素がある状態でUBound関数に判定させると、最大要素数は0という結果になります。
次に配列の要素が無い場合についてですが、動的配列として定義するもReDimステートメントで要素が一つも割り当てていない状態が該当します。
この状態でUBound関数で判定するとエラー「エラーNo9 ”インデックスが有効範囲にありません。”」となります。
まとめますと、配列の要素数0の場合は要素が0番目に1つある状態(最大要素数0)、要素が無い場合は動的配列で要素が割り当てていない状態であるということになります。
VBAで配列の要素数0を判定する方法
VBAで配列の要素数0を判定する方法について説明をします。
VBAコード
サンプルのVBAコードは以下の通りです。
Sub 配列要素有無判定テスト()
On Error GoTo Error
'Variant型で定義します。
Dim arrTemp() As Variant
'配列かどうか確認します。
Debug.Print IsArray(arrTemp)
'要素に値を代入します。
arrTemp = Array(1)
'配列の最大要素数を取得し0以上の場合処理します。
If (UBound(arrTemp) >= 0) Then
MsgBox "最大要素数は" & UBound(arrTemp) & "です。"
End If
Exit Sub
Error:
MsgBox "要素が全くありません。"
'エラー内容を出力します。
Debug.Print Err.Description & vbCrLf & "エラー番号:" & Err.Number
End Sub
VBAを設定する
VBAを設定していきましょう。
要素に値を代入します。
サンプルでは0番目の要素に1を代入しています。
arrTemp = Array(1)
VBAの実装
VBAの実装方法については
VBAの実装手順
をご参照ください。
VBAを実行する
VBAを実行してみましょう。
最大要素数0と判定されましたね。
VBAの説明
VBAについて説明をします。
Variant型で定義します。なお、配列として定義するには()つきである必要があります。
Dim arrTemp() As Variant
配列かどうかIsArray関数で確認します。配列である場合はTrueを返します。
Debug.Print IsArray(arrTemp)
構文 | IsArray(配列) |
---|---|
説明 | 配列であるか判定します。配列である場合はTrueを返します。 |
配列の最大要素数を取得し0以上の場合はメッセージを表示させます。
If (UBound(arrTemp) >= 0) Then
MsgBox "要素が" & UBound(arrTemp) & "個あります。"
End If
UBound(arrTemp)がエラーとなった場合のトラップを仕掛けます。
Error:
MsgBox "要素が全くありません。"
エラー内容を出力します。
Debug.Print Err.Description & vbCrLf & "エラー番号:" & Err.Number
VBAで配列の要素数が無い場合を判定する方法
VBAで配列の要素数が無い場合を判定する方法について説明をします。
VBAを設定する
VBAを設定していきましょう。
以下のコードを削除するか「’」でコメントアウトして無効化します。
arrTemp = Array(1)
VBAを実行する
VBAを実行してみましょう。
要素数が全くないと判定されましたね。
VBAの説明
VBAについて説明をします。
配列の最大要素数が全くないためこの時点でエラーとなります。
If (UBound(arrTemp) >= 0) Then
MsgBox "要素が" & UBound(arrTemp) & "個あります。"
End If
UBound(arrTemp)がエラーとなった場合のトラップのほうへ行き、メッセージが表示されます。
Error:
MsgBox "要素が全くありません。"
エラー内容を出力します。
Debug.Print Err.Description & vbCrLf & "エラー番号:" & Err.Number
UBound関数のエラー「エラーNo9 ”インデックスが有効範囲にありません。”」が出力されます。
VBAの実装手順
実装手順は以下の通りです。
Excel側にVBAを実装していきます。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
・配列の要素数0と要素が無い場合との違い
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す