- 締切済み
VBで「体育の日を返す関数」
VBの標準モジュールを使って体育の日を返したいのですがまったくわかりません。 excelで「A1{2000}と書いてB2{=Taiiku(A1)}」こたえを出せる感じにしたいのですが。。 関数名を「Taiiku」引数を「Toshi(2000とか年の4桁整数)」2000年までは10/10で以降は10月第二月曜日という設定です。 とっても素人なので細かい解説が付いていると助かります。 文が稚拙で大変恐縮なのですがよろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Masa2072
- ベストアンサー率51% (94/182)
まずはサンプル(とういかまんまですが) Function Taiiku(ByVal Y As Integer) As Date Dim FstYoubi As Integer '火曜日を先頭とした曜日を表す数字を格納 Dim SecMon As Integer '第二月曜日の日付を格納 If Y <= 2000 Then '##2000年以前はその年の10月10日を返す Taiiku = DateSerial(Y, 10, 10) Else '#2001年以降は10月の第2月曜日を返す '火曜日を1、月曜日を7とした曜日に対応する数字を取得 FstYoubi = Weekday(DateSerial(Y, 10, 1), vbTuesday) '第二月曜日の日付をもめる SecMon = 15 - FstYoubi Taiiku = DateSerial(Y, 10, SecMon) End If End Function ポイントとしては如何に第二月曜日を求めるかというかです。 ※もっと分かりやすい説明や考え方があるかもしれませんが、一例としてお考えください。 まず1日がとりうる曜日は当然7種類で、1日が日~土までのときの第二月曜日の日付は 日=9 月=8 火=14 水=13 木=12 金=11 土=10 となります、これを計算しやすいように並べ替えると 火(1)=14 水(2)=13 木(3)=12 金(4)=11 土(5)=10 日(6)=9 月(7)=8 ※( )の数字はFstYoubiの値 ( )内の数字と第二月曜日の日付の和が15になることが分かることから 第二月曜日は SecMon = 15- FstYoubi で求めることが出来ます。
お礼
大変遅くなってしまいしたが、VBでのご説明とても助かりました。 丁寧で凄くわかりやすかったです。 本当にありがとうございました! それでは短い文で申し訳ないですが失礼いたします。