我不是VBA编码器,如果可能的话,我更喜欢使用excel公式,最简单的解决方案就是最好的解决方案。
如您所见,我有很多可过滤的列。
我正在尝试检索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年。
请有人可以帮助我找到解决方案吗?
答案 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 键入此公式后,kbd>。)
有了更多的帮助器列,您可以完全避免SUMPRODUCT
,而只需执行一个AVERAGEIFS
就可以完成。
例如,如果您键入单元格Y9
并向下拖动:
= MONTH(E9)
那么您的公式可能是:
= AVERAGEIFS(J9:J1833,X9:X1833,1,Y9:Y1833,1)
没有至少一个辅助功能(如果要避免使用VBA),没有一种干净的方法。