dポイントプレゼントキャンペーン実施中!

QNo.3555150の関連ですが、質問があります。
下記のフィールドは全て日付です。
前回は最新日を最終対応日に移行する質問でしたが、以下の
場合はどのように記述したらよいでしょうか?
対応日(1) 対応日(2) 対応日3 対応日(4) 最終対応日
未入力   未入力  未入力   未入力    5日
 5日     4日   未入力   未入力    4日
 5日     4日    3日    未入力    3日
 5日     4日    3日    2日      2日
普通ならば対応日(1)→対応日(4)になるにつれて、新しい日付を
入力させるのですが、このような困った入力データに対応するため、
あえて、日付の新旧にこだわらず、(1)<(2)<(3)<(4)という優先順位で
最終対応日に日付をシフトしたいのです。最終対応日のみに日付が入ってるレコードについては、そのままにしたいです。
宜しくお願いいたします。

A 回答 (3件)

式の組み立て方の考え方は正しいです。

ただ、
IIF(式A, 出力B, 出力C)
という形を変えてはいけません(括弧の位置と数)。
入れ子構造にするには、
IIF(式A1, 出力B1, IIF(式A2, 出力B2, 出力C2))
となります。(始めの IIF の括弧の数が多いようです。おしいですね!!)

>尚、1行目の最終対応日の日付は既入力データです。
とうことであれば、式は、
IIF([最終対応日]>0, ~
から始めることになります。
    • good
    • 0
この回答へのお礼

irija_bariさん。
miffyです。(朝早くからの御回答有難うございます)
作り直して以下のように記述しました。
SELECT IIF([最終対応日]>0,[最終対応日],IIF([対応日(4)]>0,[対応日(4)],IIF([対応日(3)]>0,[対応日(3)],IIF([対応日(2)]>0,[対応日(2)],IIF([対応日(1)]>0,[対応日(1)],[0]))))) AS 最終対応日
FROM 対応日;
今度は保存してもエラーは出なくなりました。
しかしながら、実行すると”SELECTで指定されてる別名'最終対応日'が循環参照を発生させています”と出ます。
これはどういうことなのでしょうか?

お礼日時:2007/12/15 09:45

>しかしながら、実行すると”SELECTで指定されてる別名'最終対応日'が循環参照を発生させています”と出ます。


[最終対応日] を [対応日].[最終対応日] と書き換えてみてください。
(余計なお世話かもしれませんが、エラー対処などでわからないことが
あったら Web などで調べる習慣を付けると良いですよ。
今回なら、「access, 循環参照を発生させています」などのキーワードで
検索します。)

また、
> IIF([対応日(1)]>0,[対応日(1)],[0])
の最後の [0] は数値なので 0 と書くべきです。これだと、「すべて未入力
なら、0 という値にしなさい」という式になるのですが、それでよろしいの
でしょうか?
    • good
    • 0
この回答へのお礼

irija_bariさん。
書き換えたら今度はうまくいきました。
・対応日(1)~対応日(4)が全て未入力→最終対応日は0
・対応日(1)~対応日(4)が全て未入力、かつ最終対応日が既入力
 →最終対応日はそのまま
最終対応日に既データがあるレコードには、ちゃんとデータが入ってました。
(^人^)感謝っっ♪

お礼日時:2007/12/15 15:14

QNo.3555150 を拝見しました。


今回は VBA を使わなくてもできるので、クエリを使用します。

1. クエリを作成して、「SQL ビュー」を開きます(「デザイン ビュー」で
  開いて、タイトル バーを右クリック「SQL ビュー」)。
2. SQL 文を入力します。(テーブル名は「テーブル1」だとします。)

SELECT IIF([対応日(4)]>0,[対応日(4)],[対応日(3)]) AS 最終対応日 FROM テーブル1;

対応日(4)が 0(=未入力)でなければ対応日(4)を出力、0 ならば
対応日(3)を出力するという意味です。
IIF を入れ子構造にする(今回なら、対応日(3)のところにさらに IIF を
入れていく)ことで、ご要望のものができると思います。

1 行目の
未入力   未入力  未入力   未入力    5日
は、どこから最終対応日を持ってきたのでしょうか?
5日    未入力  未入力   未入力    5日
の誤りと判断しました。
    • good
    • 0
この回答へのお礼

irija_bariさん。
miffyです。お返事有難うございます。
関数の不得手でよく理解できてないのですが、入れ子構造で以下のようにSQL文を記述したところ、構文エラー”演算子がありません”と表示されました。基本的に分かっていないもので恐縮ですが、どこがおかしいのでしょうか?
SELECT IIF((([対応日(4)]>0,[対応日(4)],IIF([対応日(3)]>0,[対応日(3)],IIF([対応日(2)]>0,[対応日(2)],IIF([対応日(1)]>0,[対応日(1)],[最終対応日]))) AS 最終対応日 FROM 対応日;
尚、1行目の最終対応日の日付は既入力データです。
説明不足で申し訳ありません。

お礼日時:2007/12/14 22:48

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

関連するカテゴリからQ&Aを探す