• 締切済み

VBで「体育の日を返す関数」

VBの標準モジュールを使って体育の日を返したいのですがまったくわかりません。 excelで「A1{2000}と書いてB2{=Taiiku(A1)}」こたえを出せる感じにしたいのですが。。 関数名を「Taiiku」引数を「Toshi(2000とか年の4桁整数)」2000年までは10/10で以降は10月第二月曜日という設定です。 とっても素人なので細かい解説が付いていると助かります。 文が稚拙で大変恐縮なのですがよろしくお願いします。

みんなの回答

  • Masa2072
  • ベストアンサー率51% (94/182)
回答No.1

まずはサンプル(とういかまんまですが) 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 で求めることが出来ます。

mi-yu27
質問者

お礼

大変遅くなってしまいしたが、VBでのご説明とても助かりました。 丁寧で凄くわかりやすかったです。 本当にありがとうございました! それでは短い文で申し訳ないですが失礼いたします。

関連するQ&A

専門家に質問してみよう