Функция SUMIF в VBA работает неправильно - PullRequest
2 голосов
/ 13 июня 2011
Public Function GRIDSALES(rev_date As Date, grid_date As Date) As Variant

      Application.Volatile (True)

               Set Final_Price = Sheets("KRONOS").Range("$H:$H")
               Set Team = Sheets("KRONOS").Range("$DO:$DO")
               Set First_PD = Sheets("KRONOS").Range("$Q:$Q")

                GRIDSALES1 = Application.WorksheetFunction.SumIfs( _
                              Final_Price _
                              , Team, "<>9" _
                             , First_PD, ">=" & rev_date, First_PD, "<=EoMonth(" & grid_date & ")")

       End Function

Код VBA, приведенный выше, соответствует без ошибок, но не генерирует ответ.Я пытаюсь создать UDF, который суммирует окончательную цену для всех отделов продаж (кроме команды 9) между двумя датами rev_date и grid_date.Чего мне не хватает?

Ответы [ 2 ]

2 голосов
/ 13 июня 2011

Несмотря на «жесткий код», объективный диапазон значений sumif (antipattern?) 1 в GRIDSALES1 и "<=EoMonth(" вместо Application.WorksheetFunction.EoMonth(grid_date, 0) означает, что у sunifs двойные результаты:

Function ASALES(rev_date As Date, grid_date As Date) As Double

Dim Final_Price As Range
Dim Team As Range
Dim First_PD As Range
Application.Volatile (True)

Set Final_Price = Sheets("Sheet1").Range("H5:$H11")
Set Team = Sheets("Sheet1").Range("E5:E11")
Set First_PD = Sheets("Sheet1").Range("F5:F11")

ASALES = Application.WorksheetFunction.SumIfs( _
    Final_Price _
    , Team, "<>9" _
    , First_PD, ">=" & rev_date _
    , First_PD, "<=" & Application.WorksheetFunction.EoMonth(grid_date, 0))


End Function
1 голос
/ 13 июня 2011

Ваш вывод должен быть именем функции. Измените GRIDSALES1 на GRIDSALES.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...