在Excel中平均有多个条件

我通常会问Python或VBA的问题,但过去4.5个小时,我一直在讨厌,我​​需要它来完成一个macros,我只是得到div / 0错误。

在Excel中,我有五列:1.项目进入队列的date(一)
2.项目进入队列的时间(B)
3.项目离开队列的date(C)
4.物品离开队列的时间(D)
5.项目在队列中的时间(E)

我需要从昨天16:00到今天16:00之间进入和离开队列的项目的平均时间。 也可以忽略数字<1(因为如果一个项目已经超过了24小时,默认值是负数)。

我试过这个,没有结果:(

= AVERAGEIFS(E1:E4,A1:A4, “今日=() – 1”,B1:B4, “> 16:00”,C1:C4, “今日=()”,D1:D4,“<16: 00" )

任何想法,将不胜感激! 提前致谢 :)

你的公式是这样说的:

=AVERAGEIFS(E1:E4,A1:A4,"=today()-1",B1:B4,">16:00",C1:C4,"=today()",D1:D4,"<16:00") 

取E1:E4的平均值,如果…

  1. A1:A4相当于string“= today() – 1”
  2. B1:B4相当于string“> 16:00”
  3. C1:C4相当于string“= today()”
  4. D1:D4相当于string“> 16:00”

想要说的是:

取E1:E4的平均值,如果…

  1. A1:A4相当于formula =today()-1
  2. B1:B4小于16小时
  3. C1:C4相当于公式的结果=today()
  4. D1:D4小于16小时

我们先来解决2和4。

在Excel中,1天(24小时)= 1。时间以一天的百分比forms存储为十进制值:

1天= 11天= 24小时1小时= 1/24小时= 16/24 = 2/3

所以,而不是B1:B4,">16:00"你应该重写公式为:

 B1:B4,">"&2/3 

&连接大于号,2/3将给出相当于16:00的小数值。 最后你会得到一个string等于“> .6666666666”

(如果您愿意B1:B4,">.6666666666666"也可以使用B1:B4,">.6666666666666"

对于项目1和3,根本不需要使用引号。 所以,而不是A1:A4,"=today()-1"你可以只使用以下内容:

 A1:A4,today()-1 C1:C4,today() 

把这一切放在一起,下面的公式应该工作:

 =AVERAGEIFS(E1:E4,A1:A4,today()-1,B1:B4,">"&2/3,C1:C4,today(),D1:D4,"<"&2/3) 

如果您正在寻找“昨天16:00到今天16:00之间进入和离开队列的项目”,是不是有可能今天有人进入队列(或者是昨天已经离队了)? 如果是这样,你还需要检查今天input的项目,当然? 使用AVERAGEIFS函数很难做到这一点 – 使用像这样的“数组公式”可能更容易:

=AVERAGE(IF(A1:A4+B1:B4>=TODAY()-1/3,IF(C1:C4+D1:D4<TODAY()+2/3,E1:E4)))

CTRL + SHIFT + ENTER确认

我假设公式不必明确地处理你的负面价值,因为那些只会出现在那里超过24小时的项目,IFfunction将排除这些… …

如果您想要对AVERAGEIFS执行相同的操作,则需要创build两个附加列,其中添加了入口/出口date/时间,例如,如果列G是列A和B的总和,列H是列C和列D你可以使用这个版本

=AVERAGEIFS(E1:E4,G1:G4,">="&TODAY()-1/3,H1:H4,"<"&TODAY()+2/3)

请注意,我使用了> =和<有意避免在几天内重复计算/不计数