Почему моя функция VBA SUMIFS возвращает нули? - PullRequest
0 голосов
/ 05 февраля 2019

Во-первых, позвольте мне поблагодарить вас за любую помощь, которую вы можете оказать мне.Я ценю его!(:

Моя проблема заключается в следующем: у меня есть две рабочие книги, одна с необработанными данными и одна, в которой необработанные данные объединены в соответствующие статистические данные. Я пытаюсь суммировать данные в формате X: X в моем необработанном видекнигу данных (6620) по двум критериям в книге результатов, а затем обновите значение в соответствующей ячейке в книге результатов.

Проблема в том, что макрос возвращает все нули. Я дважды проверил типы данных,имена, диапазоны и т. д., но не повезло. Оставляю меня думать, что в моем коде есть что-то нехорошее.

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

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 голосов
/ 05 февраля 2019

Вам не нужно так много вложенных циклов.Ваш оригинальный код просматривает все возможные критерии для каждого k и l.Предполагая, что wb_b.Cells(k, l) является ссылкой на ячейку, пересекаемую вашим столбцом месяца и строкой имени сотрудника, вы можете использовать значения i и j.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...