VS1*_*SQL 0 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
Run Code Online (Sandbox Code Playgroud)
我正在尝试做的是查看"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)))
Run Code Online (Sandbox Code Playgroud)
然而,我不能让它工作,这将读取LINE列并返回或更确切地将一个人放入房间,直到它到达数字8,然后移动到下一个房间并开始将人放在那里,但我是不确定是否可以设置一个公式来分割像我的例子中的组?
是否有一个公式可以复制上面的情况,当第一个房间满了它将线分成两个房间,第一个房间有较高的数字,如果它是奇数,例如房间A有4个,房间B有3个,然后如果另一个人加入这条线路,他们将被安排在B室,使其相等/均匀,直到两个房间再次满8.
此外,加入队列的人数或打开的房间数量也没有限制.
你的问题是不完全清楚,但我觉得你说你要分割X之间均匀人(大约)ñ客房,其中ñ = ?1+Int((X-1)/8)
为简单起见,我会写出所有公式,就像它们进入单元格一样 $B$2
使用上面的内容,您可以从第一个IF语句开始:
=IF(Column()-1<=1+Int(($A2-1)/8), ">=1",0)
Run Code Online (Sandbox Code Playgroud)
这是未使用的房间 - 每人0人.接下来,让我们来处理整数:如果你在N个房间有X个人,那么每个房间至少有P个人,其中P = ,剩下R个人(根据定义,R = )Int(X/N)Mod(X, P)
然后,这可以让我们为我们的房间增加一个最小值:
=IF(Column()-1<=1+Int(($A2-1)/8), INT($A2/(1+INT(($A2-1)/8))) + "Extra people",0)
Run Code Online (Sandbox Code Playgroud)
所以,我们现在需要做的就是与R额外的人打交道.为了方便起见,我们只需在每个前R房间增加1个人.这意味着房间1+R大于房间号(Column()-1).我们可以重新安排这个,并再次. 然后我们可以利用> 0 来转换为//,并将负数加到0 : . 在长格式中,这变成了1+R-(Column()-1)>02+R-Column()>0Sign10-1MAXMAX(0,2+R-Column())
MAX(0,SIGN(2+MOD($A2,INT($A2/(1+INT(($A2-1)/8))))-COLUMN()))
Run Code Online (Sandbox Code Playgroud)
现在,请为我们的"额外人员"推进,您的最终公式如下:
=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)
Run Code Online (Sandbox Code Playgroud)