'********************************************************************* ' Microsoft Project for Windows 95 ' ' VBA マクロ ツール ' '********************************************************************* '********************************************************************* 'このマクロは国民の祝日を非稼働日に設定し、それを '標準カレンダーとするサンプル マクロです。 '春分の日、秋分の日の日付は "暦日大監 (新人物往来社 西澤宥綜 編著)" を参考にしました。 'また、2033年については閏11月を採用しました。 '********************************************************************* option base 1 Sub JPN_Holiday() Dim PublicHoliday(15) As Variant dim ph as variant '基本的な国民の祝日をテーブル形式で定義します。 PublicHoliday(1) = Array(1, 1, "元旦") PublicHoliday(2) = Array(1, 15, "成人の日") PublicHoliday(3) = Array(2, 11, "建国記念日") PublicHoliday(4) = Array(3, 21, "春分の日") '年によって日付が異なります PublicHoliday(5) = Array(4, 29, "みどりの日") PublicHoliday(6) = Array(5, 3, "憲法記念日") PublicHoliday(7) = Array(5, 4, "国民の祝日") PublicHoliday(8) = Array(5, 5, "子供の日") PublicHoliday(9) = Array(9, 15, "敬老の日") PublicHoliday(10) = Array(9, 21, "秋分の日") '年によって日付が異なります PublicHoliday(11) = Array(10, 10, "体育の日") PublicHoliday(12) = Array(11, 3, "文化の日") PublicHoliday(13) = Array(11, 23, "勤労感謝の日") PublicHoliday(14) = Array(12, 23, "天皇誕生日") PublicHoliday(15) = Array(7, 20, "海の記念日") For Each y In ActiveProject.Calendar.Years For i = 1 To 15 ph = PublicHoliday(i) m = ph(1) d = ph(2) Select Case ph(3) Case "春分の日" Select Case y Case 1984, 1988, 1992, 1993, 1996, 1997, 2000, 2001, 2004, 2005, 2008, 2009, 2012, 2013, 2016, 2017, 2020, 2021, 2024, 2025, 2026, 2028, 2029, 2030, 2032, 2033, 2034, 2036, 2037, 2038, 2040, 2041, 2042, 2044, 2045, 2046, 2048, 2049 d = 20 End Select Case "秋分の日" Select Case y Case 2012, 2016, 2020, 2024, 2032, 2036, 2040, 2044, 2045, 2048, 2049 d = 22 End Select End Select If (WeekDay(DateSerial(y, m, d)) = 1) Then '祝日が日曜日の場合は月曜日を振り替え休日に設定します d = d + 1 End If y.Months(m).Days(d).Working = False Next Next End Sub '********************************************************************* 'このマクロは土曜日を非稼働日に設定し、それを '標準カレンダーとするサンプル マクロです。 '********************************************************************* Sub JPN_NonSat() Dim Day1, Day2 As Date '日付用の変数として Day1 と Day2 を定義します。 Dim NewCalendarName, y, z  'テンポラリ用の変数を定義します。 '新規に作成するカレンダー名を定義します。 NewCalendarName = "JPN NonSaturday" '新規に作成するカレンダーを基本カレンダーとして定義します。 BaseCalendarCreate Name:=NewCalendarName '1995年1月1日から1998年12月31日(1460日)までのカレンダーで非稼働日を日曜日だけに定義します。 'Microsoft Project では カレンダーの例外指定が250までという制限があります。 ' 'y' はループ用のカウンタです。 Date1 = "1995/1/1 0:00" For y = 0 To 1460 Day1 = CDate(Date1) + y Day2 = Day1 & " 0:00" z = Day2 If (WeekDay(z) = 7) Then 'WeekDay 関数の戻り値 7 は土曜日に該当します。 BaseCalendarEditDays Name:=NewCalendarName, StartDate:=z, EndDate:=z, Working:=True End If Next 'カレンダー ビューでこのカレンダーを標準カレンダー(使用するカレンダー)として定義します。 ViewApply Name:="カレンダー(&C)" CalendarDateShading BaseCalendarName:=NewCalendarName ProjectSummaryInfo Calendar:=NewCalendarName 'ガントチャート ビューでこのカレンダーを標準カレンダー(使用するカレンダー)として定義します。 ViewApply Name:="ガント チャート(&G)" TimescaleNonWorking Calendar:=NewCalendarName End Sub