更新 SUMIF 公式以支持过滤数据
Posted
技术标签:
【中文标题】更新 SUMIF 公式以支持过滤数据【英文标题】:Update SUMIF formula to support filtered data 【发布时间】:2020-08-03 01:43:53 【问题描述】:我有一个每个日期记录的时间表(还有一堆与此无关的其他信息)
logTable
Date - Project - other stuff - Hours
1 Jul - X - ... - 3 hrs
1 Jul - Y - ... - 2 hrs
2 Jul - X - ... - 4 hrs
etc.
然后我有一个计算每天时间的公式:
请注意,K3 是计算每天时间的时段(即星期一)的开始。
=SUMIF(logTable[[#All],[Date]],"="&K3,logTable[[#All],[Hours]])
用简单的英语,这将是“向我显示日期为 X 的所有行的总小时数” - 我需要的是“向我显示所有 当前可见的总小时数,而不是过滤行日期 X"
这是一个基本的时间记录电子表格。此特定部分的目的是显示选定周内每天的时间量,按各种标准过滤。
很遗憾,SUMIF 似乎不支持过滤表。
如何更新该公式,以便它计算每天的时间,但仅适用于 logTable 中未过滤的行?例如,我可能想按项目 X 过滤我的表,并让输出更新以反映这一点(请注意,这只是一个示例,可以通过许多其他方式过滤表 - 解决方案需要支持表过滤)。
这里有很多类似的问题,但我无法根据任何问题提出解决方案。我认为部分困惑是我正在使用表名和列名,并且大多数解决方案似乎都使用范围和偏移量,我不知道如何与命名表一起使用。
【问题讨论】:
我有一个我目前正在使用的 hacky “解决方案”,但我想知道一个更好的方法:我在 logTable 中添加了一个额外的列,它只是显示该行是否是可见与否=(AGGREGATE(3, 5, [@Hours])>0)+0)
然后在我的其他公式中我可以使用 =SUMIFS(..., ..., ...,logTable[[#All],[Visible]], 1)
但是虽然这确实有效,但它似乎是一个非常黑客,我不希望在我的表中有任意列来计算是否行是否可见。
您没有清楚地解释自己,所以让我们澄清一下:您有一张桌子。您已应用过滤器,因此只有部分行可见。您想获得 [hours] 列的总和。现在,这是不清楚的部分。您想要所有 可见 行的总和,还是只想要一些符合其他条件的可见行的总和?
我想要sum of *visible, not filtered* [hours] where [date] = X
(然后执行 7 次以生成一周中每天的时间表)
【参考方案1】:
有很多方法可以做到这一点。这是一个选择
更改您的公式以使用 SumIFs 而不是 SumIF,然后您可以添加更多条件。
=SUMIFS(logTable[hours],logTable[date],G2,logTable[project],G3)
使用 SubTotal 过滤表格。小计只会计算可见单元格
=SUBTOTAL(9,logTable[hours])
使用 Office 365 Excel 提供的新 Filter() 函数。
=SUM(FILTER(logTable[hours],(logTable[date]=G2)*(logTable[project]=G3)))
在这些示例中,日期位于单元格 G2 中,项目位于单元格 G3 中。调整以适应。
【讨论】:
感谢您的评论。不幸的是, 1. SUMIFS 不支持表过滤。虽然可以手动编写它来过滤特定的东西,但我想要一个无论我如何过滤表格都能自动工作的解决方案。 2. 小计支持,但不支持此处要求的按日期过滤。 3.这是Excel的独立版,不是365在线版。 @ned subtotal 确实适用于表格中仅可见的单元格。如果您无法使其正常工作,请更新您的 Q,详细说明您尝试过的操作、预期的结果以及实际得到的结果。有人可以帮助您 @chrisneilsen - 小计不能接受 IF 过滤器。你可以在我原来的帖子中看到现有的公式。如果您能告诉我如何在该公式中使用小计而不是 sumif,那就太好了。目前用简单的英语澄清我已经“向我显示日期为 X 的所有行的总小时数” - 我需要的是“向我显示所有 当前可见的总小时数,未过滤 日期 X 的行" @NedMartin,我们没有混淆,你的 A 正是 Teylyn 告诉你的,=SUBTOTAL(9,logTable[hours])
。需要明确的是,这将返回表 logTable
和列 Hours
中 Visible Rows Only 的总和。如果这不是你想要的,或者你不能让它工作,那么请按照我的要求去做,并“用你尝试过的全部细节、你期望的结果以及你实际得到的结果更新你的 Q。 "
@chrisneilsen 我不确定这里的困惑是什么。 SUBTOTAL 只会返回所有可见行的小计 - 它不支持按条件过滤行的能力 - 在这种情况下,日期 X。让我引用我原来的问题:用简单的英语......我需要的是“显示所有当前可见的、未过滤的行的总小时数日期为 X"以上是关于更新 SUMIF 公式以支持过滤数据的主要内容,如果未能解决你的问题,请参考以下文章
EXCEL通俗易懂讲公式:sumif,sumifs,countif,countifs