• ベストアンサー

Accessで値がnullの場合は計算せずにnullをかえす方法

Accessについて、教えてください。 クエリで抽出しているときに、フィールド1とフィールド2の数値を掛け算した値をフィールド3に表示したいと思っています。(小数点1位まで表示) フィールド1とフィールド2は値がnullの場合もありますが、この場合は「0」として扱うのではなく、そのまま計算結果もnullにしたいと思っています。 最初は単純に フィールド3: ROUNDMS2(ROUNDMS([フィールド1],1)*ROUNDMS([フィールド2],1),1) とクエリに表記したのですが、この場合「フィールド1」や「フィールド2」がnullの場合は#ERRORが表示されました。 次に、IFでフィールド1やフィールド2がnullの場合は計算せずにnullをかえしてもらおうと下記のような文をつくりました。 フィールド3: IIf([フィールド1]=Null,Null,IIf([フィールド2]=Null,Null,ROUNDMS2(ROUNDMS([フィールド1],1)*ROUNDMS([フィールド2],1),1))) これでもやっぱり#ERRORが表示されます。 いろいろと検索したのですが、nullを0として扱う例は多数見つけられましたがnullのまま扱う例が見つけられませんでした。 勘違いしているところがあるかもしれませんが、アドバイスよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.3

また#1です。 Nullの判定はIsNull関数でないとできないかも。

tropical-flower
質問者

お礼

アドバイスありがとうございます。 NO.1~NO.3へのまとめてのお礼で申し訳ないです。 =nullではなく、IsNullで一度やってみます。 No.2ですが、Nullというのはまったくデータがない状態なので空文字も同じことだと認識していたんですが、ちょっと違うんでしょうか?? データが入っているものとないものがあり、はいっている場合は計算してない場合は空欄で表示したかっただけなんです。

その他の回答 (5)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.6

>値がnullの場合もありますが、この場合は「0」として扱うのではなく、そのまま計算結果もnullにしたい 演算子を使用して式の中の1つのフィールドの値がNullである場合は式全体の結果がNull値になりますのでNullしか返りません。 フィールド3:ROUND(ROUND([フィールド1],1)*ROUND([フィールド2],1),1) で普通に演算できます。NullのフィールドがあるレコードはNullのまま返ります。 >フィールド3: ROUNDMS2(ROUNDMS・・・この場合「フィールド1」や「フィールド2」がnullの場合は#ERRORが表示 Accessの関数やスカラー関数にもROUNDMS2やROUNDMSという関数はありません。ROUNDMS2などをユーザー定義関数として作成して使用しているのであればPublic Functionに記述した定義に誤りがありエラー表示しているのではないでしょうか。Nullがあった場合の処理の記述がないとか。

tropical-flower
質問者

お礼

アドバイスありがとうございます。 関数がおかしかったのでしょうか。 前任者から引き継いだものを修正しているので実はよくわからず、「ROUND」などと同じ種類の関数だと思っていました。 ありがとうございました。

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.5

Nullと空文字は見た目では判断できませんが プログラム上では扱いが違います。 下記でどうでしょう。 ちなみに四捨五入は計算結果に行うだけでいいのでは。 --- フィールド3: IIf(Nz([フィールド1],"")="" or Nz([フィールド2],"")="","",round([フィールド1]*[フィールド2],1))

tropical-flower
質問者

お礼

再度のアドバイス、ありがとうございます。 プログラム上では扱いが違うんですか!!!知りませんでした!! 同じものだと思ってました!! 先ほど、=nullではなく、IsNullにしてみたところ、できました!!! ありがとうございました。

  • walsh
  • ベストアンサー率41% (77/185)
回答No.4

こんにちは。 同じ様にクエリを作ってみました。 フィールド3はちゃんとNull値になりました。 ROUNDMS関数がよくわからなかったのですが(未定義関数でエラーになった)、普通のRound関数であれば、まったく問題なかったです。

tropical-flower
質問者

お礼

ありがとうございます。 この式で#Error表示されなかったということでしょうか? 私のAccessでは#Errorになるのですが、何か別の問題なんでしょうか・・・

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.2

#1です。 ところでフィールド1、フィールド2はNullですか? 空文字("")ではないですか。

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

IIFでの判定条件を [フィールド1]=Null OR [フィールド2]=Null とすればいいのでは。

関連するQ&A