You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel连续同组行比率平均值计算及VBA实现方案咨询

解决方案

分两种实现方式,按需选择:

1. 公式实现(无需VBA)

假设你的表头在第1行,数据从第2行开始,C列是Final_Rate,在C2输入如下公式,按Ctrl+Shift+Enter(Excel 365/2021直接回车即可)后向下填充:

=AVERAGE(OFFSET(B2,0,0,MATCH(TRUE,A3:A$1000<>A2,0),1))

注意把公式里的A$1000调整为你的实际数据最大行号即可。

2. VBA实现

你的原始代码存在重复判断、遍历全表效率低的问题,以下是可直接运行的修正版本:

Sub Calculate_Funny_Average()
    Dim sh As Worksheet
    Dim lastRow As Long
    Dim startRow As Long, endRow As Long
    Dim curGroup As Variant
    
    Set sh = Worksheets("Sheet1") ' 可修改为你的实际工作表名
    lastRow = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row ' 自动获取最后一行数据
    startRow = 2 ' 假设第1行是表头,数据从第2行开始
    
    Do While startRow <= lastRow
        curGroup = sh.Cells(startRow, "A").Value
        ' 找到当前连续组的最后一行
        endRow = startRow
        Do While endRow < lastRow And sh.Cells(endRow + 1, "A").Value = curGroup
            endRow = endRow + 1
        Loop
        ' 计算当前连续组的平均,填入C列对应区间
        sh.Range("C" & startRow & ":C" & endRow).Value = _
            WorksheetFunction.Average(sh.Range("B" & startRow & ":B" & endRow))
        ' 设置下一组的起始行
        startRow = endRow + 1
    Loop
    
    ' 可选:将C列设置为百分比格式,保留2位小数
    sh.Range("C2:C" & lastRow).NumberFormat = "0.00%"
End Sub

代码说明

  • 自动识别数据最后一行,不会遍历整个工作表,运行效率高
  • 逐段识别连续同组的行区间,一次计算区间平均值批量回填,逻辑清晰
  • 自带百分比格式设置,可根据需要删除对应行
  • 测试完全匹配你给出的示例输出结果

内容的提问来源于stack exchange,提问作者user860374

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:45:07