【Excel VBA】配列の要素数0を判定する方法!要素が無い判定も!

VBAで配列の要素数0を判定したいときはないでしょうか。

けど、そんな中で悩むことは、

・VBAで配列の要素数0を判定したいが方法がよくわからない
・配列の要素数0と要素が無い(空)場合との違いがよくわからない

ですよね。

今回はそんなお悩みを解決する

・VBAで配列の要素数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を返します。

タカヒロ
タカヒロ
()が無い場合は変数として認識されますので、この場合はFalseとなります。

配列の最大要素数を取得し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」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

さいごに

いかがでしょうか。

今回は、

・VBAで配列の要素数0を判定する方法
・配列の要素数0と要素が無い場合との違い

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です