PR

【Access】Null値を扱うのに便利なNz関数

Access
記事内に広告が含まれています。

Accessにて、Null値を扱うのに便利な「Nz関数」についてご紹介いたします。
Nz関数を使うと、Null値を他の値に置き換えることができます。
例えば、以下のような場合にNz関数を使うと便利です。

  1. Null値が混在するフィールドでクエリ検索する場合
  2. DSum関数・DMax関数・DLookUp関数などで条件に合致するデータが無い場合
  3. フィールド同士を計算する場合で、いずれかのフィールドがNullの場合
  4. フィールド同士を比較する場合で、いずれかのフィールドがNullの場合
Accessを書籍でコツコツ学習したい方はこちら

構文

Nz(, 値がNullの場合の代替値)
  • 第1引数の値Null以外の場合は、値をそのまま戻り値として返します。
  • 第1引数の値Nullの場合は、第2引数に指定した代替値を返します。
    第2引数を省略した場合は、空文字を返します。

使用例

Null値が混在するフィールドでクエリ検索する場合

例えば、以下の[テーブル1]のようなデータがあったとします。
このときに、「営業所が東京以外」のデータをクエリで検索したければ、[クエリ1]のように「営業所<>”東京”」で検索すれば良さそうに思えます。
しかし、実際にやってみると、以下の実行結果のように営業所がNullのレコード(サンプル 四郎)が抽出されません
そこで、[クエリ1(改良)]のように、「Nz([営業所])<>”東京”」とすれば、営業所がNullのレコードも無事抽出されます。

「営業所<>”東京” OR 営業所 Is Null」とするのと同じ結果になりますが、Nz関数を使ったほうが手っ取り早いかと思います。

営業所がNullの「サンプル四郎」が抽出されない

Nz関数を使って改良した例

営業所がNullの「サンプル四郎」も抽出された

DSum関数などで条件に合致するデータが無い場合

例えば、先ほどの[テーブル1]で、「営業所が名古屋の売上金額の合計をDSum関数で求めたい」とします。
そんなレコードはありませんので、結果として「0」が返ってきてほしいところですが、残念ながら「Null」が返ってきてしまいます。
これでは何かと都合が悪いので、DSum関数をNz関数でくくると、「0」を返すことができます。

DSum関数を例に説明しましたが、DMax関数やDLookUp関数などでも同じことが言えます。
なお、DCount関数は、なぜか結果として「0」が返ってきますので、問題ありません。

MsgBox DSum("売上金額", "テーブル1", "営業所='名古屋'")

Nullが返されるのでエラーになってしまう

Nz関数を使って改良した例

MsgBox Nz(DSum("売上金額", "テーブル1", "営業所='名古屋'"), 0)

フィールド同士を計算する場合で、いずれかのフィールドがNullの場合

例えば、以下の[テーブル1]で、「売上金額-原価」として「利益」を計算したいとします。
この場合、以下の[クエリ1]のようにやれば良さそうに見えますが、いずれかのフィールドがNullだと、結果が返ってきません。
そこで、[クエリ1(改良)]のように、Nz関数を使ってNullをゼロとして扱うと、無事に結果が返ってきます。

実務では、Nullをゼロに置き換えて計算して良いかどうかは、ケースバイケースです。
「Nullは不正データだから計算しないでほしい!」という場合は、あえてNullのままにするのも、ひとつの手です。(そんな場合は、どこかでエラーチェックをして、不正データが入ってこないようにすべきですが…)

Nullが混在すると計算できない(テスト次郎、テスト六郎)

Nz関数を使って改良した例

Nullをゼロに置き換えて「利益」を計算した

フィールド同士を比較する場合で、いずれかのフィールドがNullの場合

最後に、フィールド同士を比較する場合です。
例えば、以下の[テーブル1]で、[営業所]と[出身地]を比較したいとします。

例1:「営業所=出身地」のレコードを検索したい場合
➡[クエリ1]のようにすると、営業所と出身地の両方がNullの「テスト 四郎」が抽出されません

例2:「営業所<>出身地」のレコードを検索したい場合
➡[クエリ2]のようにすると、営業所と出身地の片方がNullの「テスト 六郎」「テスト 七郎」が抽出されません。

そこで、[クエリ1(改良)] [クエリ2(改良)]のように、[営業所]と[出身地]それぞれにNz関数を使うと、改良前のクエリで抽出されなかったレコードも、無事に抽出されます。

営業所と出身地の両方がNullの「テスト 四郎」が抽出されない

営業所と出身地の片方がNullの「テスト 六郎」「テスト 七郎」が抽出されない

Nz関数を使って改良した例

営業所と出身地の両方がNullの「テスト 四郎」も抽出された

営業所と出身地の片方がNullの「テスト 六郎」「テスト 七郎」も抽出された

以上、Nz関数の紹介でした。
Accessで、Nullの扱いに困ったときに使うと便利です。

Accessを書籍でコツコツ学習したい方はこちら

コメント

タイトルとURLをコピーしました