カレンダーの土・日・祝日の文字を変更するプログラム。
祝日の定義のシート。
<祝日の定義>
祝日名 | 月 | 日 | 指定週 | 指定曜日 | 説明 |
元日 | 1 | 1 | 年のはじめを祝う。 | ||
成人の日 | 1 | 2 | 2 | 1月の第2月曜日。おとなになったことを自覚し、みずから生き抜こうとする青年を祝いはげます。 | |
建国記念の日 | 2 | 11 | 建国をしのび、国を愛する心を養う。 | ||
天皇誕生日 | 2 | 23 | 天皇の誕生日を祝う。 | ||
春分の日 | 3 | 21 | 自然をたたえ、生物をいつくしむ。 | ||
昭和の日 | 4 | 29 | 激動の日々を経て、復興を遂げた昭和の時代を顧み、国の将来に思いをいたす。 | ||
憲法記念日 | 5 | 3 | 日本国憲法の施行を記念し、国の成長を期する。 | ||
みどりの日 | 5 | 4 | 自然に親しむとともにその恩恵に感謝し、豊かな心をはぐくむ。 | ||
こどもの日 | 5 | 5 | こどもの人格を重んじ、こどもの幸福をはかるとともに、母に感謝する。 | ||
海の日 | 7 | 3 | 2 | 7月の第3月曜日。海の恩恵に感謝するとともに、海洋国日本の繁栄を願う。 | |
山の日 | 8 | 11 | 山に親しむ機会を得て、山の恩恵に感謝する。 | ||
敬老の日 | 9 | 3 | 2 | 9月の第3月曜日。多年にわたり社会につくしてきた老人を敬愛し、長寿を祝う。 | |
秋分の日 | 9 | 23 | 祖先をうやまい、なくなった人々をしのぶ。 | ||
スポーツの日 | 10 | 2 | 2 | 10月の第2月曜日。スポーツを楽しみ、他者を尊重する精神を培うとともに、健康で活力ある社会の実現を願う。 | |
文化の日 | 11 | 3 | 自由と平和を愛し、文化をすすめる。 | ||
勤労感謝の日 | 11 | 23 | 勤労をたっとび、生産を祝い、国民たがいに感謝しあう。 |
<プログラム>
'/////////////////////////////////////////
'// 祝日
'/////////////////////////////////////////
Option Explicit
'/****************************************
'/* 独自定数
'/****************************************
Private Const dayFormat = "00"
'Private Const dateFormat = "YYYY/MM/DD"
'Private Const flgOn = "1"
'Private Const flgOff = "0"
'列番号
Private Const weekNameHColNum = 1
Private Const monthHColNum = 2
Private Const dayHColNum = 3
Private Const weekCntHColNum = 4
Private Const weekHColNum = 5
'/****************************************
'/* 独自変数
'/****************************************
'Dim transferFlg As String
'Dim weekCnt As Integer
Dim wArrayDay(31) As Integer
Dim wArrayHoliday() As Variant
'/****************************************
'/* 祝日チェック&セット
'/****************************************
Public Sub checkAndSetHoliday(wIdx1 As Integer, wWeekNo As Integer, sheetName As String)
'祝日取得
Call getHoliday(Worksheets(sheetName).Cells(startRowNum, monthColNumOri).Value)
Dim i As Integer
For i = LBound(wArrayHoliday) To UBound(wArrayHoliday)
If wArrayHoliday(i, 0) <> 0 Then
'休日は赤文字
If wArrayHoliday(i, 1) = Format(wIdx1, "#") Then
If wWeekNo = 1 Then
'日付固定の休日(日曜日の場合、翌日)
Worksheets(sheetName).Cells(dataDaysRowNumOri - 1, dataWorkStartColNumOri + wIdx1 - 1) = wArrayHoliday(i, 4)
Worksheets(sheetName).Cells(dataDaysRowNumOri - 1, (dataWorkStartColNumOri + wIdx1 - 1) + 1) = "振替"
Worksheets(sheetName).Cells(dataDaysRowNumOri, (dataWorkStartColNumOri + wIdx1 - 1) + 1).Font.Color = RGB(colorNumber255, 0, 0)
Worksheets(sheetName).Cells(dataWeekRowNumOri, (dataWorkStartColNumOri + wIdx1 - 1) + 1).Font.Color = RGB(colorNumber255, 0, 0)
transferFlg = flgOn
Else
'日付固定の休日(日曜日以外の場合)
If Worksheets(sheetName).Cells(dataDaysRowNumOri - 1, dataWorkStartColNumOri + wIdx1 - 1) <> "" Then
'日付固定の連休(GWなどの場合)
Worksheets(sheetName).Cells(dataDaysRowNumOri - 1, (dataWorkStartColNumOri + wIdx1 - 1) + 1) = "振替"
Worksheets(sheetName).Cells(dataDaysRowNumOri, (dataWorkStartColNumOri + wIdx1 - 1) + 1).Font.Color = RGB(colorNumber255, 0, 0)
Worksheets(sheetName).Cells(dataWeekRowNumOri, (dataWorkStartColNumOri + wIdx1 - 1) + 1).Font.Color = RGB(colorNumber255, 0, 0)
transferFlg = flgOn
End If
Worksheets(sheetName).Cells(dataDaysRowNumOri - 1, dataWorkStartColNumOri + wIdx1 - 1) = wArrayHoliday(i, 4)
Worksheets(sheetName).Cells(dataDaysRowNumOri, dataWorkStartColNumOri + wIdx1 - 1).Font.Color = RGB(colorNumber255, 0, 0)
Worksheets(sheetName).Cells(dataWeekRowNumOri, dataWorkStartColNumOri + wIdx1 - 1).Font.Color = RGB(colorNumber255, 0, 0)
End If
ElseIf wArrayHoliday(i, 1) = 0 And wArrayHoliday(i, 2) = weekCnt And wArrayHoliday(i, 3) = wWeekNo Then
'第●週の休日
Worksheets(sheetName).Cells(dataDaysRowNumOri - 1, dataWorkStartColNumOri + wIdx1 - 1) = wArrayHoliday(i, 4)
Worksheets(sheetName).Cells(dataDaysRowNumOri, dataWorkStartColNumOri + wIdx1 - 1).Font.Color = RGB(colorNumber255, 0, 0)
Worksheets(sheetName).Cells(dataWeekRowNumOri, dataWorkStartColNumOri + wIdx1 - 1).Font.Color = RGB(colorNumber255, 0, 0)
End If
End If
Next i
End Sub
'/****************************************
'/* 対象月の祝日取得
'/* ※祝日が変わった場合は、祝日シートの記載を変更するだけ。PGは修正不要。
'/****************************************
Private Sub getHoliday(targetMonth As Integer)
'表示&保護解除
Worksheets(holidaySheet).Visible = True
Worksheets(holidaySheet).Select
Worksheets(holidaySheet).Unprotect
Dim wHoliday As String
Dim wCnt As Integer
Dim wWeek As String
Dim i As Long
maxRowNum = getLastRowOrColNum(holidaySheet, startColNum, flgOff)
ReDim wArrayHoliday(maxRowNum, 5) As Variant
For i = 2 To maxRowNum
'表示月
If targetMonth = Cells(i, monthHColNum).Value Then
'祝日
wArrayHoliday(i - 2, 0) = Cells(i, monthHColNum).Value
wArrayHoliday(i - 2, 1) = Cells(i, dayHColNum).Value
wArrayHoliday(i - 2, 2) = Cells(i, weekCntHColNum).Value
wArrayHoliday(i - 2, 3) = Cells(i, weekHColNum).Value
wArrayHoliday(i - 2, 4) = Cells(i, weekNameHColNum).Value
End If
Next i
'保護&非表示
Call protectAndHiddenSheet(holidaySheet, CreateWorkTableSheet)
End Sub