横型カレンダーからボックス型カレンダーを作成する:Excel VBA入門 |
スポンサードリンク | |
Sub calendar_box() Dim sh1 As Worksheet Dim sh2 As Worksheet Dim i As Integer, j As Integer Dim myData Dim cntWDay As Integer, cntWeek As Integer Dim myPs Dim cntMonth As Integer Dim youbi, saijitu, hiduke, tuki Set sh1 = Worksheets("チェックカレンダー") Set sh2 = Worksheets("年間カレンダー") myData = sh1.Range("E6:AI53").Value 'カレンダーの表示位置を指定 myPs = Array("C6", "N6", "Y6", "C22", "N22", "Y22", "C38", "N38", "Y38", "C54", "N54", "Y54") 'セル範囲をクリアしています sh2.Range("B1:AE84").ClearFormats sh2.Range("B1:AE84").ClearContents For i = 1 To 45 Step 4 cntMonth = cntMonth + 1 '1か月単位でデータをboxに入れる Dim box(1 To 12, 1 To 7) For j = 1 To 31 If j = 1 Then cntWDay = Weekday(myData(i, j)) cntWeek = 1 '各月の1行目のデータをboxに入れる box(cntWeek, cntWDay) = myData(i, j) '各月の3行目のデータをboxに入れる box(cntWeek + 1, cntWDay) = myData(i + 2, j) Else '日曜になると2行下に移るためにカウントアップする If Weekday(myData(i, j)) = 1 Then cntWeek = cntWeek + 2 End If If myData(i, j) <> "" Then cntWDay = Weekday(myData(i, j)) box(cntWeek, cntWDay) = myData(i, j) box(cntWeek + 1, cntWDay) = myData(i + 2, j) End If End If ' 表示する月を最初の日にちの月にしています。' If myData(i, 1) = 0 Then tuki = "" Else tuki = Month(myData(i, 1)) End If Next j sh2.Range(myPs(cntMonth - 1)).Resize(12, 7).Value = box sh2.Range(myPs(cntMonth - 1)).Resize(12, 7).NumberFormatLocal = "d" ’セルの表示形式を"d"に設定しています Erase box sh2.Range(myPs(cntMonth - 1)).Offset(-2, -1).Value = tuki & "月" '月の表示です Next i '曜日の設定&着色 youbi = Array("日", "月", "火", "水", "木", "金", "土") For i = 0 To UBound(myPs) For j = 0 To 6 sh2.Range(myPs(i)).Offset(-1, j).Value = youbi(j) Next j Next i ’土日の色付け(土日をチェックしています) For i = 0 To UBound(myPs) For j = 0 To 6 If sh2.Range(myPs(i)).Offset(-1, j).Value = youbi(0) Then sh2.Range(myPs(i)).Offset(-1, j).Resize(13, 1).Font.ColorIndex = 3 ElseIf sh2.Range(myPs(i)).Offset(-1, j).Value = youbi(6) Then sh2.Range(myPs(i)).Offset(-1, j).Resize(13, 1).Font.ColorIndex = 5 End If Next j Next i ’祝日の色付け(祝日を総当たりでチェックしています) Dim k As Long saijitu = Worksheets("祝日").Range("A1:A84").Value hiduke = sh2.Range("A1:AE65").Value For i = 1 To 65 For j = 1 To 31 For k = 1 To 84 If hiduke(i, j) = saijitu(k, 1) Then sh2.Cells(i, j).Font.ColorIndex = 7 End If Next k Next j Next i End Sub |
スポンサードリンク
PageViewCounter
Since2006/2/27