我有以下代码:
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”中的数据全部是“n / a”,则公式返回“N / A”,这是正确的。
答案 0 :(得分:3)
我只是在代码中将公式应用于单元格。这里有两种方法,一种是将公式放在activecell中,然后在其上“粘贴”为一个值,一种评估公式,然后将该值放入activecell:
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
答案 1 :(得分:0)
我找到了另一个问题的解决方案:
避免:
unable to get the average property of the worksheetfunction class
从公式中删除WorksheetFunction
。
就是这样。