Public Sub expenses_utilit(mon As Range, year As Range, per As Range, vvod As Range, data_sales As Range, utilit As Range)
Dim x(12) As String
Dim m As Integer
Dim i As Integer
Dim l As Integer
Dim j As Integer
Dim k As Integer
Dim cnt As Integer
Dim rost_sal As Integer
Dim y As Integer
Dim revenue(2) As Single
revenue(0) = 0
revenue(1) = 0
y = year.Value
x(0) = "Январь"
x(1) = "Февраль"
x(2) = "Март"
x(3) = "Апрель"
x(4) = "Май"
x(5) = "Июнь"
x(6) = "Июль"
x(7) = "Август"
x(8) = "Сентябрь"
x(9) = "Октябрь"
x(10) = "Ноябрь"
x(11) = "Декабрь"
n = UBound(x)
For i = 0 To n - 1
If x(i) = mon.Value Then
m = i
End If
Next
k = n - m + n * (per.Value - 1)
cnt = m
index_infl = 0
H = 4
Do While k > 0
If (k <= n - m + n * (per.Value - 1) - data_sales.Value + 1) Then
utilit.FormulaR1C1 = "=R[1]C*R[2]C*Initial!R25C5"
With utilit
.NumberFormat = "#,##0"
.Interior.ColorIndex = 15
.Font.Name = "Times New Roman"
.Font.Size = 10
End With
revenue(0) = revenue(0) + utilit
If (vvod.Value = "Год") Then
Columns(H).Hidden = True
Else
Columns(H).Hidden = False
End If
Else
utilit.Formula = "0"
With utilit
.NumberFormat = "#,##0"
.Interior.ColorIndex = 15
.Font.Name = "Times New Roman"
.Font.Size = 10
End With
energy.Formula = "0"
With energy
.NumberFormat = "#,##0"
.Interior.ColorIndex = 2
.Font.Name = "Times New Roman"
.Font.Size = 10
End With
If (vvod.Value = "Год") Then
Columns(H).Hidden = True
Else
Columns(H).Hidden = False
End If
End If
Set utilit = utilit.Offset(0, 1)
cnt = cnt + 1
If cnt >= n Then
H = H + 1
cnt = 0
utilit = revenue(0)
With utilit
.NumberFormat = "#,##0"
.Interior.ColorIndex = 15
.Font.Name = "Times New Roman"
.Font.Size = 10
End With
revenue(0) = 0
y = y + 1
Set utilit = utilit.Offset(0, 1)
End If
k = k - 1
H = H + 1
Loop
For l = k + 1 To 7 * 12
utilit.Clear
With utilit
.Interior.ColorIndex = 2
End With
Set utilit = utilit.Offset(0, 1)
Next
End Sub
Вот код программы. В зависимости от заданных параметров выводит структуру по месяцам или по годам. Это издержки(затраты). В первой строчке у меня зарплаты - с января и 48 мес - выводятся зарплаты. Во второй строчке - оборудование тоже, самое, только там уже нужна формула(не ссылка на зп, как в первом случае).
Получается, что для всех нужных строк будет одинаковый код, кроме самой формулы:
utilit.FormulaR1C1 = "=R[1]C*R[2]C*Initial!R25C5"
В аргументе Sub формула не передается(либо я синтаксис плохо знаю), была идея рассчитать формулы и значения вписать в другие строки(скрытые), а потом просто передавать на формулу, а только значение ячейки - может можно проще все сделать?