Outlook の予定表に 2008 年以降の祝日を追加するスクリプト


Outlook 2003 や Outlook 2002 では製品に含まれる祝日データに 2008 年以降の祝日が無く、更新データをダウンロードしてから祝日をインポートする必要があるのですが、これを行うと Outlook 2003 では 2006 年と 2007 年の祝日が重複してしまいます。
また、Outlook 2000 以前ではそもそも更新データがなく、祝日データをユーザーが自分でカスタマイズしてインポートする必要があります。

そこで、Outlook の予定表に祝日を追加するスクリプトを紹介します。
このスクリプトを編集することで独自に祝日を追加することも可能です。
たとえば、2008/8/28 を創立記念日として追加する場合、「’- ここに祝日を追加します」の下に、以下の 1 行を追加します。

AddHoliday "創立記念日", "2008/08/28 00:00 AM"

スクリプトは以下の通りです。下記のスクリプトを AddHoliday.vbs という名前で保存し、ダブルクリックして実行すると、2008 年以降の祝日が Outlook の既定の予定表に追加されます。

' - ここをトリプル クリックするとすべてのコードが選択できます。
'
Option Explicit
Const olFolderCalendars = 9
Const olAppointmentItem = 1
Const olFree = 0
Dim objOutlook
Dim objSession
Dim objCalendar
Dim colEvents
Dim objHoliday
Dim iYear
' Outlook アプリケーション オブジェクトの取得
Set objOutlook = CreateObject("Outlook.Application")
' Namespace オブジェクトの取得
Set objSession = objOutlook.GetNamespace("MAPI")
' 予定表フォルダの取得
Set objCalendar = objSession.GetDefaultFolder(olFolderCalendars)
Set colEvents = objCalendar.Items
' 予定表から 2008 年以降の祝日のみを取得
Set objHoliday = colEvents.Find("[分類項目] = '祝日' AND [開始日] >= '2007/12/31' AND [場所] = '日本'")
' 2008 年以降の祝日を削除
While Not objHoliday Is Nothing
    objHoliday.Delete
    Set objHoliday = colEvents.FindNext
Wend
'
' 2008 年から 2012 年までの祝日を追加
For iYear = 2008 to 2012
    AddNormalHoliday "天皇誕生日", iYear, 12, 23
    AddNormalHoliday "勤労感謝の日", iYear, 11, 23
    AddNormalHoliday "文化の日", iYear, 11, 3
    AddHappyMonday "体育の日", iYear, 10, 2
    AddHappyMonday "敬老の日", iYear, 9, 3
    AddHappyMonday "海の日", iYear, 7, 3
    AddNormalHoliday "こどもの日", iYear, 5, 5
    AddNormalHoliday "みどりの日", iYear, 5, 4
    AddNormalHoliday "憲法記念日", iYear, 5, 3
    AddNormalHoliday "昭和の日", iYear, 4, 29
    AddNormalHoliday "建国記念の日", iYear, 2, 11
    AddHappyMonday "成人の日", iYear, 1, 2
    AddNormalHoliday "元日", iYear, 1, 1
Next
' 日付が一定でない祝日の追加
AddNormalHoliday "春分の日", 2008, 3, 20
AddNormalHoliday "春分の日", 2009, 3, 20
AddNormalHoliday "春分の日", 2010, 3, 21
AddNormalHoliday "春分の日", 2011, 3, 21
AddNormalHoliday "春分の日", 2012, 3, 20
AddNormalHoliday "秋分の日", 2008, 9, 23
AddNormalHoliday "国民の休日", 2009, 9, 22
AddNormalHoliday "秋分の日", 2009, 9, 23
AddNormalHoliday "秋分の日", 2010, 9, 23
AddNormalHoliday "秋分の日", 2011, 9, 23
AddNormalHoliday "秋分の日", 2012, 9, 22
' - ここに祝日を追加します
' AddNormalHoliday "創立記念日", 2008, 8, 28
'
' 振り替え休日を考慮しない祝日の追加
Sub AddHoliday( sName, dtDay )
    Set objHoliday = objOutlook.CreateItem(olAppointmentItem)
    objHoliday.Subject = sName
    objHoliday.Start = dtDay
    objHoliday.AllDayEvent = True
    objHoliday.Categories = "祝日"
    objHoliday.ReminderSet = False
    objHoliday.BusyStatus = olFree
    objHoliday.Location = "日本"
    objHoliday.Save
    Set objHoliday = Nothing
