【问题标题】:How to exclude the #VALUE! or #DIV/0! in a column for calculating average using VBA如何排除#VALUE!或#DIV/0!在使用 VBA 计算平均值的列中
【发布时间】:2018-11-01 01:21:36
【问题描述】:

我有一种情况要计算一列的平均值(该列有很多行带有数字,有些行带有#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

【问题讨论】:

    标签: vba excel error-handling average


    【解决方案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
    

    它遍历范围并仅拾取不是错误的单元格:

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        应该也可以使用聚合函数

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

        【讨论】:

        • 只要您不被 2010 之前的版本所困扰。 ;)
        • 不记得小计是否有可能补偿#google的现有选项
        • 不,它没有。这是关于 AGGREGATE 的最好的事情之一。 :)
        猜你喜欢
        • 2020-09-06
        • 2013-01-14
        • 1970-01-01
        • 2017-01-06
        • 2022-11-28
        • 2015-10-10
        • 1970-01-01
        • 1970-01-01
        • 2011-03-08
        相关资源
        最近更新 更多