У меня есть таблица («Ежемесячные часы») с несколькими сведениями о разных машинах разных клиентов, количество машинных часов в месяц, и я хотел бы иметь возможность сделать во второй таблице («проекция») сумму часы, специфичные для клиента и в течение определенного периода (период определяется в «проекции» в ячейках C1 и E1), по типу машин, затем по категории.
Первая таблица «Месячные часы», из которой извлекаются данные
Вторая таблица «Проекция», куда данные копируются в
Я хочу сделать эти вычисления в VBA, потому что таблицы могут регулярно обновляться, и использование формул в Excel для этого нецелесообразно.
Однако, не будучи экспертом в VBA, я понимаю, что могу использовать архаичный метод.
Я использую суммы для вычисления сумм по желаемым критериям, но я понимаю две проблемы:
- Здесь рассчитывается сумма только за месяц начала периода (здесь, март 2018 г.), а не за весь период.
- Я могу получить только сумму данных для первого критерия «тип машины», но не для второго критерия «категория»
Строка кода, относящаяся к моим суффиксам, выделена красным цветом в приведенном ниже коде
Заранее благодарю за помощь
Sub test()
'
' test Macro
'
'
Dim i, j, mons, monsend, years, yearend, colstart, colend, nbrcolsumif, yeartest As Integer
Dim condition As Range
Dim startdate, enddate As Date
col = 14
colstart = 14
colend = 14
startdate = Sheets("Projection").Cells(1, 3) ' date de début de la periode voulue
enddate = Sheets("Projection").Cells(1, 5) ' date de fin de la periode voulue
mons = Month(startdate)
years = year(startdate)
monsend = Month(enddate)
yearend = year(enddate)
Sheets("Monthly Hours").Activate
Do While (years <> year(Sheets("Monthly Hours").Cells(4, colstart).value) Or mons <> Month(Sheets("Monthly Hours").Cells(4, colstart).value))
colstart = colstart + 1
Loop
While (yearend <> year(Sheets("Monthly Hours").Cells(4, colend).value) Or monsend <> Month(Sheets("Monthly Hours").Cells(4, colend).value))
colend = colend + 1
Wend
i = 3
j = 2
While Not IsEmpty(Sheets("Projection").Cells(2, j))
While Not IsEmpty(Sheets("Projection").Cells(i, 1))
nbrcolsumif = colend - colstart
Sheets("Projection").Cells(i, j).value = Application.WorksheetFunction.SumIfs(Sheets("Monthly Hours").Range(Cells(5, colstart), Cells(1048576, colend)), Sheets("Monthly Hours").Range(Cells(5, 4), Cells(1048576, 4 + nbrcolsumif)), Sheets("Projection").Cells(i, 1), Sheets("Monthly Hours").Range(Cells(5, 1), Cells(1048576, 1 + nbrcolsumif)), Sheets("Projection").Cells(2, j))
i = i + 1
Wend
j = j + 1
i = 3
Wend
End Sub