用于拆分排队系统的IF公式

时间:2018-04-03 11:01:55

标签: excel if-statement excel-formula excel-2016

我有这个手动输入的表:

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列并返回或者更确切地将一个人放入房间直到它达到数字8,然后它移动到下一个房间并开始将人放在那里,但是我不确定是否有可能设置一个公式来分割像我的例子中的组?

是否有一个公式可以复制上面的地方,当第一个房间满了它将该线分成两个房间,第一个房间的数字较高,如果它是奇数,例如房间A有4个,房间B有3,然后如果另一个人加入线路,他们将被放置在B室,使其相等/均匀,直到两个房间再次满8为止。

此外,加入队列的人数或开放的房间数也没有限制。

1 个答案:

答案 0 :(得分:5)

您的问题并不完全清楚,但我认为您说要在 N 房间之间平均分配 X 人,其中 N = 1+Int(( X -1)/8)

为简单起见,我会写出所有公式,就像它们进入单元格$B$2

一样

使用上述内容,您可以从第一个IF语句开始:

=IF(Column()-1<=1+Int(($A2-1)/8), ">=1",0)

未使用的房间排序 - 每人0人。接下来,让我们处理整数:如果 N 房间中有 X 人,那么至少 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 {{ 1}}。 然后我们可以利用{0}转换为-Column()>0 / Sign / 10来利用&gt; 0将负数加到0:-1 MAX MAX(0,2+。在长格式中,这变为

R

现在,请为我们的&#34;额外的人&#34;推进,您的最终公式如下:

-Column())