• ベストアンサー

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

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

noname#150256
noname#150256

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8516/19358)
回答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
質問者

お礼

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

関連するQ&A

  • クエリの一つのフィールドのIIF関数の限界は14個ですか?

    アクセス2003のクエリで たくさんの条件があり IIf(テーブル名!フィールド名,"正",IIf(・・・ と言う風に、IIF関数を14個までなら正常に動くのですが 15目になると「式が複雑すぎます」となってしまいます。 IIF関数の限界は14個なのでしょうか?

  • アクセス クエリでの関数について

    テーブルのフィールド1にテキスト形式で クダモノリンゴ クダモノオレンジ などが入っています。 クエリで 区別:IIF([フィールド1]="クダモノリンゴ",1,2) という感じで式を入れたのですが 結果はすべて2が表示されます。 別テーブルを作って フィールド1にクダモノリンゴなどの項目(頭に必ずクダモノが付きます) フィールド2に1や2などの種類別の値を入れてクエリでリレーションで関連づけても空白が返されます。 どこがおかしいのかまったくわからず困っています。アドバイスお願いします。

  • アクセス クエリ DSum関数

    testテーブル 日付     金額 2009/04/30  1 2009/05/01  2 2009/05/02  3 2009/06/30  4 このデータを元にクエリを作成して 4/1~5/30までの合計を新フィールドに表示させたいです。 日付     金額   4,5月合計 2009/04/30  1      6 2009/05/01  2      6 2009/05/02  3      6 2009/06/30  4    (表示なし) としたいのですが 4,5月合計: DSum("[金額] ","test",[日付]>=#2009/04/01# And [日付]<=#2009/05/30#) とすると 日付     金額  4,5月合計 2009/04/30  1     10 2009/05/01  2     10 2009/05/02  3     10 2009/06/30  4   (表示なし) となってしまいます。 「2009/4/1~2009/5/30のレコードに金額の合計を表示させる」のではく、 「2009/4/1~2009/5/30の金額の合計を表示させる」 にはどうすればいいですか? 表示についてはIIF関数で対応できると思っています。 よろしくお願いします。

  • ACCESSのクエリで関数を使うときテーブルを指定しないのはなぜ?

    問題集を解いています。 クエリで質問です。 [学生テーブル]から[クラス]フィールドを以下の様にIIF関数をつかってデザイングリッドに追加しています。 フィールド クラス名:IIF([クラス]=1,"A1",B1") テーブル  学生テーブル これで実行すると構文エラーになるのですが、問題集の答えをみると テーブルは空白のままです。 なぜテーブルにテーブル名を指定しないのですか?

  • クエリで日付ごとに金額で集計したいのに

    サンプルで、テーブルに 日付    金額 2013/06/01    ¥1,000 2013/06/02    ¥1,500 2013/06/01    ¥2,000 というデータを作って、 SELECT [テーブル1].日付, Sum([テーブル1].金額) AS 金額の合計 FROM テーブル1 GROUP BY [テーブル1].日付; このようなクエリを作ると、 日付    金額の合計 2013/06/01    ¥3,000 2013/06/02    ¥1,500 こうなりますよね。 実際のデータで、日付と金額のフィールドだけ、テーブルから持ってきて、 日付はグループ化、金額は合計にしてるのに、 日付がグループ化されていません。 図を見てもらえばわかると思いますが、同じ日なのに合計額が合算されていません。 なぜなのかわかりません。 元のテーブルは、日付は日付型、金額は通貨型です。 サンプルと同じです。 よろしくお願いします。 他のフィールドに主キーがあります。

  • Accessクエリ IIFについて

    お世話になります。 2つのテーブルをIDで紐付けて、それぞれの項目を比較し、○×を付けたいと思います。 【テーブルA】  ID メーカー 型番 品名 【テーブルB】  ID メーカー 型番 品名 【クエリC】  テーブルAとテーブルBをIDで紐付けて、各フィールド名を   テーブルAの方は前回_メーカー、前回_型番、前回_品名 とし、   テーブルBの方は今回_メーカー、今回_型番、今回_品名 とする。 【クエリD】  クエリCを元に、   前回_メーカー、前回_型番、前回_品名、今回_メーカー、今回_型番、今回_品名   を並べて表示し、それぞれを以下のように評価する。   メーカー評価:IIf([前回_メーカー]=[今回_メーカー],"○","×")   型番評価:IIf([前回_型番]=[今回_型番],"○","×")   品名評価:IIf([前回_品名]=[今回_品名],"○","×")   上記3つの評価でいずれかが×となっているレコードを抽出。 しかし、前回と今回でいずれも型番が空白(Null)だった場合、上記評価を すると"×"となってしまいました。 そこで質問ですが、   ・そもそもNull同士の評価は"×"になってしまうのでしょうか?(比較できない?)   ・テーブルAはSQL Server上にあり、テーブルBはExcelをインポートしたもの   (Accessのローカルテーブル)です。この違いによるものでしょうか。 ご教授の程、宜しくお願い致します。

  • クエリの抽出条件でiif関数

    こんにちわ。 いまaccess2000でクエリを作成し, その抽出条件において,iif関数を使って, フォームのあるフィールドに値があるときはその値, ないときはワイルドカードで検索しようと思い, 下記のコーディングを入れました。 iif([Forms]![F_フォーム1].[テキスト1] Is Null, "*", [Forms]![F_フォーム1].[テキスト1]) ところがワイルドカードの"*"がうまく効いてくれないようで 正しく検索されません。 どうすれば正しく検索できるでしょうか? 教えてください。お願いします。

  • テーブル作成クエリで新テーブル作成時に、オートナン

    SELECT Q_ユニオンクエリ.* INTO 新テーブル FROM Q_ユニオンクエリ; テーブル作成クエリで、新テーブルを作成するときに、 元テーブルにはないフィールドを作成することは可能ですか? 元テーブルには主キーがなく、 カテゴリ、品名 というフィールドしかない場合、 テーブル作成クエリで新テーブル作成時に、オートナンバー型の主キーを付ける方法はありますか?

  • Access2000のテーブル作成クエリについて

    テーブル作成クエリを使用し、作成された新しいテーブルを見ると、Yes/No型のフィールドのレコードが 0 や -1 に変換されています。 これを回避、または後からチェックボックスの形式に訂正する方法はないでしょうか? もうひとつ 作成された新しいテーブルでは、コピー元のテーブルで「主キー」となっていたフィールドが「主キー」ではなくなります。どうしてなのでしょうか?

  • 選択クエリを基に不一致クエリを作成したけれど...

    識者の力をお借りしたく質問いたします。 質問ページから不一致クエリに関する内容を参考に、ある不一致クエリを作成しています。 しかし、出来るはずの方法で結果が正しく表示されず途方にくれています。 処理の内容としては、あるクエリのフィールドを参考に不一致クエリで差分レコードを抽出したいというものです。 通常不一致クエリはテーブルの主キーを基に作成するものと私は理解しているのですが、今回の処理では基のテーブルに主キーが無く、(作成できない事情があり)クエリで無理矢理主キーもどきのものを作りました。 クエリで作成したのは、数字6桁(最大で)の後ろにチェックディジットとしてアルファベット1文字を追加した計7文字のフィールドです。 例:131401A 不一致を抽出したい基となる2つのテーブルに対しこのクエリを作成しました。 この2つのクエリから不一致クエリで差分を抽出し、基のテーブルに追加クエリで追加したいのですが、どうやっても不一致項目が表示されません。 根本的にクエリからの不一致クエリは作成できないのでしょうか? よろしくお願いいたします。 ■状況 テーブル1/テーブル2(基となるテーブル、主キー無し) クエリ1/クエリ2(テーブル1/テーブル2のレコードにコードを追加するクエリ) コード1/コード2(クエリ1/クエリ2で作成したコード)例:131401A 不一致クエリ テーブル2 → テーブル1 (リレーションシップ) コード2 条件:Not Null ※テーブル2の方が最新レコードが入っているので、テーブル2の差分レコードをテーブル1に追加したいというのが基本的な内容です。 よろしくお願いいたします。

専門家に質問してみよう