Sub CreateReportTable()
Dim ws As Worksheet
Dim i As Integer
Dim months As Variant, plans As Variant, facts As Variant
' Создаем новый лист или очищаем текущий
Set ws = ActiveSheet
ws.Cells.Clear
' Массивы с данными
months = Array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь")
plans = Array(7800, 3560, 8900, 5460, 6570, 6540, 4900, 7890, 6540, 6540, 6540, 8900)
facts = Array(8500, 2700, 7800, 4590, 7650, 5670, 5430, 8700, 6500, 6570, 6520, 10000)
' --- ШАПКА ТАБЛИЦЫ ---
ws.Range("A1") = "№"
ws.Range("B1") = "Месяц"
ws.Range("C1") = "Отчетный год"
ws.Range("C1:E1").Merge
ws.Range("F1") = "Отклонение от плана"
ws.Range("F1:F2").Merge
ws.Range("C2") = "план, р."
ws.Range("D2") = "фактически, р."
ws.Range("E2") = "выполнение, %"
ws.Range("B3") = "Mi"
ws.Range("C3") = "Pi"
ws.Range("D3") = "Fi"
ws.Range("E3") = "Vi"
ws.Range("F3") = "Oi"
' --- ЗАПОЛНЕНИЕ ДАННЫМИ И ФОРМУЛАМИ ---
For i = 0 To 11
ws.Cells(i + 4, 1) = i + 1
ws.Cells(i + 4, 2) = months(i)
ws.Cells(i + 4, 3) = plans(i)
ws.Cells(i + 4, 4) = facts(i)
' Формула выполнения (Факт / План)
ws.Cells(i + 4, 5).Formula = "=D" & (i + 4) & "/C" & (i + 4)
' Формула отклонения (Факт - План)
ws.Cells(i + 4, 6).Formula = "=D" & (i + 4) & "-C" & (i + 4)
Next i
' --- ИТОГИ (МАКСИМУМ И СРЕДНЕЕ) ---
ws.Range("D16") = "Максимум"
ws.Range("D17") = "Среднее"
ws.Range("C16").Formula = "=MAX(C4:C15)"
ws.Range("D16").Formula = "=MAX(D4:D15)"
ws.Range("E16").Formula = "=MAX(E4:E15)"
ws.Range("F16").Formula = "=MAX(F4:F15)"
ws.Range("C17").Formula = "=AVERAGE(C4:C15)"
ws.Range("D17").Formula = "=AVERAGE(D4:D15)"
ws.Range("E17").Formula = "=AVERAGE(E4:E15)"
ws.Range("F17").Formula = "=AVERAGE(F4:F15)"
' --- ОФОРМЛЕНИЕ (ФОРМАТИРОВАНИЕ) ---
With ws.Range("A1:F17")
.Borders.LineStyle = xlContinuous ' Рамки
.HorizontalAlignment = xlCenter ' Выравнивание по центру
.VerticalAlignment = xlCenter ' Выравнивание по высоте
End With
' Жирный шрифт для шапки и итогов
ws.Range("A1:F3").Font.Bold = True
ws.Range("D16:D17").Font.Bold = True
' Выравнивание месяцев по левому краю
ws.Range("B4:B15").HorizontalAlignment = xlLeft
' Формат чисел (рубли для C, D, F столбцов)
ws.Range("C4:D15, F4:F15, C16:D17, F16:F17").NumberFormat = "# ##0.00"" р."""
' Формат чисел (проценты для E)
ws.Range("E4:E15, E16:E17").NumberFormat = "0.00%"
' Автоподбор ширины столбцов
ws.Columns("A:F").AutoFit
ws.Rows("1:3").RowHeight = 30 ' Высота шапки
MsgBox "Таблица успешно создана и оформлена!", vbInformation
End Sub