プログラミング(その5:曜日を求めてみよう。)

1日から31日までの任意の日付をn日とします。ただし、1日を火曜日とします。
今までは、順処理(順番に実行する手順)の1行だけのプログラムです。
今度のプログラムは一行ではできません。2行ないし3行の順処理になるでしょう。
1日が"火曜日"ですから2日は"水"、3日は"木"、4日は"金"、5日は"土"、6日は
"日"、7日は"月"となります。
したがって、n日目を7で割った時の余り(0から6)を使う事が考えられます。
そこで、次のようなマクロを書きます。

@    function  prog5(n as integer) as variant
A     dim ri as integer
      dim wk as variant                

B     wk="月火水木金土日"
C     ri = n mod 7
D     prog5=mid(wk,ri+1,1)
E    end function


Aは余りを計算するための変数です。n日を7で割った時の余りは、0から6までの整数(integer)の値をとります。
Bは曜日の文字列(variant)です。Cはnを7で割った時の余り(mod関数)を求めます。Dは曜日の文字列からri+1
番目から1文字抽出(mid関数)します。nが1日だったらriは1、mid(wk,1+1,1)となり、"火"を文字列から抽出します。

日付と曜日の対応は1日から7日までは
(1,2,3,4,5,6,7:火,水,木,金,土,日,月)で、8日から14日は
(8,9,10,11,12,13,14:火,水,木,金,土,日,月)となり、この繰り返しです。そこで、曜日の文字列"火水木金土日月"に注目して
ひ日と曜日の対応を考えてみましょう。そうです、1日から7日までは曜日の文字列の1番目から7番目に対応しています。
それでは、8日から14日まではどうでしょう。1週間は7日目ごとの繰り返しですから、8日から14日を7で割った余り
は1,2,3,4,5,6,0となり、初めの1日、2日、…、7日までと同じになります。