拆分排队系统的IF公式
IF formula for splitting queuing system
我有这个 table 是手动输入的:
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" 直到房间 A 已满(当它达到 8 人时)。当第 9 个人加入 "LINE" 时,小组将被分成两个房间(房间 A 和房间 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 列和 return 或者更确切地说,将一个人放入房间直到它到达数字 8,然后它移动到下一个房间并且开始将人们安置在那里,但我不确定是否可以像我的示例中那样设置一个拆分组的公式?
是否有一个公式可以复制上面的公式,当第一个房间满了时,它会将这条线平均分成两个房间,如果第一个房间是奇数,则第一个房间的数字较大,例如房间 A 有 4 和房间B 有 3 个,然后如果另一个人加入队列,他们将被放置在 B 房间以使其成为 equal/even,直到两个房间再次满 8。
此外,加入队列的人数或开放的房间数量也没有限制。
你的问题不是很清楚,但我认为你说你想将 X 人(大致)平均分配给 N个房间,其中N=1+Int((
X
-1)/8)
?
为简单起见,我将编写所有公式,就像它们在单元格 $B
中一样
使用上面的方法,您可以从第一个 IF
语句开始:
=IF(Column()-1<=1+Int(($A2-1)/8), ">=1",0)
这是已排序的未使用房间 - 每个房间 0 人。接下来,我们来处理whole-numbers:如果你有X个人在N个房间,那么至少有P人在每个房间,其中P=Int(
X/N
)
, 剩下 R 人(根据定义,R=Mod(
X
, P)
)
那么,让我们为我们的房间增加 最小值:
=IF(Column()-1<=1+Int(($A2-1)/8), INT($A2/(1+INT(($A2-1)/8))) + "Extra people",0)
所以,我们现在需要做的就是处理 R 额外的人。为方便起见,我们只向前 R 个房间中的每个房间添加 1 人。这意味着 1+
R
大于房间号 (Column()-1
) 的房间。我们可以将其重新排列为 1+
R
-(Column()-1)>0
,然后再次排列为 2+
R
-Column()>0
。 然后我们可以通过使用Sign
转换为1
/0
/-1
和[=来利用>0 38=] 将负数增加到 0:MAX(0,2+
R
-Column())
。在 long-format 中,这变为
MAX(0,SIGN(2+MOD($A2,INT($A2/(1+INT(($A2-1)/8))))-COLUMN()))
现在,将其推入我们的 "Extra people",您的最终公式如下:
=IF(COLUMN()-1<=1+INT(($A2-1)/8), INT($A2/(1+INT(($A2-1)/8)))+MAX(0,SIGN(2+MOD($A2,INT($A2/(1+INT(($A2-1)/8))))-COLUMN())),0)
我有这个 table 是手动输入的:
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" 直到房间 A 已满(当它达到 8 人时)。当第 9 个人加入 "LINE" 时,小组将被分成两个房间(房间 A 和房间 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 列和 return 或者更确切地说,将一个人放入房间直到它到达数字 8,然后它移动到下一个房间并且开始将人们安置在那里,但我不确定是否可以像我的示例中那样设置一个拆分组的公式?
是否有一个公式可以复制上面的公式,当第一个房间满了时,它会将这条线平均分成两个房间,如果第一个房间是奇数,则第一个房间的数字较大,例如房间 A 有 4 和房间B 有 3 个,然后如果另一个人加入队列,他们将被放置在 B 房间以使其成为 equal/even,直到两个房间再次满 8。
此外,加入队列的人数或开放的房间数量也没有限制。
你的问题不是很清楚,但我认为你说你想将 X 人(大致)平均分配给 N个房间,其中N=1+Int((
X
-1)/8)
?
为简单起见,我将编写所有公式,就像它们在单元格 $B
使用上面的方法,您可以从第一个 IF
语句开始:
=IF(Column()-1<=1+Int(($A2-1)/8), ">=1",0)
这是已排序的未使用房间 - 每个房间 0 人。接下来,我们来处理whole-numbers:如果你有X个人在N个房间,那么至少有P人在每个房间,其中P=Int(
X/N
)
, 剩下 R 人(根据定义,R=Mod(
X
, P)
)
那么,让我们为我们的房间增加 最小值:
=IF(Column()-1<=1+Int(($A2-1)/8), INT($A2/(1+INT(($A2-1)/8))) + "Extra people",0)
所以,我们现在需要做的就是处理 R 额外的人。为方便起见,我们只向前 R 个房间中的每个房间添加 1 人。这意味着 1+
R
大于房间号 (Column()-1
) 的房间。我们可以将其重新排列为 1+
R
-(Column()-1)>0
,然后再次排列为 2+
R
-Column()>0
。 然后我们可以通过使用Sign
转换为1
/0
/-1
和[=来利用>0 38=] 将负数增加到 0:MAX(0,2+
R
-Column())
。在 long-format 中,这变为
MAX(0,SIGN(2+MOD($A2,INT($A2/(1+INT(($A2-1)/8))))-COLUMN()))
现在,将其推入我们的 "Extra people",您的最终公式如下:
=IF(COLUMN()-1<=1+INT(($A2-1)/8), INT($A2/(1+INT(($A2-1)/8)))+MAX(0,SIGN(2+MOD($A2,INT($A2/(1+INT(($A2-1)/8))))-COLUMN())),0)