【发布时间】:2018-04-03 11:01:55
【问题描述】:
我有这张表是手动输入的:
LINE ¦ ROOM A¦ ROOM B¦ ROOM C¦ ROOM D¦ ROOM E¦ ROOM F¦
1 ¦ 1 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0
2 ¦ 2 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0
3 ¦ 3 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0
4 ¦ 4 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0
5 ¦ 5 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0
6 ¦ 6 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0
7 ¦ 7 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0
8 ¦ 8 ¦ 0 ¦ 0 ¦ 0 ¦ 0 ¦ 0
9 ¦ 5 ¦ 4 ¦ 0 ¦ 0 ¦ 0 ¦ 0
10 ¦ 5 ¦ 5 ¦ 0 ¦ 0 ¦ 0 ¦ 0
11 ¦ 6 ¦ 5 ¦ 0 ¦ 0 ¦ 0 ¦ 0
12 ¦ 6 ¦ 6 ¦ 0 ¦ 0 ¦ 0 ¦ 0
13 ¦ 7 ¦ 6 ¦ 0 ¦ 0 ¦ 0 ¦ 0
14 ¦ 7 ¦ 7 ¦ 0 ¦ 0 ¦ 0 ¦ 0
15 ¦ 8 ¦ 7 ¦ 0 ¦ 0 ¦ 0 ¦ 0
16 ¦ 8 ¦ 8 ¦ 0 ¦ 0 ¦ 0 ¦ 0
17 ¦ 6 ¦ 6 ¦ 5 ¦ 0 ¦ 0 ¦ 0
18 ¦ 6 ¦ 6 ¦ 6 ¦ 0 ¦ 0 ¦ 0
19 ¦ 7 ¦ 6 ¦ 6 ¦ 0 ¦ 0 ¦ 0
20 ¦ 7 ¦ 7 ¦ 6 ¦ 0 ¦ 0 ¦ 0
21 ¦ 7 ¦ 7 ¦ 7 ¦ 0 ¦ 0 ¦ 0
22 ¦ 8 ¦ 7 ¦ 7 ¦ 0 ¦ 0 ¦ 0
23 ¦ 8 ¦ 8 ¦ 7 ¦ 0 ¦ 0 ¦ 0
24 ¦ 8 ¦ 8 ¦ 8 ¦ 0 ¦ 0 ¦ 0
25 ¦ 7 ¦ 6 ¦ 6 ¦ 6 ¦ 0 ¦ 0
26 ¦ 7 ¦ 7 ¦ 6 ¦ 6 ¦ 0 ¦ 0
27 ¦ 7 ¦ 7 ¦ 7 ¦ 6 ¦ 0 ¦ 0
28 ¦ 7 ¦ 7 ¦ 7 ¦ 7 ¦ 0 ¦ 0
29 ¦ 8 ¦ 7 ¦ 7 ¦ 7 ¦ 0 ¦ 0
30 ¦ 8 ¦ 8 ¦ 7 ¦ 7 ¦ 0 ¦ 0
31 ¦ 8 ¦ 8 ¦ 8 ¦ 7 ¦ 0 ¦ 0
32 ¦ 8 ¦ 8 ¦ 8 ¦ 8 ¦ 0 ¦ 0
我要做的是查看“LINE”列并将该列中的每个人都放入“ROOM A”,直到 ROOM A 已满(当它达到 8 人时)。当第 9 个人加入“LINE”时,小组会被分成两个房间(ROOM A 和 ROOM B),当每个人加入队伍时,他们会被添加到每个房间,直到每个房间再次满 8 人,在这个如果第 16 个人入队,两个房间都满了。
如果有第 17 个人加入队列,则会打开另一个房间,并将所有 17 个人分散到各个房间,这些人将被分到所有 3 个房间,直到所有房间再次满员,每个房间有 8 人。当第 25 个人加入队伍时,所有 25 个人然后被分成 4 个房间等。
到目前为止,我已经想出了这个公式:
=IF(IF($A333-8*(COLUMN()-2)>8,12,$A333-8*(COLUMN()-2))<0,0,IF($A333-8*
(COLUMN()-2)>8,25,$A333-8*(COLUMN()-2)))
但是我不能让它工作,这将读取 LINE 列并返回或者更确切地说将一个人放入房间,直到它达到数字 8,然后它移动到下一个房间并开始将人放在那里,但是我不确定是否可以像我的示例中那样设置一个拆分组的公式?
是否有一个公式可以复制上面的公式,当第一个房间满了时,它会将线平均分成两个房间,如果第一个房间是奇数,则第一个房间的数字较高,例如房间 A 有 4,房间 B 有3,然后如果另一个人加入该行,他们将被放置在房间 B 中以使其相等/均匀,直到两个房间再次在 8 点满为止。
此外,加入队列的人数或开放的房间数量没有限制。
【问题讨论】:
-
您的问题'是否有一个公式可以做到这一点,或者这种方式超出了 excel 的范围?是一个开放的问题,有太多可能的答案,你必须更具体。无论如何,这可能是一个公式,但需要许多 if 语句并且非常复杂。创建一个 VBA 脚本来执行此操作可能是更好的解决方案。您没有说明的是房间或人数的最大数量,以及如果不是整数,有多少人将被拆分到房间中,例如 18 人可以拆分,8-8-2 或 8-7-3 或 8 -5-5 或 7-6-5 或 7-7-4 或 6-6-6
-
现在会更新我的问题
标签: excel if-statement excel-formula excel-2016