为什么我的VBA SUMIFS函数返回零?

时间:2019-02-05 19:12:19

标签: excel vba

首先,请允许我感谢您为我提供的任何帮助。我很感激! (:

我的问题是:我有两本工作簿,一本包含原始数据,另一本中将原始数据合并到相关统计信息中。我试图通过结果簿中的两个条件对原始数据工作簿(6620)中X:X中的数据进行SUMIFS,然后更新结果簿中相应单元格中的值。

问题是宏返回全零。我仔细检查了数据类型,名称,范围等,但是没有运气。让我觉得我的代码有些奇怪。

在本示例原始数据和结果表的结尾处,我包括了两张照片,以便您了解我的工作。

Sub ImportFTEs()

    Application.ScreenUpdating = False
    Application.EnableEvents = False

        Dim ws As Integer

        Workbooks.Open Filename:=ActiveWorkbook.Path & "\6620\FY19*.xlsb"
            For ws = 1 To Worksheets.Count
                Sheets(ws).Name = "Sheet1"
            Next ws

        Dim i As Integer
        Dim j As Integer
        Dim k As Integer
        Dim l As Integer
        Dim totalFTE As Long
        Dim lastRow As Integer
            lastRow = Cells(Rows.Count, "D").End(xlUp).Row
        Dim wb_a As Worksheet
            Set wb_a = Workbooks.Open(ActiveWorkbook.Path & "\FY19*.xlsb").Sheets("Sheet1")
        Dim wb_b As Worksheet
            Set wb_b = ThisWorkbook.Sheets("B")
        Dim sumRange As Range
            Set sumRange = wb_a.Range("X:X")
        Dim cRange1 As Range
            Set cRange1 = wb_a.Range("D:D")
        Dim criteria1 As Range
        Dim cRange2 As Range
            Set cRange2 = wb_a.Range("S:S")
        Dim criteria2 As Range
            For k = 8 To 18
                For l = 7 To 18
                    For i = 7 To 18
                    Set criteria1 = wb_b.Cells(7, i)
                        For j = 8 To 18
                        Set criteria2 = wb_b.Cells(j, 6)
                            wb_b.Cells(k, l).value = Application.WorksheetFunction.SumIfs(sumRange, cRange1, criteria1, cRange2, criteria2)
                        Next j
                    Next i
                Next l
            Next k
    ActiveWorkbook.Close savechanges:=True

    Application.ScreenUpdating = True
    Application.EnableEvents = True

End Sub    

Raw Data Table

Results Table

1 个答案:

答案 0 :(得分:4)

您不需要太多的嵌套循环。您的原始代码正在遍历每个kl的所有可能条件。假设wb_b.Cells(k, l)是对月份列和员工姓名行相交的单元格的引用,则可以使用ij值。

For i = 7 To 18
    Set Criteria1 = wb_b.Cells(7, i)
    For j = 8 To 18
        Set Criteria2 = wb_b.Cells(j, 6)
        wb_b.Cells(j, i).Value = Application.WorksheetFunction.SumIfs(sumRange, cRange1, Criteria1, cRange2, Criteria2)
    Next j
Next i