在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的平均值,如果…
- A1:A4相当于string“= today() – 1”
- B1:B4相当于string“> 16:00”
- C1:C4相当于string“= today()”
- D1:D4相当于string“> 16:00”
你想要说的是:
取E1:E4的平均值,如果…
- A1:A4相当于formula
=today()-1
- B1:B4小于16小时
- C1:C4相当于公式的结果
=today()
- 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)
请注意,我使用了> =和<有意避免在几天内重复计算/不计数