Option Explicit
Sub CreateCalendar()
Dim lMonth As Long, lDays As Long, bTong As Byte
Dim strMonth As String, strAddress As String
Dim rStart As Range, rCell As Range
Dim Dat As Date
'Add new sheet and format'
Worksheets.Add: Application.ScreenUpdating = False
ActiveWindow.DisplayGridlines = False
With Cells
.ColumnWidth = 4: .Font.Size = 8
End With
'Create the Month headings'
For lMonth = 1 To 4
Select Case lMonth
Case 1
strMonth = "January": Set rStart = Range("A1")
Case 2
strMonth = "April": Set rStart = Range("A8")
Case 3
strMonth = "July": Set rStart = Range("A15")
Case 4
strMonth = "October": Set rStart = Range("A22")
End Select
'Merge, AutoFill and align months'
With rStart
.Value = strMonth: .HorizontalAlignment = xlCenter
.Interior.ColorIndex = 34: .Font.Bold = True
With .Range("A1:G1")
.Merge: .BorderAround LineStyle:=xlContinuous
End With
.Range("A1:G1").AutoFill Destination:=.Range("A1:U1")
End With
Next lMonth
'Pass ranges for months'
For lMonth = 1 To 12
strAddress = Choose(lMonth, "A2:G7", "H2:N7", "O2:U7", "A9:G14", "H9:N14", "O9:U14", _
"A16:G21", "H16:N21", "O16:U21", "A23:G28", "H23:N28", "O23:U28")
lDays = 0
Range(strAddress).BorderAround LineStyle:=xlContinuous
'Add dates to month range and format'
For Each rCell In Range(strAddress)
lDays = lDays + 1
Dat = DateSerial(Year(Date), lMonth, lDays)
If Month(Dat) = lMonth Then ' It's a valid date
With rCell
.Value = Dat
bTong = Sheets("data").Range("B" & lDays + 1) + Sheets("data").Range("C" _
& lDays + 1) + Sheets("data").Range("D" & lDays + 1)
If bTong < 80 Then
.Interior.ColorIndex = 33: .NumberFormat = "dd"
ElseIf bTong < 100 Then
.Interior.ColorIndex = 36: .NumberFormat = "dd "
ElseIf bTong > 99 Then
.Interior.ColorIndex = 39: .NumberFormat = "dd "
End If
End With
End If
Next rCell
Next lMonth
'add con formatting
With Range("A1:U28")
.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=TODAY()+1"
.FormatConditions(1).Font.ColorIndex = 3
End With
Range("B30:C30").Interior.ColorIndex = 33: Range("D30") = "Duoi 80"
Range("B32:C32").Interior.ColorIndex = 36: Range("D32") = "Duoi 100"
Range("B34:C34").Interior.ColorIndex = 39: Range("D34") = "Tren 99"
End Sub