如何平均同一列中的多个单元格?

时间:2014-11-15 22:15:45

标签: excel excel-vba vba

有没有办法找到同一列中数据块的平均值?

这是我之前使用的代码,它的工作方式与我希望的数字较少的数据不同:

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

示例:图像是我正在处理的文件。我有数千行这些数据,它们都被三个空行隔开。有没有办法找到每个数据块的平均值,并将其显示在数据正下方的第一个空白行中?

1 个答案:

答案 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 :我遵循的步骤:从相应范围的顶部到底部:

  1. 连续3次搜索空白。

  2. 如果找到,则为每个块定义一个适当的范围,从该块的第一个单元格开始,以该块的最后一个单元格结束。

  3. 然后在该块上应用avg函数并将结果放在块下面。