新祝日法対応のためには指定した曜日を計算して特定する必要があります。
私の頭では全く思いつきません。(;_;)
困ったときのめざら資源、探したらありました! \(^^)/ アッタ-
めざら資源>VZマクロ工房>文字列出力関連>七曜でふ−簡易版日付印字器
sitiyo.def
3: ;指定日の曜日を算出(ツェラーの式)
(m<3)?{ y--, m+=12, }
w=((y+ y/4+ y/400+ (m*13+8)/5+ 1- y/100) +d -1) %7,
なるほど、指定日の曜日を算出する、ツェラーの式というのがあるのですね。
マクロをBASICに置き換えてみました。式はほぼそのままですね。
'a1=1〜4(週)
'a2=1〜7(曜日)
ww=0
for d=1 to 31
if m<3 then y=y-1:m=m+12
w=((y+ y/4+ y/400+ (m*13+8)/5+ 1- y/100) +d -1) mod 7
if w=a2 then ww=ww+1
if ww=a1 then dd=d:goto 30612
next d
30612 return
実際に実装したルーチンも貼り付けます。
30611 '指定日の曜日を算出(ツェラーの式)
AA1=ASC(MID$(A$,4,1))-64 '1〜4(週)
AA2=ASC(MID$(A$,5,1))-64 '1〜7(曜日)
WW9=0
M9=YASM(YMAX) '該当祝日の月
Y9=YEAR '該当祝日の年
for D9=1 to 31
if M9<3 then Y9=Y9-1:M9=M9+12 'sitiyo.def
W9=((Y9+ Y9/4+ Y9/400+ (M9*13+8)/5+ 1- Y9/100) +D9 -1) MOD 7 'ツェラーの式
'W9=(Y9+ Y9/4+ Y9/400+ (M9*13+8)/5+ D9- Y9/100) MOD 7 '同等の式?
if W9<>AA2 then 30613 '曜日が一致するまで日を進める
WW9=WW9+1 '曜日が一致したら週を進める
if WW9<AA1 then 30613 '週が一致するまで進める
YASD(YMAX)=D9:goto 30614 '日が確定したらデータに入れる
30613 next D9
30614 'print co9;a$;" ";Y9;M9;AA1;AA2;W9;D9 'debug
return
コメントを書くとフローのミスにも気が付きやすいですね。(^^;
一応動くようになったのですが、何故か年を変えても今年の年で計算してしまいます。(>_<)
どうしよう・・・
続く・・・のか