所以我有一个基本上如下所示的表格:
Criterion Value
1 -5
1 1
2 5
2 5
3 2
3 -1
我想根据 A 列中的条件对 B 列中的值求和,但前提是单个条件的总和不为负。因此,例如,如果我要求标准介于 1 和 3 之间的所有值的总和,则结果应为 11(标准 1 的值不包含在总和中,因为它们加起来为负数。
我的第一个想法是添加带有 sumif([criterion];[@criterion];[value]) 的第三列,然后使用 sumifs 函数检查第三列是否为负数。然而,我的表有超过 100k 行,并且有这么多 sumif 函数,它变得慢得难以忍受。
我知道我可以创建一个数据透视表来达到相同的效果,但这有两个缺点:我必须创建一个单独的工作表,这会增加复杂性,而且我的表经常更新,这意味着我必须手动更新每次都使用该数据透视表以允许下游计算。 NBD 和我可以将其作为最后的手段,但我想知道是否没有更优雅的方法来解决这个问题。
我希望避免使用 VBA 以避免复杂性(该工作表将被其他人使用)。
谢谢
最佳答案
使用 UNIQUE() 和 SUMIF() 的两个版本可以轻松完成此操作:
- 首先使用 =UNIQUE(A2:A7) 收集所有条件 -- 假设您的数据位于从第 2 行开始的 A 列和 B 列中,该数据位于单元格 C2 中,其中“条件”位于 C1 中
- 使用 =SUMIF($A$2:$A$7, C2, $B$2:$B$7) 计算所有条件的小计 -- 这会出现在单元格 D2 中,并按照单元格中的条件“部分”进行扩展D1
- 对第 2 步中的所有数据求和,在单元格 E2 中使用 =SUMIF(D2:D7, ">0") 得出正和
如果您有大量数据,我建议使用列引用以避免绝对引用以及需要随着数据变化(数量)调整公式:
- 第一个公式变为 =UNIQUE(A:A) -- 不关心所采用的标题(不会对字符串和空单元格求和)
- 对于第二个公式,请使用 =SUMIF(A:A, C2, B:B)
- 最后一步使用 =SUMIF(D:D, ">0")
这应该相当快,使用与不同标准数量相同数量的额外单元格(乘以 2)。
关于excel - 基于子和条件的求和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62612176/