VBA IsEmpty 関数:Variant が初期化されているか判定する

はじめに

Excel VBA マクロの IsEmpty 関数から Variant が初期化されているか判定する方法を紹介します。

IsEmpty 関数は、Variant 型の変数が初期化されているかどうかを判定します。

Empty なら True を返します。

エラーなどが原因で変数を初期化できていないときの判定に使用します。

配列が空か判定するには「IsArray 関数」をご覧ください。
  • 目次
    • IsEmpty 関数の引数と戻り値
    • 解説
    • 使用例

IsEmpty 関数の引数と戻り値

IsEmpty()
が Empty のときは True を返します。それ以外のときは False を返します。

引数「値」判定したい値を指定します。
戻り値の型ブール型 (Boolean)

解説

Variant 型の初期値は Empty です。初期化されていないことを表しています。

引数「値」が Empty なら True を返します。それ以外の値なら False を返します。

引数「値」が Nothing なら False を返します。クラスなどの参照型の初期値が Nothing です。

引数「値」が空の配列なら False を返します。

何も入力されていないセルの初期値や、空文字 "" を代入したセルの値は Empty です。

エラーが発生したときの関数の戻り値として Empty を返すと、関数が正常に行われたかどうかを判定できます。

Empty の比較

Empty0""False を比較すると True を返します。

使用例

IsEmpty 関数の使用例を紹介します。

Variant が初期化されているか判定する

Variant 型の変数が初期化されているか判定します。

Dim v As Variant
Dim b As Boolean

b = IsEmpty(v) ' Variant 型の初期値は Empty
Debug.Print(b) ' True

v = ""
b = IsEmpty(v)
Debug.Print(b) ' False

v = Empty
b = IsEmpty(v)
Debug.Print(b) ' True

Set v = Nothing
b = IsEmpty(v)
Debug.Print(b) ' False

Dim a() As Variant 
b = IsEmpty(a)
Debug.Print(b) ' False

Dim i As Integer 
b = IsEmpty(i)
Debug.Print(b) ' False

Dim s As String
b = IsEmpty(s)
Debug.Print(b) ' False

Empty と比較する

Empty は数値や文字列などの初期値として比較できます。

Dim v As Variant
Dim b As Boolean

b = IsEmpty(v) ' Variant 型の初期値は Empty
Debug.Print(b) ' True

b = (v = 0)
Debug.Print(b) ' True

b = (v = 1)
Debug.Print(b) ' False

b = (v = "")
Debug.Print(b) ' True

b = (v = "A")
Debug.Print(b) ' False

b = (v = False)
Debug.Print(b) ' True

b = (v = True)
Debug.Print(b) ' False

If v = Empty Then ' 間違った Empty の判定の仕方、= で比較すると 0 でも "" でも True になる
    Debug.Print("Empty") ' Empty
End If

関数が正常に行われたか判定する

関数の戻り値に Empty を返すと、正常に処理が行われたかを判定できます。

Sub 実行()
    Dim v As Variant
    v = 関数(0) ' 不正

    If IsEmpty(v) Then
        Debug.Print("不正")
    Else
        Debug.Print("正常")
    End If

    v = 関数(1) ' 正常

    If IsEmpty(v) Then
        Debug.Print("不正")
    Else
        Debug.Print("正常")
    End If
End Sub

Function 関数(ByVal i As Integer) As Variant
    If i = 0 Then
        関数 = Empty  ' 代入しなくても初期値は Empty
        Exit Function ' 不正な引数のため処理を中止
    End If

    関数 = True ' 正常な処理
End Function