• ベストアンサー

クエリで日付型のIIF関数の使用

テーブル1にフィールド名→日付、データ型→日付/時刻型(主キーなし) を作成し、 クエリ1を作成し、フィールド1にテーブル1の日付フィールドをドラッグし、 フィールド2には「有無: IIf([日付]="","未",[日付])」 を入力しました。 「日付フィールドが空白なら有無フィールドは「未」、入力されているならその日付を表示する」 としたいです。 しかし画像のように 日付フィールドが空白→有無フィールドも空白 日付フィールドに日付が入っているなら→有無フィールドは#エラー になってしまいます。 何がだめなんでしょうか? よろしくお願い致します。

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

  • ベストアンサー
回答No.1

>何がだめなんでしょうか? 日付/時刻型のデータは文字列型ではないので""と比較する事は出来ません。 なので、データが入っているレコードでは「型が違うから比較出来ない」のでエラーになり「#error」が表示されます。 そして、データが入っていないレコードでは、型の違いによるエラーにはなりませんが「NULL値と""は等しくない」と判断され「日付、つまり、NULL」が表示されます。 「長さ0の文字列」と「NULL値」は「異なる値」だと言う事を忘れてはいけません。 つまり >日付フィールドが空白→有無フィールドも空白 >日付フィールドに日付が入っているなら→有無フィールドは#エラー になる訳です。 これは「意図した動作ではないが、仕様通りの動作」なので 有無: IIf([日付]="","未",[日付]) と言う式を書いた場合には、上記の動作は正常な動作です。 質問者さんが意図した通りに動作させるにはIsNull関数を用い 有無: IIf(IsNull([日付]),"未",[日付]) として下さい。

noname#150256
質問者

お礼

なるほど。 できました。 ご回答ありがとうございます。

その他の回答 (2)

noname#204879
noname#204879
回答No.3

》 しかし画像のように 何処にその「画像」があるのですか?

noname#150256
質問者

お礼

すいません。 うまく添付できませんでした。

noname#140971
noname#140971
回答No.2

クエリ1: 選択クエリー ID__日付_____________有無 1___2009/01/01__#エラー 2__________________________________ SELECT tab1.ID, tab1.日付, IIf([日付]="","未",[日付]) AS 有無, * FROM tab1; クエリ2: 選択クエリー ID__日付_____________有無 1___2009/01/01__2009/01/01 2_______________________未 SELECT tab1.ID, tab1.日付, IIf(Len([日付] & ""),[日付],"未") AS 有無, * FROM tab1; SELECT tab1.ID, tab1.日付, IIf([日付] Is Null,"未",[日付]) AS 有無, * FROM tab1; SELECT tab1.ID, tab1.日付, IIf(NZ([日付],"")="","未",[日付]) AS 有無, * FROM tab1; × [日付]="" ○ NZ([日付],"")=" ○ [日付] Is Nul ○ Len([日付] & "") と、言う事だと思います。

noname#150256
質問者

お礼

ご回答ありがとうございます。