创建一个宏来分段平均给定列中的数据

创建一个宏来分段平均给定列中的数据

我想创建一个宏,对 Excel 工作表中一列中每 12 个项目的值取平均值,例如A1-A12然后A13-A24等等,并将结果放在单元格中C12C24等等。

工作表截图

我不知道如何开始;您能给我一些建议吗?

答案1

您不需要为此编写代码。在单元格 C12 中输入平均值公式=AVERAGE(A1:A12)。然后选择 C1 到 C12 并向下拖动填充柄。

编辑澄清

填充柄会将选定范围向下复制,并保留选定范围的模式。在这种情况下,选定范围的前 11 个单元格为空白,只有第 12 个单元格包含公式。如果选择 C1 至 C12 并向下拖动填充柄,则接下来的 11 个单元格将为空白,而单元格 C24 将包含公式。继续向下拖动,将是另外 11 个空白单元格,直到单元格 C36 包含公式。

这就是模式。

答案2

使用这一页作为起点,您可以使用公式来MOD()获取平均值。

从 C12 开始,输入此公式并向下拖动:

=IF(MOD(ROW(),12)=0,AVERAGE(OFFSET($A1,(ROW()-ROW($C12))*12,,12,)),"")

编辑:天哪,上面的代码太夸张了。请使用下面的代码:

=IF(MOD(ROW(),12)=0,AVERAGE(A1:A12),"")

答案3

这几行可以帮助您创建宏,以获取每 12 行的平均值。

笔记, 要获取前 12 行的平均值,请选择第 1 行的任意单元格,如 B1、C1 或 D1,然后运行此宏,然后只需填充该单元格即可获取另一组 12 行的平均值。

Sub Average()
ActiveCell.Formula = "=AVERAGE(OFFSET($A$1, (ROW() - ROW($A$1)) * 12, 0, 12, 1))"
End Sub

或者, 您也可以使用这个公式非 VBA 解决方案

C2 =AVERAGE(OFFSET($A$2,(ROW()-ROW($C$2))*12,,12,))

編輯: 两种解决方案都采用智能方法,其中获取平均值的行是可编辑的。

例如,如果Average of every 16 rows需要计算,则非 VBA 解决方案*12,,12,应替换为*16,,16,同样地VBA 解决方案 *12,0,12,1应该*16,0,16,1

注意:

  • 填写非 VBA 公式。
  • 根据需要调整公式和代码中的单元格引用。

相关内容