VBA代码忽略列中的所有#N / A值以计算平均值

时间:2016-12-18 04:18:51

标签: excel vba excel-vba

我正在寻找一个代码来忽略数据列中的所有#N / A值,并找到所有剩余单元格的平均值,并将此平均值返回到单元格。目前我有这个代码;如果所选数据范围不包含#N / A,则它有效,但如果有一些#N / A数据点,则整个平均值仅返回#N / A.

我也尝试过这段代码而无济于事(DateRange是用户在我的工作表中指定的日期范围,我想显示在单元格O5中返回的值):

Range("O5").Value = Worksheets("Sheet1").Range(DateRange).Formula = "=AVERAGE(IF(ISNUMBER(DateRange)),DateRange"

没有#N / A值的工作代码:

Dim DataPts As Range
Set DataPts = Range(FromDateCell, ToDateCell).Offset(0, 1)
Range("O5").Value = Application.Average(DataPts)

非常感谢提前。

2 个答案:

答案 0 :(得分:3)

我将面临被投票的风险并给你一个更简单但更方便的技巧来尝试:

=AVERAGEIF(myRange,"<1e100")

(如果您的范围内没有这么大的数字)。

答案 1 :(得分:1)

或者您可以使用SpecialCells()方法:

Range("O5").Formula = "=AVERAGE(" & range(DateRange).SpecialCells(xlCellTypeFormulas,xlNumbers).address & ")"

或者,如果您只需要而不是公式,则返回

Range("O5").Value=WorksheetFunction.Average(range(DateRange).SpecialCells(xlCellTypeFormulas,xlNumbers))