如何避免averageifs#DIV / 0! 使用VBA

我有下面的代码:

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 ,所以我得到以下错误:

无法获得工作表function类的平均属性

为了避免这种情况我尝试过

 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中做一个小testing就可以正常工作:

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

在上述公式中,如果范围“AF5:AF10”中的数据全部为“n / a”,则公式返回“N / A”,这是正确的。

我只是将公式应用到代码中的单元格。 这里有两种方法,一种是将公式放入活动单元格中,然后将其粘贴为一个值,一个评估公式,然后将该值放入活动单元格中:

 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 

我发现了另一个解决我的问题:

避免:

 unable to get the average property of the worksheetfunction class 

只需从公式中删除WorksheetFunction

而已。