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
“要素が全くありません。”というメッセージと、エラー内容を出力します。
<code>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で配列の要素が無い判定をする方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
二次元の配列についても説明がありますがコードは一次元のものがまた掲載されています。
大変失礼いたしました。
確認したところ、二次元配列のコードの箇所が一次元配列処理の内容となっておりましたので、
コードを修正いたしました。
よろしくお願いいたします。