SUMIF不包括隐藏的行。 小计? SUMPRODUCT?

我有两个巨大的事件表。 第一个表是一个数据表( tblData ),它具有date,持续时间和代码(用于标识事件)。 第二个表是每个事件总时间的汇总表( tblSummary )。

我如何过滤tblData并更新tblSummary

以下是tblData一小部分。 请注意,Level 2代码有三列( L2aL2bL2c ); 这意味着如果我在寻找2级代码“ EL ”的总持续时间,我必须检查所有3列并添加他们的Duration时间。 如下图所示,总“ EL ”时间将是9.9

tblData

下面是一个tblSummary

tblSummary

对于Total列,我使用SUMIF (tblData[L2a], [@[Lvl 2 Code]], tblData[Duration])来获得代码的总时间,但是这包括隐藏的行。 当我更改tblData上的filter时, tblData不会更新。

我相信使用SUBTOTAL是一个死路一条。 这将解决隐藏的列问题,但由于没有办法设置标准,我不能将其应用于tblSummary

我是SUMPRODUCT新手,但我尝试过使用

=SUMPRODUCT(SUBTOTAL(109,tblData[Duration]),--(tblData[L2a]="EL"))

但收到#VALUE! 。 我按了Ctl + Shift + Enter

将SUMIF函数的列值条件耦合在一起,而忽略隐藏的行意味着我们必须强制在SUBTOTAL函数上额外计算一层,并通过循环计算SUMPRODUCT函数来收集聚合。 处理的额外“层”将通过OFFSETfunction来完成。

sumif_hidden1

tblSummary 结构化表 列(又名K15)的第一行中的标准公式是,

 =SUMPRODUCT((SUBTOTAL(103, OFFSET(tblData, ROW(tblData)-ROW(INDEX(tblData, 1, 0)), 0, 1, 1))=1)*(tblData[L2a]=[@[Lvl 2 Code]]), tblData[Duration]) 

如果表格没有为您执行此操作,请填写。

当我们过滤tblData表的date列以隐藏2015年11月24日,2015年11月27日和2015年11月28日时,新的总计显示在tblSummary表中。

sumif_hidden2


¹ 只要整个工作手册中的任何内容发生变化,挥发性函数就会重新计算,而不仅仅是当影响其结果的事情发生变化时。 易失性函数的例子是间接 , 偏移 , 今天 , 现在 , 兰德和兰德维恩 。 CELL和INFO工作表函数的一些子函数也会使它们变得不稳定。