vba sumifs-从一个表到另一个表的多标准和

时间:2018-09-13 13:07:44

标签: vba multidimensional-array sumifs

我有一个表(“每月小时数”),其中包含有关不同客户的不同机器的若干信息,每月要完成的机器小时数,我希望在第二个表(“投影”)中得出客户的特定小时数和给定时间段(该时间段在单元格C1和E1中的“投影”中定义),按机器类型,然后按类别。

从中提取数据的第一个表“每月小时数” 1

将数据复制到的第二个表“投影” 2

我想在VBA中进行这些计算,因为这些表可能会定期更新,并且在excel中使用公式并不实际。

但是,我不是VBA专家,但我意识到我可能正在使用一种过时的方法。

我使用sumifs来计算所需的总和,但是我意识到了两个问题:

  1. 这仅计算期间开始月份(此处为2018年3月)的总和,而不是整个期间。
  2. 我只能获取第一个条件“机器类型”的数据总和,而不能获取第二个条件“类别”的数据之和。

与我的sumif相关的代码行在下面的代码中为红色

预先感谢您的帮助

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

0 个答案:

没有答案