使用VBA功能清洁和平滑excel图表

时间:2016-12-05 16:49:52

标签: excel vba excel-vba charts

我需要平滑和清理ping数据图表(截图中的橙色)以改善阅读体验。 - 清洁:用当地平均值替换1 ping作为timeOut值,但是没有多少时间过度 - 平滑:用局部平均值代替小的振荡值,但保留突然变化的日期时间

Ping/BandWith

1 个答案:

答案 0 :(得分:1)

我编写了这个VBA代码(Excel函数Smoothing),将其放在工作簿的新VBA模块中,并在您的数据系列中使用它,如下所示:

enter image description here

Public Function Smoothing(ByVal Values As range)
' il faudrait plutot chercher les valeurs aberante et les retirer
    AverageAvec = Application.Average(Values)
    EcartTypeAvec = Application.StDevP(Values)
    EcartTypeRef = EcartTypeAvec
    Smoothing = AverageAvec

    For Each cell In Values
        AverageSans = Application.Average(SetDifference(Values, cell))
        EcartTypeSans = Application.StDevP(SetDifference(Values, cell))
        If EcartTypeSans < EcartTypeRef Then
            EcartTypeRef = EcartTypeSans
            If EcartTypeAvec > EcartTypeRef * 1.3 Then
                Smoothing = AverageSans
            End If
        End If
    Next
End Function

Function SetDifference(ByVal Rng1 As range, ByVal Rng2 As range) As range
On Error Resume Next

If Intersect(Rng1, Rng2) Is Nothing Then
    'if there is no common area then we will set both areas as result
    Set SetDifference = Union(Rng1, Rng2)
    'alternatively
    'set SetDifference = Nothing
    Exit Function
End If

On Error GoTo 0
Dim aCell As range
For Each aCell In Rng1
    Dim Result As range
    If Application.Intersect(aCell, Rng2) Is Nothing Then
        If Result Is Nothing Then
            Set Result = aCell
        Else
            Set Result = Union(Result, aCell)
        End If
    End If
Next aCell
Set SetDifference = Result

End Function

我的代码搜索对标准偏差有最大影响的值,并将其排除以计算新的本地平均值。

Orange is Smoothed

对于3个单元格范围来说这是一个很好的实现,但是WARNING具有更多单元格范围(用于改善平滑效果),如果许多值对标准偏差有重要影响,则只有一个已经删除!