vba sumifs - многокритериальная сумма из одной таблицы в другую - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть таблица («Ежемесячные часы») с несколькими сведениями о разных машинах разных клиентов, количество машинных часов в месяц, и я хотел бы иметь возможность сделать во второй таблице («проекция») сумму часы, специфичные для клиента и в течение определенного периода (период определяется в «проекции» в ячейках C1 и E1), по типу машин, затем по категории.

Первая таблица «Месячные часы», из которой извлекаются данные 1

Вторая таблица «Проекция», куда данные копируются в 2

Я хочу сделать эти вычисления в VBA, потому что таблицы могут регулярно обновляться, и использование формул в Excel для этого нецелесообразно.

Однако, не будучи экспертом в VBA, я понимаю, что могу использовать архаичный метод.

Я использую суммы для вычисления сумм по желаемым критериям, но я понимаю две проблемы:

  1. Здесь рассчитывается сумма только за месяц начала периода (здесь, март 2018 г.), а не за весь период.
  2. Я могу получить только сумму данных для первого критерия «тип машины», но не для второго критерия «категория»

Строка кода, относящаяся к моим суффиксам, выделена красным цветом в приведенном ниже коде

Заранее благодарю за помощь

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
...