月毎の最終営業日を取得するには、DateAdd関数やWeekday関数を使用します。
DateAdd関数とWeekday関数を使用して以下のように指定します。
「%DateAdd("d", -if(weekday(dateserial(Year(var_date), Month(var_date) + 1, 0)) = 1, 2, if(weekday(dateserial(Year(var_date), Month(var_date) + 1, 0)) = 7, 1, 0)), dateserial(Year(var_date), Month(var_date) + 1, 0))%」
※ただし祝日は加味されませんのでご注意ください。
まずDateAdd関数では以下のように指定し、日付を計算します。
%DateAdd(インターバル, 日付, 間隔)%
例えば、本日よりも2か月前の日付を取得するには、本日日付が「2020/10/01」とすると
%DateAdd("m",-2,"2020/10/01")%
と指定することで取得することができます。
上記を踏まえて、以下のように指定しています。
■インターバル
DateAdd関数にて計算したい内容を指定します。"d"を指定した場合、日を計算します。
■日付
-if(weekday(dateserial(Year(var_date), Month(var_date) + 1, 0)) = 1, 2, if(weekday(dateserial(Year(var_date), Month(var_date) + 1, 0)) = 7, 1, 0)
→この関数を使用して、指定した月の最終日が土曜日または日曜日であった場合に、土日を除外した最終日を取得することができます。
・月の最終日が日曜日の場合
-if(weekday(dateserial(Year(var_date), Month(var_date) + 1, 0)) = 1, 2
→指定した月の最終日が日曜日(1)であった場合は2日分減算する処理を行います。
※1 Weekday関数で日時を指定すると、指定した日時の曜日を数字として取得することができます。
ここでは1を日曜日として以降2=月曜日、3=火曜日…といった形で取得することができます。
※2 dateserial関数にてMonthを+1しています。
これは日の部分に0を入れると前月の月末が取得されるためです。
ここで月を+1をすることで当月の月末を取得することができます。
・月の最終日が土曜日の場合
-if(weekday(dateserial(Year(var_date), Month(var_date) + 1, 0)) = 7, 1
→指定した月の最終日が土曜日(7)であった場合は1日分減算する処理を行います。
・どちらにも当てはまらない場合
,0
→どちらにも当てはまらない場合、減算しないという処理を行います。
■間隔
dateserial(Year(var_date), Month(var_date) + 1, 0)
→基準となる日時を指定します。
ここではDateserial関数を使用して、指定した月の最終日を指定します。
下記のURLもご参照ください。
・土日を除く月末最終日を取得する
https://automate.sct.co.jp/knowledge/11088/
・前月の月末日を取得する(DateSerial関数の詳細な内容については下記をご参照ください)
https://automate.sct.co.jp/knowledge/11080/
【サンプルコード】
変数「var_date」で指定された月の最終営業日をダイアログ表示するサンプル
<AMVARIABLE NAME="var_date" VALUE="2020/10/01" />
<AMSHOWDIALOG>%DateAdd("d", -if(weekday(dateserial(Year(var_date), Month(var_date) + 1, 0)) = 1, 2, if(weekday(dateserial(Year(var_date), Month(var_date) + 1, 0)) = 7, 1, 0)), dateserial(Year(var_date), Month(var_date) + 1, 0))%</AMSHOWDIALOG>