【VBA】取得一组数据中排除离散值后的最大值及最小值

前言

一组数据,如果存在极端异常值,直接使用Excel公式去计算最大值与最小值是不靠谱的。
排除离散值后去计算才相对靠谱,但是Excel中又没有直接的公式,或者是需要套用多个很复杂的公式。这里我们采用VBA来实现。

一、准备数据,画个框框

画个框框
准备数据

二、编写代码

代码如下(示例):

Sub FindMinMaxWithoutOutliers_DynamicRange()
    Dim ws As Worksheet
    Dim dataRange As Range
    Dim lastRow As Long
    Dim Q1 As Double, Q3 As Double, IQR As Double
    Dim lowerBound As Double, upperBound As Double
    Dim maxValue As Variant, minValue As Variant
    Dim cell As Range
        
    ' 设置工作表
    Set ws = ThisWorkbook.Worksheets("Sheet1") ' 更改为你的工作表名
    
    ws.Cells(1, 5) = ""
    ws.Cells(2, 5) = ""
    
    ' 动态获取数据区域的最后一行
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 假设数据在A列
    
    ' 设置动态数据范围
    Set dataRange = ws.Range("A2:A" & lastRow)
    
    ' 计算四分位数
    Q1 = Application.WorksheetFunction.Quartile_Exc(dataRange, 1)
    Q3 = Application.WorksheetFunction.Quartile_Exc(dataRange, 3)
    
    ' 计算IQR
    IQR = Q3 - Q1
    
    ' 定义离群值边界
    lowerBound = Q1 - 1.5 * IQR
    upperBound = Q3 + 1.5 * IQR
    
    ' 初始化最大值和最小值
    maxValue = Empty
    minValue = Empty
    
    ' 遍历数据,排除离群值并找到最大值和最小值
    For Each cell In dataRange
        If Not IsEmpty(cell.Value) Then
            If cell.Value >= lowerBound And cell.Value <= upperBound Then
                If IsEmpty(maxValue) Or cell.Value > maxValue Then
                    maxValue = cell.Value
                End If
                If IsEmpty(minValue) Or cell.Value < minValue Then
                    minValue = cell.Value
                End If
            End If
        End If
    Next cell
    
    ' 显示结果
    
    ws.Cells(1, 5) = maxValue
    ws.Cells(2, 5) = minValue
    
    MsgBox "计算完成", vbOKOnly, "提示"
    
End Sub

三、运行测试

右键给框框指定宏
指定宏
给框框指定宏
点击框框运行
运行测试
测试成功。


总结

采用VBA来取得一组数据中排除离散值后的最大值及最小值,一劳永逸,下一次再遇到这样的场景就会方便很多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨清池

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值