Excel 2017公式-可过滤的按月平均数据

时间:2018-10-04 12:42:23

标签: filter excel-formula average subtotal monthcalendar

我不是VBA编码器,如果可能的话,我更喜欢使用excel公式,最简单的解决方案就是最好的解决方案。

Test workbook screenshot

如您所见,我有很多可过滤的列。

我正在尝试检索L列的平均值,但我希望为G3:R3中的正确月份计算数据。

在过滤后,需要在客户,站点,状态,工作类型等之间重新计算得出的计算结果。

我要在另一张工作表中引用生成的单元格,这给出了我可以看一下的趋势的想法,因为这样每张工作表中的按月筛选不是一种选择。

=AVERAGE(IF(MONTH(E9:E1833)=1,(J9:J1833)))

此数据不会使用过滤的数据进行更新。

=SUM(IF(MONTH(E9:E1833)=1,J9:J1833,0)) /SUM(IF(MONTH(E9:E1833)=1,1))

此内容不会使用过滤后的数据进行更新。

我尝试了5种不同的SUBTOTAL公式,其中一些具有OFFSET,但这些公式都不会产生与手动检查时相同的结果。

每个工作表都有1,500多行,最大的是29148行。该数据可以追溯到2005年。

请有人可以帮助我找到解决方案吗?

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案是创建一个帮助程序列,如果该行可见,则返回1,如果该行不可见(或空白),则返回0。这样可以在公式中提供更多自由度。

例如,如果要在列X中创建一个帮助器列,请将其键入到单元格X9中并向下拖动:

= SUBTOTAL(103,A9)

现在您可以创建一个自定义的平均公式,例如:

= SUMPRODUCT((MONTH(E9:E1833)=1)*(X9:X1833)*(J9:J1833))/
  SUMPRODUCT((MONTH(E9:E1833)=1)*(X9:X1833))

不太漂亮,但是可以完成工作。 (请注意,这是一个数组公式,因此您必须在键盘上按 Ctrl + Shift + Enter 而不是仅按 Enter 。)

有了更多的帮助器列,您可以完全避免SUMPRODUCT,而只需执行一个AVERAGEIFS就可以完成。

例如,如果您键入单元格Y9并向下拖动:

= MONTH(E9)

那么您的公式可能是:

= AVERAGEIFS(J9:J1833,X9:X1833,1,Y9:Y1833,1)

没有至少一个辅助功能(如果要避免使用VBA),没有一种干净的方法。