【質問】
とある時刻のデータ(例:Excelのセルに書かれている日付・時刻)が、所定の時刻の範囲内であるか否かを判断したい。
例:9:00 ~ 15:00の間ならOK、それ以外はNG、とする場合
時刻 | OKまたはNG |
2020/7/10 8:59 | NG |
2020/7/10 9:00 | OK |
2020/7/10 15:00 | OK |
2020/7/10 15:01 | NG |
Excelのセルの内容を変数に取得し、判断する形としたいのだが、判定方法はあるか。
【回答】
主に2通りの方法が考えられます。
■方法1:時刻部分を数字に変換し比較する
1-1:変数に日付の値を格納
1-2:Format関数で「時刻・日付」の数字のみを抽出した文字列にVal関数を使用し、数値型に変換
1-3:1-2の結果が、数字の「900」と「1500」の間であるかどうかを判定(9:00 ~ 15:00の間であるかどうかを判断する場合)
--------------------------------以下、サンプル(方法1)--------------------------------
<AMVARIABLE NAME="var_1" VALUE="2020/07/10 5:13" />
<AMLOOP FROM="1" TO="5" />
<AMSHOWDIALOG ACTIVITY="input" MESSAGE="値を入力" DEFAULTVALUE="2020/7/10 8:00" RESULTVARIABLE="var_1" />
<AMIF EXPRESSION="%(900 <= Val(Format(var_1, "HHnn"))) AND (Val(Format(var_1, "HHnn")) <= 1500)%" USECOMPLEXUI="YES" />
<AMSHOWDIALOG>範囲内
%Val(Format(var_1, "HHnn"))%</AMSHOWDIALOG>
<AMELSE />
<AMSHOWDIALOG>範囲外
%Val(Format(var_1, "HHnn"))%</AMSHOWDIALOG>
<AMIF ACTIVITY="end" />
<AMLOOP ACTIVITY="end" />
■方法2:Datediff関数を使用する
2-1:変数に日付の値を格納
2-2:Datediff関数で、当日日付の9:00よりも2-1の変数の時刻が分単位で進んでおり、かつ当日日付の15:00よりも前であればTrueとするよう条件を組む
--------------------------------以下、サンプル(方法2)--------------------------------
<AMVARIABLE NAME="var_1" VALUE="" />
<AMSHOWDIALOG ACTIVITY="input" MESSAGE="時刻を入力してください" DEFAULTVALUE="%Date()% %Time()%" RESULTVARIABLE="var_1" />
<AMIF EXPRESSION="%DateDiff("n", Date() + Timeserial(9,0,0), var_1) >=0 and DateDiff("n", var_1, Date() + Timeserial(15,0,0)) >= 0%" USECOMPLEXUI="YES" />
<AMSHOWDIALOG MESSAGE="範囲内" />
<AMELSE />
<AMSHOWDIALOG MESSAGE="範囲外" />
<AMIF ACTIVITY="end" />