有没有办法找到同一列中数据块的平均值?
这是我之前使用的代码,它的工作方式与我希望的数字较少的数据不同:
Sub Macro1()
'Macro1
Do Until ActiveCell.Value = ""
'Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.FormulaR1C1 = "=AVERAGE(R[-13]C:R[-1]C)"
Selection.End(xlDown).Select
Loop
End Sub
示例:图像是我正在处理的文件。我有数千行这些数据,它们都被三个空行隔开。有没有办法找到每个数据块的平均值,并将其显示在数据正下方的第一个空白行中?
答案 0 :(得分:0)
试试这个:(对于columnA,考虑每个块之后的3个间隙,包括最后一个块)
Sub DoAvginColumn()
Dim i as long, q as long, avgBlock
Dim lastrow as Range, firstrow as Range, rngcolA as Range, rngBlock as Range
Set lastrow = Range("A:A").Find(What:="*", After:=[A1], SearchDirection:=xlPrevious)
Set firstrow = Range("A:A").Find(What:="*", After:=[A1], SearchDirection:=xlNext)
Set rngcolA = Range("A" & firstrow.Row & ":" & "A" & lastrow.Row)
q = 1
For i = 1 To rngcolA.Rows.Count + 1
If rngcolA(i).Value = "" And rngcolA(i + 1).Value = "" And rngcolA(i + 2).Value = "" Then
Set rngBlock = Range(rngcolA(q), rngcolA(i - 1))
avgBlock = WorksheetFunction.Average(rngBlock)
rngcolA(i).Value = avgBlock
rngcolA(i).Font.Bold = True
q = i + 3
End If
Next
End Sub
APPENDED :我遵循的步骤:从相应范围的顶部到底部:
连续3次搜索空白。
如果找到,则为每个块定义一个适当的范围,从该块的第一个单元格开始,以该块的最后一个单元格结束。
然后在该块上应用avg函数并将结果放在块下面。