Sub CalculateAverageInRanges()
Dim ws As Worksheet
Dim lastKRow As Long
Dim i As Long
Dim startRow As Long
Dim endRow As Long
Dim avg As Double
Dim outputRow As Long
' 设置工作表
Set ws = ThisWorkbook.Sheets("Sheet1") ' 请根据需要修改工作表名称
' 确定K列的最后一行
lastKRow = ws.Cells(ws.Rows.Count, "K").End(xlUp).Row
' 初始化输出行
outputRow = 1
' 遍历K列的每一对相邻行号
For i = 1 To lastKRow - 1
startRow = ws.Cells(i, 11).Value ' K1, K2, ...
endRow = ws.Cells(i + 1, 11).Value ' K2, K3, ...
' 计算B列指定范围内的平均值
If endRow > startRow Then
avg = Application.WorksheetFunction.Average(ws.Range("B" & startRow & ":B" & endRow - 1))
Else
avg = Application.WorksheetFunction.Average(ws.Range("B" & startRow & ":B" & startRow))
End If
' 将结果写入D列
ws.Cells(outputRow, 4).Value = avg ' D列
' 移动到下一个输出行
outputRow = outputRow + 1
Next i
MsgBox "平均值计算完成。"
End Sub
-
读取K列的行号:代码读取K列的值,假设这些值代表行号(例如,K1表示开始行号,K2表示结束行号)。
-
计算B列的平均值:对于每一对K列的值,计算从起始行到结束行之间的B列的平均值。
endRow - 1
用来确保范围正确,因为通常计算的是从startRow
到endRow - 1
的数据。 -
结果输出:将计算的平均值输出到D列的相应行中。
-
处理特殊情况:如果
startRow
和endRow
是相同的,代码将计算那一行B列的值(避免错误的范围选择)。
注意事项
- 数据的有效性:确保K列的数值确实是有效的行号,并且在B列中相应的单元格中有数据可供计算。
- K列行号顺序:代码假设K列的数值是按升序排列的(例如,K1 < K2 < K3),如果不是,请确保数据顺序正确。