IsEmpty関数について
VBAのIsEmpty関数は、指定した値や変数が初期化されているか、そうでないかを確認するための関数です。
以前に紹介したIsNumeric関数やIsDate関数といった数値や日付を判定するものと比較すると一般的な作業では使用頻度は少ないと考えますが、VBAにはこういった関数があるといった感覚で知っておいてもらえたら幸いです。
なお、判定結果はほかのIs〇〇関数と同じく、真偽(Boolean)となるため、TrueまたはFalseで返します。
IsEmpty関数では、変数が初期化されていないとき、または変数にEmptyが設定されているときはTrueとなり、それ以外の場合はFalseの結果がかえってきます。
また、判定する変数が複数であった場合は、つねにFalseの判定結果が返ってきます。
すこし分かりにくいけど、初期化されていないときがTrueになるよ。
オンラインスクールで現役エンジニアのサポートがあるテックアカデミーがおすすめ。
スキマ時間に学べて仕事も保証。必ず副業、始められます。まずは無料でプログラミング体験
IsEmpty関数がつかえる場面
IsEmpty関数の利用が想定される場面では、以下のようなものがあります。
変数の初期化の確認
指定された変数が初期化されているかの判定を実行します。
セルの値が空であるかどうかの確認
指定されたセルが空白であるかの判定を実行します。
配列が初期化されているかどうかの確認
指定された配列が初期化されているかの判定を実行します。
IsEmpty関数の使いかた
IsEmpty関数の構文と戻り値について紹介します。
IsEmpty関数の構文
構文
IsEmpty(値または変数)
※値または変数(expression)の指定は必須のため、省略した場合はエラーが発生します。
IsEmpty関数の判定結果について
IsEmpty関数の結果は真偽値(Boolean)となるため、TrueまたはFalseが返ります。
指定した値や変数が初期化されていない、またはEmptyが設定されている場合はTrue、それ以外と判定された場合や変数が複数の場合はFalseが返ってきます。
IsEmpty関数をつかったサンプルマクロ
ここではIsEmpty関数をつかったマクロを紹介します。
IsEmpty関数で変数が初期化されているかを確認する
以下のサンプルマクロは変数が初期化されているかを確認します。
サンプルマクロ1
Option Explicit Sub IsEmpty_macro1() '変数の初期化の確認 Dim Var As Variant 'バリアント型の初期値はEmpty Debug.Print IsEmpty(Var) '実行結果はTrue End Sub
シンプルにIsEmpty関数をつかってバリアント型の変数である「Var」が初期化されているかを確認します。
サンプルマクロ2
Option Explicit Sub IsEmpty_macro2() '変数の初期化の確認2 Dim Var1 As Integer Dim Var2 As Double Dim Var3 As String Dim Var4 As Boolean Dim Var5 As Date Dim Var6 As Object Dim Var7 As Variant Dim Var8 'データ型の指定をしないとVariant型となる Dim Var9() Dim Var10(1 To 3) Dim Var11 As Variant: Set Var11 = Nothing 'くり返し処理用にコレクションを宣言する Dim test_collection As collection Set test_collection = New collection test_collection.Add Item:=Var1 '数値 test_collection.Add Item:=Var2 '小数値 test_collection.Add Item:=Var3 '文字列値 test_collection.Add Item:=Var4 '真偽値 test_collection.Add Item:=Var5 '日付値 test_collection.Add Item:=Var6 'オブジェクト変数 test_collection.Add Item:=Var7 'バリアント変数(データ型明記) test_collection.Add Item:=Var8 'バリアント変数(データ型なし) test_collection.Add Item:=Var9 'バリアント配列(動的) test_collection.Add Item:=Var10 'バリアント配列(静的) test_collection.Add Item:=Var11 'バリアント変数(Nothing) 'くり返し処理用の変数を宣言する Dim X As Variant 'For EachステートメントでIsEmpty関数の結果を出力する For Each X In test_collection Debug.Print IsEmpty(X) Next X End Sub
各種データ型で宣言した変数を、IsEmpty関数をつかって初期化されているかを確認します。
このマクロでは、複数の変数をまとめて処理するためにコレクションオブジェクトを宣言し、変数をコレクションに追加する処理をしています。
デバッグプリントなので、結果はイミディエイトウィンドウにTrueかFalseを表示します。表示された結果は以下のとおりです。
変数をまとめるために利用しているコレクションや、くり返しに利用しているForEachステートメントについては、以前の記事で紹介しており、以下のリンクから該当の記事を読むことができます。詳しい内容につきましてはそちらを参考にしてください。
実行結果(イミディエイトウィンドウ)
False
False
False
False
False
False
True
True
False
False
False
これだけだとわかりにくいので、結果をまとめたものが以下です。
No | 判定する変数名 | 説明 | 判定結果 (True or False) |
---|---|---|---|
1 | Var1 | Dim Var1 As Integerで宣言した変数 | False |
2 | Var2 | Dim Var2 As Doubleで宣言した変数 | False |
3 | Var3 | Dim Var3 As Stringで宣言した変数 | False |
4 | Var4 | Dim Var4 As Booleanで宣言した変数 | False |
5 | Var5 | Dim Var5 As Dateで宣言した変数 | False |
6 | Var6 | Dim Var6 As Objectで宣言した変数 | False |
7 | Var7 | Dim Var7 As Variantで宣言した変数 | True |
8 | Var8 | Dim Var8で宣言した変数 | True |
9 | Var9 | Dim Var9()で宣言した変数 | False |
10 | Var10 | Dim Var10(1 To 3)で宣言した変数 | False |
11 | Var11 | Dim Var11 As Variantで宣言した変数 Set Var11 = Nothing ※Nothingが代入されている |
False |
バリアント型の変数の初期値はEmptyだね。
サンプルマクロ3
Sub IsEmpty_macro3() '変数の初期化の確認3(変数が複数である場合) Dim Var1 As Variant, Var2 As Variant, Var3 As Variant 'バリアント型の初期値はEmpty Debug.Print IsEmpty(Var1 + Var2 + Var3) '実行結果はFalse(変数が複数) Dim Var4 As Variant, Var5 As Variant, Var6 As Variant 'バリアント型の初期値はEmpty Var4 = 5 Var5 = 10 Var6 = 15 Debug.Print IsEmpty(Var6 - Var4 - Var5) '実行結果はFalse(変数が複数) Dim Var7 As Variant, Var8 As Variant, Var9 As Variant 'バリアント型の初期値はEmpty Var7 = "A" Var8 = "B" Var9 = "C" Debug.Print IsEmpty(Var7 & Var8 & Var9) '実行結果はFalse(変数が複数) End Sub
IsEmpty関数は指定する変数が複数だったらFalseになるね。
こちらのマクロでは、IsEmpty関数で変数が複数である場合のパターンを試行しています。実行結果はサンプルマクロのコメントにも記載しているとおり、すべてFalseの結果がかえってきます。
IsEmpty関数でセルの値が空であるかどうかを確認する
サンプルマクロ
Sub IsEmpty_macro4() 'セルの値が空であるかどうかの確認 'セルの値を代入する変数を宣言する Dim CellVal As Variant 'アクティブシートのA1セルの値を変数に代入する CellVal = ActiveSheet.Range("A1").Value 'セルの値が空白(Empty)であるかを判定し、処理を分岐する If IsEmpty(CellVal) Then Debug.Print "セルは空白です。" Else Debug.Print "セルは空白ではありません。" End If End Sub
こちらは、アクティブになっているシートのA1セルの値が空白であるかをIsEmpty関数で確認しています。
くり返しを文とあわせて使えば、複数のセルに対して未入力かどうかをチェックするマクロなどに利用できます。
「セルは空白です。」の実行結果となる状態
アクティブシートのA1セルが空白の場合
「セルは空白ではありません。」の実行結果となる状態
アクティブシートのA1セルが空白ではない場合
実行結果はアクティブシートのA1セルが空白かどうかで変わるよ。
似たような機能で考えられるものとして、ユーザーフォームのコントロール(テキストボックスなど)が未入力かどうかをチェックするマクロを思い浮かべますが、IsEmpty関数を使うとFalseの結果となるため、判定式ではTextBox1.Value = “”などで対応するといいでしょう。
IsEmpty関数で配列が初期化されているかどうかを確認する
サンプルマクロ
Option Explicit Sub IsEmpty_macro5() '配列が初期化されているかどうかの確認 'バリアント型の配列を宣言する Dim UserArray As Variant Dim i As Integer '2回くり返す For i = 1 To 2 'セルの値が空白(Empty)であるかを判定し、処理を分岐する If IsEmpty(UserArray) Then Debug.Print "配列は初期化されていません。" ReDim UserArray(1 To 3) '配列の再定義(要素数3つ) Else Debug.Print "配列は初期化されています。" End If Next i End Sub
このマクロでは、バリアント型の変数である「UserArray」をIsEmpty関数で判定しています。また、その判定処理をForNextステートメントで2回くり返します。
こちらのマクロが実行されると、1度目のIsEmpty関数での結果はTrueが返ってきます。そして、If文の分岐により変数「UserArray」は、ReDimをつかって配列を再定義する処理に進みます。
これにより、変数「UserArray」は初期化されたことになり、2度目のIsEmpty関数の結果がFalseに変化します。
サンプルマクロで利用している配列については、別の記事でも取り上げています。
配列の宣言や再定義などについて詳しく知りたい人は、以下のリンクより記事をご覧になってください。
↓配列に関する記事はコチラ↓
実行結果は以下のようにイミディエイトウィンドウに表示されます。
実行結果(イミディエイトウィンドウ)
配列は初期化されていません。
配列は初期化されています。
IsEmpty関数の結果が、1度目と2度目で変化したね。
IsEmpty関数のような値や変数を判定する関数はほかにもある
VBAには数値以外にも値や変数を判定する関数があります。
値や変数が配列であるかを判定し、TrueまたはFalseの真偽値(Boolean)を返す
値や変数が数値であるかを判定し、TrueまたはFalseの真偽値(Boolean)を返す
値や変数が日付であるかを判定し、TrueまたはFalseの真偽値(Boolean)を返す
IsError関数
値や変数がエラーであるかを判定し、TrueまたはFalseの真偽値(Boolean)を返す
値や変数にNullが含まれるかを判定し、TrueまたはFalseの真偽値(Boolean)を返す
値や変数がオブジェクトかどうかを判定し、TrueまたはFalseの真偽値(Boolean)を返す
コダマのもりブログはにほんブログ村に登録しています。
ブログの記事が役に立ったと感じて頂けたら、フォローお願いいたします。
コメント