- ベストアンサー
クエリで日付型のIIF関数の使用
テーブル1にフィールド名→日付、データ型→日付/時刻型(主キーなし) を作成し、 クエリ1を作成し、フィールド1にテーブル1の日付フィールドをドラッグし、 フィールド2には「有無: IIf([日付]="","未",[日付])」 を入力しました。 「日付フィールドが空白なら有無フィールドは「未」、入力されているならその日付を表示する」 としたいです。 しかし画像のように 日付フィールドが空白→有無フィールドも空白 日付フィールドに日付が入っているなら→有無フィールドは#エラー になってしまいます。 何がだめなんでしょうか? よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>何がだめなんでしょうか? 日付/時刻型のデータは文字列型ではないので""と比較する事は出来ません。 なので、データが入っているレコードでは「型が違うから比較出来ない」のでエラーになり「#error」が表示されます。 そして、データが入っていないレコードでは、型の違いによるエラーにはなりませんが「NULL値と""は等しくない」と判断され「日付、つまり、NULL」が表示されます。 「長さ0の文字列」と「NULL値」は「異なる値」だと言う事を忘れてはいけません。 つまり >日付フィールドが空白→有無フィールドも空白 >日付フィールドに日付が入っているなら→有無フィールドは#エラー になる訳です。 これは「意図した動作ではないが、仕様通りの動作」なので 有無: IIf([日付]="","未",[日付]) と言う式を書いた場合には、上記の動作は正常な動作です。 質問者さんが意図した通りに動作させるにはIsNull関数を用い 有無: IIf(IsNull([日付]),"未",[日付]) として下さい。
その他の回答 (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([日付] & "") と、言う事だと思います。
お礼
ご回答ありがとうございます。
お礼
なるほど。 できました。 ご回答ありがとうございます。