Nz 関数を使うと、特定のバリアント型 (Variant) (バリアント型 (Variant) : Deftype ステートメントを記述していない場合に、型宣言文字がない変数に割り当てられる既定のデータ型。バリアント型の変数には、数値、文字列、日付/時刻、Null 値、または Empty 値を格納することができます。) の値が Null (Null : データが存在しないこと、またはデータが不定であることを示すために、フィールドに入力したり式またはクエリで使用する値。Visual Basic の Null キーワードは Null 値を表します。主キー フィールドなど、Null 値を格納できないフィールドもあります。) 値になるときに、Null 値の代わりに、数値の 0、長さ 0 の文字列 (長さ 0 の文字列 : 文字を 1 つも含まない文字列。長さ 0 の文字列を使うと、意図的にフィールドに値がないようにしていることを示すことができます。長さ 0 の文字列を入力するには、スペースを含めずに二重引用符を二度続けて (" ") 入力します。) (" ")、または指定したその他の戻り値が返されるようにすることができます。つまり、この関数を使って Null 値を別の値に変換することにより、式全体の結果が Null 値になるのを防ぐことができます。
構文
Nz(variant [, valueifnull ] )
Nz 関数には、次の引数があります。
引数 variant で指定した変数が Null 値になった場合、Nz 関数は、その値が数値か文字列かをコンテキストによって判断し、数値の 0 か、または長さ 0 の文字列を返します (クエリの式で使用すると、常に長さ 0 の文字列が返されます)。 省略可能な引数 valueifnull を指定した場合は、variant で指定した変数が Null 値になると、valueifnull で指定した値が返されます。 クエリの式で使用する場合は、Nz 関数に必ず引数 valueifnull を指定する必要があります。
引数 variant で指定した変数が Null 値でない場合は、その変数の値がそのまま返されます。
解説
Nz 関数は、式の中の変数に Null 値が代入される可能性がある場合に便利です。Nz 関数を使用して、数値の 0、長さ 0 の文字列、またはその他の戻り値を取得することにより、式の中の変数に Null 値が代入された場合でも、その式が Null 値以外の値として評価されるようにすることができます。
たとえば、2 + varX という式は、バリアント型の変数 varX が Null の場合、常に Null 値を返します。しかし、2 + Nz(varX) とすると、返される値は 2 になります。
また、Nz 関数は、IIf 関数の代わりに使用できる場合もあります。次に示すコードは、目的の結果を得るために、IIf 関数を含む式を 2 つ使わなければならない場合の例です。1 つ目の式によって、変数の値がチェックされ、Null 値の場合は 0 に変換されるようになっています。
varTemp = IIf(IsNull(varFreight), 0, varFreight)
varResult = IIf(varTemp > 50, "High", "Low")
この 1 つ目の式の役割を Nz 関数を使って置き換えれば、式を 2 つに分けることなく、次のように 1 つの式で目的の結果を得ることができます。
varResult = IIf(Nz(varFreight) > 50, "High", "Low")
省略可能な引数 valueifnull に値を指定した場合、variant が Null 値のときにはその指定値が返されます。この引数を指定することによって IIf 関数を使わずに済む場合もあります。次の式は、変数 varFreight が Null 値のときに "配送料無料" という文字列を返すという処理を、IIf 関数を使って実装する場合の例です。
varResult = IIf(IsNull(varFreight), _
"配送料無料", varFreight)
Nz 関数の引数 valueifnull を使えば、varFreight が Null 値のときに文字列を返すという処理を次のような式で実装できます。
varResult = Nz(varFreight, "配送料無料")
使用例
メモ 次の例は、Visual Basic for Applications (VBA) モジュールでのこの関数の使用方法を示しています。VBA の使用方法の詳細については、[検索] の横にある一覧の [開発者用リファレンス] をクリックし、検索ボックスに検索する語句を入力してください。
次の例では、フォームのコントロールを評価し、そのコントロール値を基に 2 つの文字列のいずれかを返します。コントロールの値が Null 値の場合、Nz 関数によって、Null 値を長さ 0 の文字列に変換します。
Public Sub CheckValue()
Dim frm As Form
Dim ctl As Control
Dim varResult As Variant
' Orders フォームを示す Form オブジェクト変数を返します。
Set frm = Forms!Orders
' ShipRegion を示す Control オブジェクト変数を返します。
Set ctl = frm!ShipRegion
' コントロールの値を基に結果を選択します。
varResult = IIf(Nz(ctl.Value) = vbNullString, _
"No value.", "Value is " & ctl.Value & ".")
' 結果を表示します。
MsgBox varResult, vbExclamation
End Sub