如何排除#VALUE!或#DIV / 0!在使用VBA计算平均值的列中

时间:2018-05-22 10:01:04

标签: vba excel-vba error-handling average excel

我有一种情况来计算列的平均值(此列包含许多带有数字的行,有些行带有#DIV/0!#VALUE!)。

我有一个用于计算平均函数的宏。如果它的数字是满的,那么它很容易计算列的平均值,但是如果单元格中有一些#VALUE!#DIV/0!。然后它返回空白单元格。如何排除#VALUE!#DIV/0!错误,并仅取数字的平均值。

我有超过5K的文件来计算平均值。

Private Function data As Boolean
    Dim Avg_velocity  As String
    Dim Avg_length As String
    Avg_velocity  = Application.WorksheetFunction.Average(Sheets("Data").Range("K5:K650"))
    Avg_length  = Application.WorksheetFunction.Average(Sheets("Data").Range("I7:I607"))

    Sheets("Log").Range("A2:AI2").Insert
    Sheets("Log").Cells(2, "AA").value = Avg_velocity
    Sheets("Log").Cells(2, "AB").value = Avg_length
End Function

average value affecting because of #VALUE!

3 个答案:

答案 0 :(得分:1)

像这样的东西应该可以正常工作:

Option Explicit

Public Sub TestMe()

    Dim myRng1  As Range
    Dim myCell  As Range
    Dim myRng2  As Range

    Set myRng1 = Range("A1:A5")

    For Each myCell In myRng1
        If Not IsError(myCell) Then
            If Not myRng2 Is Nothing Then
                Set myRng2 = Union(myRng2, myCell)
            Else
                Set myRng2 = myCell
            End If
        End If
    Next myCell

    If Not myRng2 Is Nothing Then myRng2.Select

End Sub

它通过该范围并且只接收不是错误的单元格:

enter image description here

答案 1 :(得分:1)

你也可以通过提供一个非常大的数字标准来使用AverageIf忽略错误,如下所示:

Avg_velocity = Application.WorksheetFunction.AverageIf(Sheets("Data").Range("K5:K650"), "<9E307")

答案 2 :(得分:1)

还应该能够使用聚合函数

=Application.worksheetFunction.Aggregate(1,6,range)