End Sub
'
' ハッピーマンデーの祝日の追加
Sub AddHappyMonday( sName, iYear, iMonth, iMonday )
    Dim iWk
    Dim iDay
    Dim dtDay
    iWk = Weekday(iYear & "/" & iMonth & "/1" )
    If iWk <= 2 Then
        iWk = iWk + 4
    Else
        iWk = iWk - 3
    End If
    iDay = 7 * iMonday - iWk
    AddHoliday sName, iYear & "/" & iMonth & "/" & iDay & " 00:00 AM"
End Sub
'
' 通常 (振り替え休日あり) の祝日の追加
Sub AddNormalHoliday( sName, iYear, iMonth, iDay )
    Dim iWk
    Dim dtSub
    Dim objHoliday
    AddHoliday sName, iYear & "/" & iMonth & "/" & iDay & " 00:00 AM"
    iWk = Weekday( iYear & "/" & iMonth & "/" & iDay )
    If iWk = 1 Then
        dtSub = CDate(iYear & "/" & iMonth & "/" & iDay)
        Do    ' 振替休日が国民の祝日だったら、翌日に繰り越し
            dtSub = DateAdd("d", 1, dtSub)
            Set objHoliday = colEvents.Find("[分類項目] = '祝日' AND [開始日] >= '" & _
                dtSub & " 00:00 AM' AND [終了日] <= '" & DateAdd("d", dtSub, 1) & _
                "' AND [場所] = '日本'")
        Loop While Not objHoliday Is Nothing
        AddHoliday "振替休日 (" & sName & ")", dtSub & " 00:00 AM"
    End If
End Sub

広告

Outlook の予定表に 2008 年以降の祝日を追加するスクリプト」への14件のフィードバック

  1. 便利なスクリプトを公開していただきありがとうございます。
    早速、あまり考えないで適用してみましたが、
    祝日表示がスケジュール欄をかなり占めるので、削除したいと思いました。
    ところが、削除方法がわかりません。お教えください。

  2. ご指摘ありがとうございます。
    さっそく2009年9月22日を国民の休日として追加するようスクリプトを修正しました。

  3. ありがとうございました。
    私はスクリプトの知識はありませんが、簡単に祝日を追加する事ができました。

  4. すばらしい。 使いやすくて、ありがとうございます。 ちなみに、Outlookに追加するときに、休日とわかるように色やラベルをつける方法がありますか?ご教示していただけると助かります。Jun

  5. To Jun さん残念ながら、Outlook Object Model では予定の色をつけることができません。Outlook 2007 なら、分類項目と色が連動しているので、分類項目として「祝日」を追加し、色を割り当てれば、祝日に色を追加することができます。

  6. こんばんは。あ、あれれ?最近調べ物すると、Millefeuilleさんのページに行きつく事が多いですね。※決してストーカしてる訳じゃないですよ(汗)今回はOutlookに祝日の登録をする機能を付けようと、まずは祝日のデータがあるサイトを探して回っていたら、既にそのコードまで作られているココにたどり着いてしまいました。そこでお願いなのですが、次回のOutlook Calenderのバージョンアップ時にこのコードを使いたいと思うのですがよろしいでしょうか?いつもお願いばかりで申し訳ありませんが、よろしくお願い致します。

  7. […] そのため、以前、Outlook の予定表に 2008 年以降の祝日を追加するスクリプトを作ったのですが、このスクリプトでは 2012 年までの祝日が追加されていました。そろそろ 2013 年以降の祝日を追加するスクリプトも必要になるかと思ったので作ってみました。 […]

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中