プロが教えるわが家の防犯対策術!

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のまま扱う例が見つけられませんでした。

勘違いしているところがあるかもしれませんが、アドバイスよろしくお願いいたします。

A 回答 (6件)

また#1です。


Nullの判定はIsNull関数でないとできないかも。
    • good
    • 1
この回答へのお礼

アドバイスありがとうございます。
NO.1~NO.3へのまとめてのお礼で申し訳ないです。

=nullではなく、IsNullで一度やってみます。
No.2ですが、Nullというのはまったくデータがない状態なので空文字も同じことだと認識していたんですが、ちょっと違うんでしょうか??
データが入っているものとないものがあり、はいっている場合は計算してない場合は空欄で表示したかっただけなんです。

お礼日時:2006/03/16 10:17

>値が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があった場合の処理の記述がないとか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/16 20:48

Nullと空文字は見た目では判断できませんが


プログラム上では扱いが違います。
下記でどうでしょう。
ちなみに四捨五入は計算結果に行うだけでいいのでは。
---
フィールド3: IIf(Nz([フィールド1],"")="" or Nz([フィールド2],"")="","",round([フィールド1]*[フィールド2],1))
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/03/16 20:48

こんにちは。



同じ様にクエリを作ってみました。
フィールド3はちゃんとNull値になりました。

ROUNDMS関数がよくわからなかったのですが(未定義関数でエラーになった)、普通のRound関数であれば、まったく問題なかったです。
    • good
    • 1
この回答へのお礼

ありがとうございます。
この式で#Error表示されなかったということでしょうか?

私のAccessでは#Errorになるのですが、何か別の問題なんでしょうか・・・

お礼日時:2006/03/16 10:18

#1です。


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

IIFでの判定条件を


[フィールド1]=Null OR [フィールド2]=Null
とすればいいのでは。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A