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 で処理されるため、発行元は本来関係ないはずですが、エラーとなることがありました。以下のリンクから詳細は確認ください。