EXCELで祝日を判定して祝日名を取得する関数(祝日、国民の休日、振替休日等)を作成したので公開する。
DATE型の日付を引数として渡すとその日が祝日かを判定し結果として祝日名を返すEXCEL用VBAマクロファンクション関数を作成したので公開する。
http://www.excelio.jp/Excel_Experiment.html
この関数の搭載されたEXCELシートはこのサイトからダウンロード出来る。
EXCEL用VBAマクロ祝日判定ファンクション(Function関数)群の概要
Excelで月計表やアルバイトのシフト管理表を作成する際、祝日を判定し表記を変えたり計算方式を変えたりしたい時はよく有る。Excel単体の標準的な関数では曜日の判定によって日曜日か否かの判定は簡単にできるが、過去も含めた祝日得る事は難しい。そこで汎用的に使えるEXCEL用VBAマクロのファンクション(Function関数)群を作成した。

テーマで有るシフト管理の表示メージはこの様に祝日を色表現する必要があった。

作成したEXCEL用VBAマクロのファンクションを組み合わせるとシフト表や月計表に必要な万年カレンダー対応の表を作成できる。このサンプルでは最上部の年を入力し更新ボタンを押すとその年1年分のカレンダーが表示される様にした。
EXCEL用VBAマクロ祝日判定ファンクション関数群
ファンクションは機能ごとに全体を束ねる
【メイン】その日が休日判定EXCEL VBAマクロ関数
【その①】何の祝日かを判定するEXCEL VBAマクロ関数
【その②】その年の春分の日を求めるEXCEL VBAマクロ関数
【その③】その年の秋分の日を求めるEXCEL VBAマクロ関数
【その④】ある月の第○△曜日が□日であるかを調べるEXCEL VBAマクロ関数
【その⑤】その日が振替休日かを調べるEXCEL VBAマクロ関数
【その⑥】その日が国民の休日かを調べるEXCEL VBAマクロ関数
【その⑦】その日が特別な休日かを調べるEXCEL VBAマクロ関数
メインは【その①】~【その⑦】を順に呼んでいます。【その①】から【その⑦】はそれぞれに機能を単体としても利用できる。ダウンロード 出来るEXCELブックではこれら全てとEXCEL上にカレンダーを描画するマクロが搭載されている
文字数制限のためコードの後半は別ページに記載する。
ある日が祝日であるか?その場合どの祝日か?を調べるEXCEL VBAマクロ関数
ある日をDete型で与えると返り値としては祝日か否かをTrue/Falseで返しTrueの場合引数として祝日の種類(祝日名 or 国民の休日 or 振替休日 or 特別な休日)を返す。
'******************************************************************************
' ある日が祝日であるか?その場合どの祝日か?を調べる関数。
'******************************************************************************
Public Function Kyujitsu(targetdate As Date, hollydayname As String) As Boolean
kaerichi = False
hollydayname = ""
kaerichi = NationalHollydays(targetdate, hollydayname)
If kaerichi = True Then
Kyujitsu = True
Else
hollydayname = ""
kaerichi = FurikaeKyujitsu(targetdate, hollydayname)
If kaerichi = True Then
Kyujitsu = True
Else
hollydayname = ""
kaerichi = KokuminnoKyujitsu(targetdate, hollydayname)
If kaerichi = True Then
Kyujitsu = True
Else
hollydayname = ""
kaerichi = TokubetsunaKyujitsu(targetdate, hollydayname)
If kaerichi = True Then
Kyujitsu = True
Else
Kyujitsu = False
End If
End If
End If
End If
End Function
祝日判定EXCEL VBAマクロ関数
ある日をDete型で与えると返り値としては祝日か否かをTrue/Falseで返しTrueの場合引数として祝日の種類(祝日名)を返す。
'******************************************************************************
' 祝日判定関数
'******************************************************************************
Public Function NationalHollydays(targetdate As Date, hollydayname As String) As Boolean
Dim targetyear As Integer
Dim targetmonth As Integer
Dim targetday As Integer
targetyear = CInt(Format(targetdate, "yyyy"))
targetmonth = CInt(Format(targetdate, "m"))
targetday = CInt(Format(targetdate, "d"))
hantei = False
Select Case targetmonth
Case 1
If targetyear > 1948 And targetday = 1 Then
hantei = True
hollydayname = "元旦"
End If
If targetyear > 1948 Then
If targetyear <2000 Then<br>
If targetday = 15 Then
hantei = True
hollydayname = "成人の日"
End If
ElseIf CInt(Format(DaiXYoubi(targetyear, 1, 2, 1), "d")) = targetday Then
hantei = True
hollydayname = "成人の日"
End If
End If
Case 2
If targetyear > 1966 Then
If targetday = 11 Then
hantei = True
hollydayname = "建国記念の日"
End If
End If
Case 3
If targetyear > 1948 Then
If targetday = Syunbun(targetyear) Then
hantei = True
hollydayname = "春分の日"
End If
End If
Case 4
If targetday = 29 Then
If targetyear > 1948 Then
If 1989 > targetyear Then
hantei = True
hollydayname = "天皇誕生日"
ElseIf 2007 > targetyear And targetyear > 1988 Then
hantei = True
hollydayname = "みどりの日"
Else
hantei = True
hollydayname = "昭和の日"
End If
End If
End If
Case 5
If targetyear > 1948 Then
If targetday = 3 Then
hantei = True
hollydayname = "憲法記念日"
End If
If targetday = 5 Then
hantei = True
hollydayname = "こどもの日"
End If
If targetday = 4 Then
If targetyear > 2006 Then
hantei = True
hollydayname = "みどりの日"
End If
End If
End If
Case 7
If targetyear > 1995 Then
If 2004 > targetyear Then
If targetday = 20 Then
hantei = True
hollydayname = "海の日"
End If
Else
If CInt(Format(DaiXYoubi(targetyear, 7, 3, 0), "d")) = targetday Then
hantei = True
hollydayname = "海の日"
End If
End If
End If
Case 9
If targetyear > 1965 Then
If 2004 > targetyear Then
If targetday = 15 Then
hantei = True
hollydayname = "敬老の日"
End If
Else
If targetyear > 2003 And CInt(Format(DaiXYoubi(targetyear, 9, 3, 1), "d")) = targetday Then
hantei = True
hollydayname = "敬老の日"
End If
End If
End If
If targetyear > 1947 Then
If targetday = Syuubun(targetyear) Then
hantei = True
hollydayname = "秋分の日"
End If
End If
Case 10
If targetyear > 1965 Then
If 2000 > targetyear Then
If targetday = 10 Then
hantei = True
hollydayname = "体育の日"
End If
ElseIf targetyear > 1999 Then
If CInt(Format(DaiXYoubi(targetyear, 10, 2, 1), "d")) = targetday Then
hantei = True
hollydayname = "体育の日"
End If
End If
End If
Case 11
If targetyear > 1947 Then
If targetday = 3 Then
hantei = True
hollydayname = "文化の日"
ElseIf targetday = 23 Then
hantei = True
hollydayname = "勤労感謝の日"
End If
End If
Case 12
If targetyear > 1988 Then
If targetday = 23 Then
hantei = True
hollydayname = "天皇誕生日"
End If
End If
End Select
If hantei = True Then
NationalHollydays = True
Else
NationalHollydays = False
End If
End Function
コードの後半別ページです。
DATE型の日付を引数として渡すとその日が祝日かを判定し結果として祝日名を返すEXCEL用VBAマクロファンクション関数を作成したので公開する。
http://www.excelio.jp/Excel_Experiment.html
この関数の搭載されたEXCELシートはこのサイトからダウンロード出来る。
EXCEL用VBAマクロ祝日判定ファンクション(Function関数)群の概要
Excelで月計表やアルバイトのシフト管理表を作成する際、祝日を判定し表記を変えたり計算方式を変えたりしたい時はよく有る。Excel単体の標準的な関数では曜日の判定によって日曜日か否かの判定は簡単にできるが、過去も含めた祝日得る事は難しい。そこで汎用的に使えるEXCEL用VBAマクロのファンクション(Function関数)群を作成した。
テーマで有るシフト管理の表示メージはこの様に祝日を色表現する必要があった。
作成したEXCEL用VBAマクロのファンクションを組み合わせるとシフト表や月計表に必要な万年カレンダー対応の表を作成できる。このサンプルでは最上部の年を入力し更新ボタンを押すとその年1年分のカレンダーが表示される様にした。
EXCEL用VBAマクロ祝日判定ファンクション関数群
ファンクションは機能ごとに全体を束ねる
【メイン】その日が休日判定EXCEL VBAマクロ関数
【その①】何の祝日かを判定するEXCEL VBAマクロ関数
【その②】その年の春分の日を求めるEXCEL VBAマクロ関数
【その③】その年の秋分の日を求めるEXCEL VBAマクロ関数
【その④】ある月の第○△曜日が□日であるかを調べるEXCEL VBAマクロ関数
【その⑤】その日が振替休日かを調べるEXCEL VBAマクロ関数
【その⑥】その日が国民の休日かを調べるEXCEL VBAマクロ関数
【その⑦】その日が特別な休日かを調べるEXCEL VBAマクロ関数
メインは【その①】~【その⑦】を順に呼んでいます。【その①】から【その⑦】はそれぞれに機能を単体としても利用できる。ダウンロード 出来るEXCELブックではこれら全てとEXCEL上にカレンダーを描画するマクロが搭載されている
文字数制限のためコードの後半は別ページに記載する。
ある日が祝日であるか?その場合どの祝日か?を調べるEXCEL VBAマクロ関数
ある日をDete型で与えると返り値としては祝日か否かをTrue/Falseで返しTrueの場合引数として祝日の種類(祝日名 or 国民の休日 or 振替休日 or 特別な休日)を返す。
'******************************************************************************
' ある日が祝日であるか?その場合どの祝日か?を調べる関数。
'******************************************************************************
Public Function Kyujitsu(targetdate As Date, hollydayname As String) As Boolean
kaerichi = False
hollydayname = ""
kaerichi = NationalHollydays(targetdate, hollydayname)
If kaerichi = True Then
Kyujitsu = True
Else
hollydayname = ""
kaerichi = FurikaeKyujitsu(targetdate, hollydayname)
If kaerichi = True Then
Kyujitsu = True
Else
hollydayname = ""
kaerichi = KokuminnoKyujitsu(targetdate, hollydayname)
If kaerichi = True Then
Kyujitsu = True
Else
hollydayname = ""
kaerichi = TokubetsunaKyujitsu(targetdate, hollydayname)
If kaerichi = True Then
Kyujitsu = True
Else
Kyujitsu = False
End If
End If
End If
End If
End Function
祝日判定EXCEL VBAマクロ関数
ある日をDete型で与えると返り値としては祝日か否かをTrue/Falseで返しTrueの場合引数として祝日の種類(祝日名)を返す。
'******************************************************************************
' 祝日判定関数
'******************************************************************************
Public Function NationalHollydays(targetdate As Date, hollydayname As String) As Boolean
Dim targetyear As Integer
Dim targetmonth As Integer
Dim targetday As Integer
targetyear = CInt(Format(targetdate, "yyyy"))
targetmonth = CInt(Format(targetdate, "m"))
targetday = CInt(Format(targetdate, "d"))
hantei = False
Select Case targetmonth
Case 1
If targetyear > 1948 And targetday = 1 Then
hantei = True
hollydayname = "元旦"
End If
If targetyear > 1948 Then
If targetyear <2000 Then<br>
If targetday = 15 Then
hantei = True
hollydayname = "成人の日"
End If
ElseIf CInt(Format(DaiXYoubi(targetyear, 1, 2, 1), "d")) = targetday Then
hantei = True
hollydayname = "成人の日"
End If
End If
Case 2
If targetyear > 1966 Then
If targetday = 11 Then
hantei = True
hollydayname = "建国記念の日"
End If
End If
Case 3
If targetyear > 1948 Then
If targetday = Syunbun(targetyear) Then
hantei = True
hollydayname = "春分の日"
End If
End If
Case 4
If targetday = 29 Then
If targetyear > 1948 Then
If 1989 > targetyear Then
hantei = True
hollydayname = "天皇誕生日"
ElseIf 2007 > targetyear And targetyear > 1988 Then
hantei = True
hollydayname = "みどりの日"
Else
hantei = True
hollydayname = "昭和の日"
End If
End If
End If
Case 5
If targetyear > 1948 Then
If targetday = 3 Then
hantei = True
hollydayname = "憲法記念日"
End If
If targetday = 5 Then
hantei = True
hollydayname = "こどもの日"
End If
If targetday = 4 Then
If targetyear > 2006 Then
hantei = True
hollydayname = "みどりの日"
End If
End If
End If
Case 7
If targetyear > 1995 Then
If 2004 > targetyear Then
If targetday = 20 Then
hantei = True
hollydayname = "海の日"
End If
Else
If CInt(Format(DaiXYoubi(targetyear, 7, 3, 0), "d")) = targetday Then
hantei = True
hollydayname = "海の日"
End If
End If
End If
Case 9
If targetyear > 1965 Then
If 2004 > targetyear Then
If targetday = 15 Then
hantei = True
hollydayname = "敬老の日"
End If
Else
If targetyear > 2003 And CInt(Format(DaiXYoubi(targetyear, 9, 3, 1), "d")) = targetday Then
hantei = True
hollydayname = "敬老の日"
End If
End If
End If
If targetyear > 1947 Then
If targetday = Syuubun(targetyear) Then
hantei = True
hollydayname = "秋分の日"
End If
End If
Case 10
If targetyear > 1965 Then
If 2000 > targetyear Then
If targetday = 10 Then
hantei = True
hollydayname = "体育の日"
End If
ElseIf targetyear > 1999 Then
If CInt(Format(DaiXYoubi(targetyear, 10, 2, 1), "d")) = targetday Then
hantei = True
hollydayname = "体育の日"
End If
End If
End If
Case 11
If targetyear > 1947 Then
If targetday = 3 Then
hantei = True
hollydayname = "文化の日"
ElseIf targetday = 23 Then
hantei = True
hollydayname = "勤労感謝の日"
End If
End If
Case 12
If targetyear > 1988 Then
If targetday = 23 Then
hantei = True
hollydayname = "天皇誕生日"
End If
End If
End Select
If hantei = True Then
NationalHollydays = True
Else
NationalHollydays = False
End If
End Function
コードの後半別ページです。