ExcelVBAでIsNullOrEmptyを再現!


はじめに

Excel VABでの値の空判定は結構複雑で、IsEmptyやIsNullなどケースによって使い分ける必要があります。

ここでは、C#等でよく利用するIsNullOrEmpty関数を再現しました。

 

サンプルコード

Function IsNullOrEmpty(ByVal value)
    If IsEmpty(value) = True Then
        IsNullOrEmpty = True
    Else
        If IsNull(value) = True Then
            IsNullOrEmpty = True
        Else
            If value = "" Then
                IsNullOrEmpty = True
            Else
                IsNullOrEmpty = False
            End If
        End IF
    End If
End Function

 

使い方

Dim val1 as String
Dim val2 as String

val1 = "Sample"
val2 = ""

Debug.Print IsNullOrEmpty(val1)
Debug.Print IsNullOrEmpty(val2)
False
True

セルの値を取得した場合に、セルには何も記入していないのに、IsEmptyだけだと、値があると判断されたりするので、こんサンプルであれば、ほぼ全てに対応できちゃうかと思います。

 

補足

IsEmpty

IsEmpty(expression)は、引数expressionに、Empty値かどうかを判定するバリアント型の変数を指定します。

引数expressionで指定したバリアント型変数がEmpty値である場合Trueを返します。Empty値でない場合はFalseを返します。

Sub Sample()
    Dim a As Variant
    Debug.Print IsEmpty(a)       'Trueを返します
    a = 123
    Debug.Print IsEmpty(a)       'Falseを返します
    a = "sample"
    Debug.Print IsEmpty(a)       'Falseを返します
End Sub

 

IsNull

IsNull(expression)は、引数expresionに、数式または文字列式を含むバリアント型の式を指定します。

Null値とはバリアント型の変数に格納できる特殊な値であり、変数内に有効な値が入っていないことを意味します。

Null値は、変数が初期化されていない状態を表すEmpty値や、長さ0の文字列を表すNull文字列とは異なります。

Sub Sample()
    Dim a As Variant
    Debug.Print IsNull(a)    'Falseを表示します
    a = ""
    Debug.Print IsNull(a)    'Falseを表示します
    a = Null
    Debug.Print IsNull(a)    'Trueを表示します
End Sub

 

長さ0の文字列("")

文字を1つも含まない文字列 ("") です。

「長さ0の文字列」は、Len関数やLenB関数の引数に指定すると0を返します。

Sub Sample()
    Dim a As String
    a = ""
    Debug.Print Len(a)     '0 と表示されます
End Sub

 

最後に

VBAでは結構判定処理が面倒なので、一度関数化して呼び出していった方が効率が良い!

是非試してみてください