Microsoft Access 掲示板

iifのネスト

8 コメント
views
4 フォロー

AとBという数値があって
Cという基準日があります。

今日がCよりも前の場合はAを
今日がCよりも後で、
Cが2020/3/1から2020/3/31の間にある場合はBを
それ以外の場合はAを表示させたいのですが

うまくいきません。

iif(今日<基準日,A,iif(基準日<=2020/3/1,A,B))

教えて下さい。

k
作成: 2020/03/19 (木) 12:18:16
最終更新: 2020/03/19 (木) 12:18:16
通報 ...
1
hiroton 2020/03/19 (木) 18:53:30 6de21@f966d

日付をコード上に直接日付の書式を使って記述する場合は「#」で囲む必要があります。

 2020/3/1
〇 #2020/3/1#

VBAにはある期間に含まれるを直接的に表現する方法はありませんので、2つの条件(開始条件、終了条件)を組み合わせて表現します。条件の組み合わせなのでiifをネストさせても表現できますが論理演算子を用いると簡単です。

2020/3/1から2020/3/31の間にある場合

C >= #2020/3/1# AND C <= #2020/3/31#

これを組み合わせて質問の条件をそのまま書けば

iif( 今日 < C, A, iif( C >= #2020/3/1 AND C <= #2020/3/31#, B, A))

となりますが条件を整理して

iif( 今日 > C AND C >= #2020/3/1# AND C <= #2020/3/31#, B, A)

とするとすっきりして良いと思います。(今日 > C部分で上の式と比較演算子が変わっているところに注意してください)

2

2020/3/1をKARA、2020/3/31をMADEとして式を入れてみました。

一番下の整理した式ではうまくいきませんでしたので

iif(今日 < C , A , iif( C >= KARA and C <= MADE , B , A ))

で、実行しましたが、やはりうまくいきません。

今日がCを過ぎていて、CがKARAとMADEの期間内であればB、期間外であればAを表示したいのですが
すべてAが表示されてしまいます。。。

4
hiroton 2020/03/23 (月) 08:19:02 bfed6@f966d >> 2

変数への代入に問題があると思われます。関係するコードをすべて提示してください

3
新貝 2020/03/22 (日) 19:23:04 修正 b8d68@e7ec0

横から失礼します。 変数の前後に"#"で囲まないといけないのでは?
日付型の条件式では#で囲む必要があります。 変数で対応するときは#をダブルクォーテーションで囲み
アンパサンド(&)で続く文字列を連結します。
今日の日付もToday()で対応かなと思います。 カッコは不要であれば入力後に自動で消えると思います。

iif("#" & today()    & "#" < C , A , iif( C >= "#" &  KARA & "#" &  and C <= "#" & MADE & "#" , B , A ))

5
hatena 2020/03/23 (月) 08:43:37 修正

情報が不足しているので、下記の点について情報を補足してください。

まずは、これはどこに記述しているのか、明確にしてください。
コントロールソース、クエリの抽出条件欄などに式として記述しているのか。
SQLビュー、レコードソース、値集合ソースなどにSQLコードとして記述しているのか。
VBAウィンドウにVBAコードとして記述しているのか。

上記のどれにしても、一部ではなく全体を提示してください。
(式全体、SQL文全体、VBAならプロシージャ全体)

6

みなさん回答ありがとうございました。
もう一度考え直した結果、以下のコードでうまくいきました。

IIf( C >= KARA And C <= MADE ,IIf(Date()> C , B , A ), A )

7

kさん、解決できてよかったですね。

しかし、これでは、せっかく回答してくださった回答者、後からここを閲覧した人にとっては、まったく無価値のスレッドになってしまいます。(何が原因で、どうして解決したのかが、質問者以外にはまったく不明)

私の回答で情報追加の依頼をした件について、情報を提示してもらえませんか。

8

もう、見てないようなので閉じます。