HOME > 即効テクニック > AccessVBA > コントロール > 変数のNull値を別の値にして返す(Nz関数)

即効テクニック

コントロール

変数のNull値を別の値にして返す(Nz関数)

(Access 2000/2002)
バリアント型(Variant)の変数がNull値である場合、0、長さ0の文字列("")、または別の特定の値を返すようにするために、Nz関数を使用する方法があります。
たとえば、Nz関数を使用して、Null値を別の値に変換し、式がNull値に評価されないようにします。
構文は次のとおりです。

<構文> Nz(variant[, valueifnull])

引数     内容 
variant    データ型がバリアント型の変数を指定します。 
valueifnull  省略可能(クエリで使用される場合を除きます)。引数Variantの値が
       Nullのときに、値を返す変数です。この引数を指定すると、0または長さ0の文字列以外の値が返されます。

引数variantの値がNull値の場合、Nz関数は、コンテキストによって値が数値か文字列かを判断し、数値の0または長さ0の文字列(クエリの式で使用すると、常に長さ0の文字列を返します)を返します。
引数variantの値がNull値でない場合は、引数variantの値が返されます。
省略可能な引数valueifnullを指定した場合で、variantがNull値の場合は、この引数で指定した値が返されます。クエリの式で使用する場合、Nz関数は引数valueifnullを指定する必要があります。引数valueIfNullを使わずにクエリの式でNz関数を使用すると、フィールドがNull値を含む長さ0の文字列になります。

Nz関数は、Null値を含む式で使用すると便利です。式にNull値が含まれている場合でも、Null値以外の値に式を評価するには、Nz関数を使用して、0、長さ0の文字列、または他の戻り値を取得します。
たとえば、次のサンプルプロシージャ「Sample1」のようにバリアント型の変数varXが
Nullの場合、エラーが発生します。

Sub Sample1()
    Dim varX As Variant
    
    varX = Null
    
    MsgBox 2 + varX
End Sub

 しかし、次のサンプルプロシージャ「Sample2」のようにNz関数を使用すると、メッセージボックスには「2」が表示されます。
Sub Sample2()
    Dim varX As Variant
    
    varX = Null
    
    MsgBox 2 + Nz(varX)
End Sub

Nz関数を、IIf関数の代わりに使用できる場合があります。たとえば、次のコードでは目的の結果を得るためにIIf関数を含む2つの式が必要です。
(1)の式は、変数の値をチェックし、Null値の場合は0に変換します。

Sub Sample1()
    Dim myData As Variant
    Dim myAns  As Variant
    
    myData = Null
    
    myAns = IIf(IsNull(myData), 0, myData)     ←(1)
    MsgBox IIf(myAns > 50, "High", "Low")      ←(2)
End Sub

次の例では、Nz関数は最初の式を代替します。これによって、目的の結果を2ステップでなく1ステップで得ることができます。

Sub Sample2()
    Dim myData As Variant
    
    myData = Null
    
    MsgBox IIf(Nz(myData) > 50, "High", "Low")    ←(1)
End Sub

省略可能な引数valueifnullに値を指定すると、variantがNull値の場合、その値が返されます。
Nz関数の引数valueifnullを指定して、IIf関数の代わりに使用できる場合があります。たとえば、次の例では、IIf関数によって変数myDataの値がNull値の場合、"Nullです"とメッセージボックスに表示されます。

Sub Sample1()
    Dim myData As Variant
    
    myData = Null
    
    MsgBox IIf(IsNull(myData), "Nullです", myData)
End Sub
 
次の例では、変数myDataがNull値の場合は、Nz関数の引数valueifnullに指定した"Nullです"とメッセージボックスに表示されます。

Sub Sample2()
    Dim myData As Variant
    
    myData = Null
    
    MsgBox Nz(myData, "Nullです")
End Sub