[ Access-VBA ] Nz関数で NULL をゼロ ( 0 ) に変換する

Pocket

Access において VBA で足し算を行う場合に、一方が NULL 値の場合、結果は NULL となってしまいます。残念ながら NULL を ゼロとして扱ってくれるわけではありません。

スポンサーリンク

NULL 値をそのまま計算しても、ほとんどの場合期待した動作とならないと思いますので、NULL を 0 に変換してから加算を行う必要があります。

Nz 関数で NULL を 0 に変換して計算するサンプル

'
' NULLの場合は0として加算する
'
Dim result, val1, val2    

(何か色んな処理)

' 加算する(一方が Null だと結果は Null となる)
result = val1 + val2

' 加算する(Nullの場合はゼロに変換する)
result = Nz(val1, 0) + Nz(val2, 0)

ゼロとして扱う場合は、Nz 関数の第2引数は省略することができますが、明示的にしておいたほうがよいと思います。なお、Nz はおそらく ( Null to Zero ) の省略だと思います。

SQL で Nz 関数を使う

例えば、SQL の Sum 関数なども、合計を求める項目が Null であった場合などは Null として返ってくることがありますので、Null を許容している列を Sum 関数で使用する場合などは Nz 関数を使用しなければ、期待通りの動作とならないことがあります。このような場合も、Nz 関数を用いて Null を 0 に変換してあげる必要があります。下記はサンプルの SQL です。

/*
 * 対策1
 */
  select 
      sum(Nz(光熱費, 0) + Nz(雑費, 0) + Nz(食費, 0)) as 浪費が多いもの 
  from 
      出費テーブル

/*
 * 対策2
 */
  select 
      Nz(sum(光熱費), 0) + Nz(sum(雑費), 0) + Nz(sum(食費), 0) as 浪費が多いもの 
  from 
      出費テーブル

Excel では Nz 関数は使えない

これまた残念なことに Nz 関数は Access だけでしか使用できません。Excel では使用できないのです。 Excel では IsNull 関数で Null 判定を行った上で IIf 関数などを使用して同じような処理をする必要があります。

諸般の事情により、下記は動作未検証ですが、サンプルコードを載せておきます。すいません。

'
' NULLの場合は0として加算する
'
Dim result, val1, val2    

(何か色んな処理)

' 加算する
result = IIf(IsNull(val1), 0, val1) + IIf(IsNull(val2), 0, val2)

エクセルから発行した Nz 関数を含む SQL でエラー

エクセルから Nz 関数を含む SQL の実行で NG となることがあるようです。SQL 自体は Access で処理されるため、発行元は本来関係ないはずですが、エラーとなることがありました。以下のリンクから詳細は確認ください。

参考

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *