【发布时间】:2016-10-19 15:21:19
【问题描述】:
我想找到运行总和值达到指定数量并且满足多个条件的行(类似于 sumifs)。
我不能只添加一个累积行,如下所示:
Count rows until the sum value of the rows is greater than a value
....因为我在数据中还有其他要满足的条件,因此无法得出运行总计。
在下面的虚拟示例中,我想找出“设计”项目花费或超过 30,000 美元的日期
【问题讨论】:
我想找到运行总和值达到指定数量并且满足多个条件的行(类似于 sumifs)。
我不能只添加一个累积行,如下所示:
Count rows until the sum value of the rows is greater than a value
....因为我在数据中还有其他要满足的条件,因此无法得出运行总计。
在下面的虚拟示例中,我想找出“设计”项目花费或超过 30,000 美元的日期
【问题讨论】:
做一个累积行,仅当 B 列等于“设计”时才相加
如果您希望能够进行 vlookup,您应该创建一个额外的列来检查金额是否超过 30k,然后输出任何将成为 vlookup 关键的内容。
【讨论】:
好的,对于任何感兴趣的人,这就是我最终要做的。我创建了一个单独的表,其中一列中包含我所有可能的星期(10/17、10/24、10/31 等),下一列中包含相应的序号。在我的实际项目中,我最终得到了 54 个。
然后,我最终不得不在我的数据集中插入一列,以便在所有行中的每个“周”中查找“周号”。然后在我正在解决的另一张纸上,我有一个单元格是我本周的决策变量#。我有另一个是我的目标$。我创建了一个公式,将我的目标金额减去所有标准(项目、名称等)的 SUMIFS,最后一个标准是周数必须是“=1、=0。这让我回到了资金为负数的前一周。然后,我在我的周数表上查找了该周数 +1 的单元格,以找到达到我的目标金额的那一周。
抱歉,不得不这样解释,而不是实际公式,因为我的实际公式有很多 SUMIFS 标准和单元格引用,在这里没有任何意义。
【讨论】:
一个迟到的答案,但没有使用帮助列。
通过在TRANSPOSEd 数组上使用矩阵乘法 (MMULT) 判断 Row 是否大于自身以及列表本身,我们可以生成 Running Total 数组。
MMULT(--(TRANSPOSE(ROW(D2:D21))<=ROW(D2:D21)), D2:D21)
如果我们将其缩小到仅前 3 行以进行演示,那么您正在进行以下计算:
[[--(2<=2)][--(3<=2)][--(4<=2] [[10,000]
[--(2<=3)][--(3<=3)][--(4<=3] ∙ [ 8,000]
[--(2<=4)][--(3<=4)][--(4<=4]] [ 6,000]]
这给了我们这个:
[[1][0][0] [[10,000] [[10,000]
[1][1][0] ∙ [ 8,000] = [18,000]
[1][1][1]] [ 6,000]] [24,000]]
然后我们可以将其与目标值作为条件进行比较,然后除以结果以消除具有#DIV0! 错误的值,并使用AGGREGATE 获得最小的非错误值
=AGGREGATE(15, 6, Row(D2:D21) / (MMULT(--(TRANSPOSE(ROW(D2:D21))<=ROW(D2:D21)), D2:D21)<30000), 1)
这将为我们提供第一行,其中 Running Total >= $30,000
【讨论】: