我有下面的代码:如何避免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
,所以我发现了以下错误:
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”,这是正确的。
你可以更清楚'在Excel中它工作吗?你期望哪个公式?你打算做什么? – JMax 2012-04-03 19:55:45
请参考上面编辑thx – Somebody 2012-04-03 20:00:06
不回答问题(!),但请注意,AVERAGEIFS将忽略文本值,如N/A,所以你不需要明确排除 - 这个公式应该足够了= = AVERAGEIF(AF5:AF10 ,“> = 0”)' – 2012-04-03 20:05:57