Как исключить # ЗНАЧЕНИЕ!или # DIV / 0!в столбце для расчета среднего с использованием VBA - PullRequest
0 голосов
/ 22 мая 2018

У меня есть ситуация для вычисления среднего значения для столбца (в этом столбце много строк с числами и несколько строк с #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 голосов
/ 22 мая 2018

Вы также можете просто использовать AverageIf, чтобы игнорировать ошибки, предоставив критерии действительно большого числа, например:

Avg_velocity = Application.WorksheetFunction.AverageIf(Sheets("Data").Range("K5:K650"), "<9E307")
0 голосов
/ 22 мая 2018

Также должна быть возможность использовать агрегатную функцию

=Application.worksheetFunction.Aggregate(1,6,range)
0 голосов
/ 22 мая 2018

Что-то вроде этого должно работать вполне нормально:

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

...