goo blog サービス終了のお知らせ 

ITな毎日の成果をメモするブログはじめました!

ITな毎日の仕事の成果を成果があった時だけメモするブログ

EXCELで祝日を判定して祝日名を取得する関数(祝日、国民の休日、振替休日等) その一

2010-10-31 03:27:30 | 日記
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

コードの後半別ページです。


最新の画像もっと見る