Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何避免“平均”IF#DIV/0!使用VBA_Vba_Excel - Fatal编程技术网

如何避免“平均”IF#DIV/0!使用VBA

如何避免“平均”IF#DIV/0!使用VBA,vba,excel,Vba,Excel,我有以下代码: Sheet1.Range("AB3").Value = Application.WorksheetFunction.AverageIfs( _ .Range("AB5:AB" & CStr(i)), _ .Range("AB5:AB" & CStr(i)), _ ">=

我有以下代码:

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")
为了避免这种情况,我尝试了以下方法:

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")
Sheet1.Range(“AB3”).Value=Application.WorksheetFunction.IfError(_
Application.WorksheetFunction.AverageIfs(_
.范围(“AB5:AB”和CStr(i))_
.范围(“AB5:AB”和CStr(i)),“>=0”_
.范围(“AB5:AB”和CStr(i))、“不适用”、“不适用”)
但是没有运气。任何帮助都将不胜感激

编辑:

在excel中它可以正常工作,但在vba中不能(在代码隐藏中)

只需在excel中进行一点测试,即可正常工作:

=IFERROR(AVERAGEIFS(AF5:AF10,AF5:AF10,"<>n/a"),"N/A")
=IFERROR(平均值(AF5:AF10,AF5:AF10,“不适用”),“不适用”)

在上面的公式中,如果“AF5:AF10”范围内的数据都是“n/a”,则公式返回“n/a”,这是正确的。

我只将公式应用于代码中的单元格。这里有两种方法,一种是将公式放入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()
我想我会坚持多久
i=10
表1.范围(“AB3”).公式=“=IFERROR(平均值(AF5:AF”和CStr(i)和AF5:AF”和CStr(i)和“,”不适用“,”不适用“)”
表1.范围(“B3”).值=表1.范围(“AB3”).值
端接头
子测试2()
作为字符串的Dim strFormula
我想我会坚持多久
i=10
strFormula=“=IFERROR(平均值(AF5:AF”和CStr(i)和AF5:AF”和CStr(i)和“,”不适用“,”不适用“)
表1.范围(“AB3”)。值=应用程序。评估(标准公式)
端接头

我找到了问题的另一个解决方案:

为避免出现以下情况:

unable to get the average property of the worksheetfunction class
只需从公式中删除
WorksheetFunction


就是这样。

你能更清楚地说一下Excel中的
吗?它可以工作
?你期望哪种配方?你打算怎么做?请参考上面编辑的,Thx没有回答问题(!),但请注意AVERAGEIFS会忽略N/A之类的文本值,所以你不需要明确排除-这个公式应该足够了
=AVERAGEIF(AF5:AF10,“>=0”)
@barryhoudini我不知道,谢谢你的提示。我仍然有
无法获得worksheetfunction类的平均属性
我想这与公式本身有关,而不是结果分配给单元格的方式。我建议的两段代码中都没有“worksheetfunction”。您是否完全按照上述方式使用代码?我会对“worksheetfunction”执行Ctrl-F并确保您将其删除。如果我不将Application.worksheetfunction放在特定函数之前,则我有:
Compile error:Sub或function not defined
在我提供的示例中没有“特定函数”。你能试着运行代码吗?它们是独立的示例,旨在向您展示如何处理代码中的问题。谢谢您帮助我Doug,但是我能说什么,如果我删除了Application.WorksheetFunction,那么我会得到上面的错误。我不知道,根据Chip Pearson的这篇文章,可能是我的excel[2007]版本,删除WorksheetFunction需要更明确地测试错误:。查找“工作表函数的错误处理”部分。要点是:“如果确实包含WorksheetFunction属性,错误将显示为运行时错误……如果不包含WorksheetFunction属性,则必须将结果变量声明为变量类型,并使用IsError函数测试该变量。”
unable to get the average property of the worksheetfunction class