SUMIF不包括隐藏的行。 小计? SUMPRODUCT?
我有两个巨大的事件表。 第一个表是一个数据表( tblData
),它具有date,持续时间和代码(用于标识事件)。 第二个表是每个事件总时间的汇总表( tblSummary
)。
我如何过滤tblData
并更新tblSummary
?
以下是tblData
一小部分。 请注意,Level 2代码有三列( L2a
, L2b
, L2c
); 这意味着如果我在寻找2级代码“ EL
”的总持续时间,我必须检查所有3列并添加他们的Duration
时间。 如下图所示,总“ EL
”时间将是9.9
下面是一个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来完成。
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表中。
¹ 只要整个工作手册中的任何内容发生变化,挥发性函数就会重新计算,而不仅仅是当影响其结果的事情发生变化时。 易失性函数的例子是间接 , 偏移 , 今天 , 现在 , 兰德和兰德维恩 。 CELL和INFO工作表函数的一些子函数也会使它们变得不稳定。