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
相关产品推荐
相关产品推荐

