как избежать усреднения # DIV / 0!используя VBA - PullRequest
1 голос
/ 03 апреля 2012

У меня есть следующий код:

Sheet1.Range("AB3").Value = Application.WorksheetFunction.AverageIfs( _
                                .Range("AB5:AB" & CStr(i)), _
                                .Range("AB5:AB" & CStr(i)), _
                                ">=0", .Range("AB5:AB" & CStr(i)), "<>N/A")

Чтобы получить среднее значение диапазона и исключить значения -ve и N/A, но есть момент, когда весь диапазон равен N/A,поэтому я получаю следующую ошибку:

unable to get the average property of the worksheetfunction class

Чтобы избежать этого, я попробовал это:

Sheet1.Range("AB3").Value = Application.WorksheetFunction.IfError( _
                                Application.WorksheetFunction.AverageIfs( _
                                .Range("AB5:AB" & CStr(i)), _
                                .Range("AB5:AB" & CStr(i)), ">=0", _
                                .Range("AB5:AB" & CStr(i)), "<>N/A"), "N/A")

Но безуспешно.Любая помощь будет оценена.

РЕДАКТИРОВАТЬ:

В Excel это работает нормально, но не в VBA (в коде позади)

Просто сделать небольшой тест в Excel этоотлично работает:

=IFERROR(AVERAGEIFS(AF5:AF10,AF5:AF10,"<>n/a"),"N/A")

в приведенной выше формуле, если все данные в диапазоне «AF5: AF10» равны «н / д», формула возвращает «Н / Д», что является правильным.

Ответы [ 2 ]

3 голосов
/ 04 апреля 2012

Я бы просто применил формулу к ячейке в коде. Вот два способа, один из которых помещает формулу в активную ячейку, а затем «вставляет» ее как значение, а другой - вычисляет формулу и затем помещает это значение в активную ячейку:

Sub Test1()
Dim i As Long

i = 10
Sheet1.Range("AB3").Formula = "=IFERROR(AVERAGEIFS(AF5:AF" & CStr(i) & ",AF5:AF" & CStr(i) & ",""<>n/a""),""N/A"")"
Sheet1.Range("B3").Value = Sheet1.Range("AB3").Value
End Sub

Sub Test2()
Dim strFormula As String
Dim i As Long

i = 10
strFormula = "=IFERROR(AVERAGEIFS(AF5:AF" & CStr(i) & ",AF5:AF" & CStr(i) & ",""<>n/a""),""N/A"")"
Sheet1.Range("AB3").Value = Application.Evaluate(strFormula)
End Sub
0 голосов
/ 04 апреля 2012

Я нашел другое решение моего вопроса:

, чтобы избежать:

unable to get the average property of the worksheetfunction class

просто удалите WorksheetFunction из формулы.

Вот и все.

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