【Excel VBA】配列の空判定をする方法!二次元配列も対応可!

VBAで配列の空判定をしたいときはないでしょうか。

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

・VBAで配列の空判定をしたいが方法がよくわからない
・VBAで配列の空以外にも要素が無い場合の判定をしたいが方法がわからない

ですよね。

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

・VBAで配列の空判定をする方法
・VBAで配列の要素が無い判定をする方法

についてまとめます!

VBAで配列の空判定をするイメージ

VBAで配列の空判定をするイメージについて説明をします。

まず配列の要素はあるが、値が入っていない要素を判定します。

arrTemp = Array(1, 2, 3, 4, 5, "", "", 7, 8, 9, 10)

二次元配列も同じく要素の有無を判定していきます。

次に配列の要素自体が全くない場合を判定します。

この場合には配列として処理することはできませんので、エラートラップを仕掛けて結果を出す形にしています。

それでは早速試してみましょう。

VBAで一次元配列の空判定をする方法

VBAで一次元配列の空判定をするについて説明をします。

VBAコード

サンプルのVBAコードは以下の通りです。

Sub 空白有無を確認する_一次元配列版()
On Error GoTo Error

   Dim arrTemp() As Variant
   Dim i As Integer
   
   '配列に値を代入します。
   arrTemp = Array(1, 2, 3, 4, 5, "", "", 7, 8, 9, 10)
   
    '配列に格納された値すべてを対象に処理します。
    For i = LBound(arrTemp) To UBound(arrTemp)
        If arrTemp(i) = "" Then
            '空白であった箇所を出力します。
            Debug.Print i + 1 & "番目が空白です。"
        
        End If
    Next
Exit Sub
Error:
    Debug.Print "要素が全くありません。"
    
    'エラー内容を出力します。
    Debug.Print Err.Description & vbCrLf & "エラー番号:" & Err.Number
End Sub

VBAの実装

VBAの実装方法については
VBAの実装手順
をご参照ください。

VBAを設定する

VBAを設定していきましょう。

配列に値を代入します。空白判定のためにいくつか””で値を空に設定しましょう。

arrTemp = Array(1, 2, 3, 4, 5, "", "", 7, 8, 9, 10)

VBAを実行する

VBAを実行してみましょう。

配列の値が空となっている要素が出力されましたね。

要素が無い場合を判定する

続いて、配列の要素が無い場合も判定してみましょう。

配列の要素が無い状態とは配列の宣言はしたがReDimやArrayなどで要素を指定していない状態となります。

以下コードを削除するか、コメントアウトして無効化します。

arrTemp = Array(1, 2, 3, 4, 5, "", "", 7, 8, 9, 10)

VBAを実行してみましょう。

要素が無いと判定され、エラー内容も出力されましたね!

VBAの説明

VBAについて説明をします。

配列に格納された値すべてを対象に処理します。

For i = LBound(arrTemp) To UBound(arrTemp)

要素数のカウントで使用する関数はLBound関数とUBound関数で、配列の最小と最大要素数を取得し計算していきます。

構文 LBound(配列,次元) UBound(配列,次元)
説明 配列の最小要素数を取得します。
次元は省略した場合は1次元となります。
配列の最大要素数を取得します。
次元は省略した場合は1次元となります。

関数から最小要素数と最大要素数を取得することで、手入力をせずに配列の内容に応じて繰り返し処理を行うといったことができます。

空白であった箇所を出力します。

Debug.Print i + 1 & "番目が空白です。"

UBound(arrTemp)がエラーとなった場合のトラップを仕掛けます。

On Error GoTo Error

“要素が全くありません。”というメッセージと、エラー内容を出力します。

Error:
Debug.Print "要素が全くありません。"
‘エラー内容を出力します。
Debug.Print Err.Description & vbCrLf & “エラー番号:” & Err.Number

VBAで二次元配列の空判定をする方法

続いてVBAで二次元配列の空判定をするについて説明をします。

VBAコード

サンプルのVBAコードは以下の通りです。

Sub 空白有無を確認する_二次元配列版()
On Error GoTo Error

   Dim arrTemp() As Variant
   Dim i As Integer
   Dim j As Integer
   
   'Rangeプロパティを使い配列に値を代入します。
   arrTemp = Range("A1:B10")
   
    '配列に格納された値すべてを対象に処理します。
    For i = LBound(arrTemp, 1) To UBound(arrTemp, 1)
        For j = LBound(arrTemp, 2) To UBound(arrTemp, 2)
            If arrTemp(i, j) = "" Then
                '空白であった箇所を出力します。
                Debug.Print i & "行目の" & j & "列目が空白です。"
            
            End If
        Next
    Next
Exit Sub
Error:
    Debug.Print "要素が全くありません。"
    
    'エラー内容を出力します。
    Debug.Print Err.Description & vbCrLf & "エラー番号:" & Err.Number
End Sub

VBAを設定する

VBAを設定していきましょう。

配列に値を代入します。Excel側のセル範囲に値を入力し、いくつか空にしていきます。

セル範囲をRangeプロパティに設定します。

arrTemp = Range("A1:B10")

VBAを実行する

VBAを実行してみましょう。

配列の値が空となっている要素が出力されましたね。

要素が無い場合を判定する

続いて、配列の要素が無い場合も判定してみましょう。

以下コードを削除するか、コメントアウトして無効化します。

arrTemp = Range("A1:B10")

VBAを実行してみましょう。

要素が無いと判定され、エラー内容も出力されましたね!

VBAの説明

VBAについて説明をします。

配列に格納された値すべてを対象に処理します。
二次元配列であるため、LBound関数とUBound関数を次元別に設定し、処理をしています。

For i = LBound(arrTemp, 1) To UBound(arrTemp, 1)
For j = LBound(arrTemp, 2) To UBound(arrTemp, 2)

VBAの実装手順

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

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

さいごに

いかがでしょうか。

今回は、

・VBAで配列の空判定をする方法
・VBAで配列の要素が無い判定をする方法

についてまとめました。

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



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

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





タカヒロ

ドラッカーの名言「強みを生かす」の自分の「強み」をツールでサクッと診断してみました。

結果は意外でした…

ストレングスファインダー診断結果公開!NGな点もまとめ!




2 件のコメント

  • 二次元の配列についても説明がありますがコードは一次元のものがまた掲載されています。

    • 大変失礼いたしました。

      確認したところ、二次元配列のコードの箇所が一次元配列処理の内容となっておりましたので、
      コードを修正いたしました。

      よろしくお願いいたします。

  • コメントを残す

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