在 Excel 中按条件顺序求和?

问题描述 投票:0回答:1

数据:

我正在尝试在 Excel 中创建资源分配文件,数据结构如下:

角色 第 1 周可用性
A 莎拉 3
A 约翰 3
A 比尔 2
A 艾米丽 0.5
A 利亚 0.5
A 迈克 0.25

目标:

举例来说,对于我的项目的第一周,我总共需要完成 7 个小时的工作。我需要选择哪些员工可以满足此配额。我们可以通过肉眼看到 Sarah、John、Emily 和 Leah 总共有 7 个小时的可用时间,但我正在尝试编写一个公式来将这些名字一起调用。

之前的想法#1:求和与偏移

我首先尝试创建一个复杂的函数,使用 SUM 和 OFFSET 来创建连续总和,每次递增一个人,直到达到 7 或超过 7。公式将从 Sarah 的可用性 3 开始,然后添加 John 的可用性3(总共 6),然后加上比尔的空闲时间 2(总共 8),然后停下来告诉我我已经达到了 8 小时。 缺点:这显然并不完美,因为我们知道有一个现有的组合可以使我们恰好达到 7,但因为我是按顺序求和的,所以公式没有考虑到这一点。

之前的想法#2: XLOOKUP 和 LARGE

意识到我的第一次尝试存在位置限制,接下来我尝试将 LARGE 函数与 XLOOKUP 结合使用来创建不一定基于物理位置,而是基于 rank 的总和。该公式将首先从所需的内容中减去最大的可用性(7 - 3,在我们的示例中),如果该值 > 0,它将使用 XLOOKUP 调用该名称,然后进一步从所需的内容中减去第二大的可用性。 缺点:公式的延续是我的问题。我想说“如果 7 减去最大可用性大于 0,则减去第二大可用性。如果仍大于 0,则减去第三大可用性,依此类推。例如,如果减去第三大可用性小于 0,然后减去第四大可用性,并检查它是否仍高于 0,等等。

我如何解决前两次尝试以达到我想要的结果?或者是否有更好的解决方案?! 请注意,一旦我弄清楚了逻辑,我将寻求实现一些宏来自动化此过程的某些部分。

谢谢!

excel cumulative-sum
1个回答
0
投票

这是您可以尝试获取总工作时间为 7 小时的姓名的一种方法:

enter image description here


• 单元格中使用的公式 D2

=LET(
     a, C2:C7,
     b, BASE(SEQUENCE(,POWER(2,ROWS(a)),0),2,ROWS(a)),
     c, --MID(b,SEQUENCE(ROWS(a)),1),
     TEXTJOIN(", ",1,IF(FILTER(c,MMULT(TOROW(a),--c)=7),B2:B7,"")))

© www.soinside.com 2019 - 2024. All rights reserved.