【问题标题】:IF formula for splitting queuing system分割排队系统的IF公式
【发布时间】: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


【解决方案1】:

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

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

使用上述方法,您可以从您的第一个 IF 语句开始:

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

这是未使用的房间排序 - 每个 0 人。接下来,我们来处理整数:如果你有 X 个人在 N 个房间里,那么每个房间里至少有 P 个人,其中 P=Int(X/N),剩下 R 人(根据定义,R em>=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)&gt;0,然后再次排列为2+R-Column()&gt;0然后我们可以利用 >0 通过使用 Sign 转换为 1/0/-1MAX 将负数提高到 0:@ 987654348@R-Column())。在长格式中,这变成了

MAX(0,SIGN(2+MOD($A2,INT($A2/(1+INT(($A2-1)/8))))-COLUMN()))

现在,将其推入我们的“额外人员”,您的最终公式如下:

=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)

【讨论】:

  • 这非常有用,谢谢。我认为我的公式系列并尝试混合多个 IF 等,我对其中的解决方案感到困惑。
猜你喜欢
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 2015-02-23
相关资源
最近更新 更多