如何找到总计大于一定数量的行?
How to find row at which summed total is greater than a certain amount?
我想找到 运行 求和值达到指定数量并满足几个条件的行(类似于 sumifs)。
我不能按照这里的建议只添加一个累积行:
Count rows until the sum value of the rows is greater than a value
.....因为我在数据中还有其他标准要满足,因此不能有 运行 总数。
在下面的虚拟示例中,我想找到 "Design" 项目花费或超过 30,000 美元的日期
创建一个累积行,仅当 B 列等于 'Design'
时才累加
如果你希望能够进行 vlookup,你应该创建一个额外的列来检查数量是否超过 30k,然后输出任何将成为你的 vlookup 键的内容。
好的,对于任何感兴趣的人,这就是我最后所做的。我创建了一个单独的 table,在一列中包含我所有可能的周数(10/17、10/24、10/31 等),在下一列中包含相应的序号。我在实际项目中最终得到了 54。
然后,为了查找所有行中的每个 "Week" "Week No",我最终不得不在我的数据集中插入一列。然后在我正在解决的另一个 sheet 上,我有一个单元格作为第 # 周的决策变量。我有另一个是我的目标 $。我创建了一个公式,将我的目标金额减去所有标准(项目、名称等)的 SUMIFS,最后一个标准是周数必须为“<=”&(决策单元格)。然后,我使用 Solver 通过更改目标周来最小化输出,其中目标周必须是整数、>=1、<=54,并且输出必须是 >=0。这让我到了资金变为负值的前一周。然后,我在我的周 table 的那个周号 +1 进行了单元格查找,以找到可以达到我的目标金额的那一周。
抱歉,不得不这样解释,而不是实际公式,因为我的实际公式有很多 SUMIFS 条件和单元格引用,在这里没有任何意义。
迟到的答案,但没有使用辅助列。
通过在 TRANSPOSE
d 数组上使用矩阵乘法 (MMULT
) 判断行是否大于自身和列表本身,我们可以生成 运行 的数组总计
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)
这将为我们提供第一行,其中 运行 总计 >= $30,000
我想找到 运行 求和值达到指定数量并满足几个条件的行(类似于 sumifs)。
我不能按照这里的建议只添加一个累积行:
Count rows until the sum value of the rows is greater than a value
.....因为我在数据中还有其他标准要满足,因此不能有 运行 总数。
在下面的虚拟示例中,我想找到 "Design" 项目花费或超过 30,000 美元的日期
创建一个累积行,仅当 B 列等于 'Design'
时才累加如果你希望能够进行 vlookup,你应该创建一个额外的列来检查数量是否超过 30k,然后输出任何将成为你的 vlookup 键的内容。
好的,对于任何感兴趣的人,这就是我最后所做的。我创建了一个单独的 table,在一列中包含我所有可能的周数(10/17、10/24、10/31 等),在下一列中包含相应的序号。我在实际项目中最终得到了 54。
然后,为了查找所有行中的每个 "Week" "Week No",我最终不得不在我的数据集中插入一列。然后在我正在解决的另一个 sheet 上,我有一个单元格作为第 # 周的决策变量。我有另一个是我的目标 $。我创建了一个公式,将我的目标金额减去所有标准(项目、名称等)的 SUMIFS,最后一个标准是周数必须为“<=”&(决策单元格)。然后,我使用 Solver 通过更改目标周来最小化输出,其中目标周必须是整数、>=1、<=54,并且输出必须是 >=0。这让我到了资金变为负值的前一周。然后,我在我的周 table 的那个周号 +1 进行了单元格查找,以找到可以达到我的目标金额的那一周。
抱歉,不得不这样解释,而不是实际公式,因为我的实际公式有很多 SUMIFS 条件和单元格引用,在这里没有任何意义。
迟到的答案,但没有使用辅助列。
通过在 TRANSPOSE
d 数组上使用矩阵乘法 (MMULT
) 判断行是否大于自身和列表本身,我们可以生成 运行 的数组总计
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)
这将为我们提供第一行,其中 运行 总计 >= $30,000