Excel 2017 年公式 - 按月平均数据,同时可过滤

Excel 2017 Formula - Average data by month, while being filterable

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

Test workbook screenshot

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

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

结果计算需要在筛选时重新计算,在客户、站点、状态、工作类型等之间

我在另一个 sheet 中引用生成的单元格,这让我大致了解了趋势,因为在每个 sheet 中按月过滤不是一种选择。

=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,其中 none 产生的结果与我手动检查时得到的结果相同。

每部作品sheet超过150000行,最大的29148行。数据追溯到 2005 年。

有人能帮我找到解决办法吗?

一个可能的解决方案是创建一个辅助列,如果该行可见,则为 returns 1,如果该行不可见(或空白),则为 returns 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),就没有一种干净的方法来做到这一点。