我一般都会问Python或VBA的问题,但在过去的4.5小时里我一直很讨厌,我需要它来完成一个宏,我只是得到div / 0错误。
在excel中我有五列:
1.物品进入队列的日期(A)
2.物品进入队列的时间(B)
3.物品离开队列的日期(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”)
任何想法将不胜感激!在此先感谢:)
答案 0 :(得分:2)
你的公式是这样说的:
=AVERAGEIFS(E1:E4,A1:A4,"=today()-1",B1:B4,">16:00",C1:C4,"=today()",D1:D4,"<16:00")
取E1的平均值:E4如果......
- A1:A4相当于字符串“= today() - 1”
- B1:B4相当于字符串“&gt; 16:00”
- C1:C4相当于字符串“= today()”
- D1:D4相当于字符串“&gt; 16:00”
醇>
您想要说的是:
取E1的平均值:E4如果......
- A1:A4等同于公式
的结果=today()-1
- B1:B4小于16小时
- C1:C4等同于公式
的结果=today()
- D1:D4小于16小时
醇>
让我们先解决2和4。
在Excel中,1天(24小时)= 1.时间以十进制值的形式存储为一天的百分比:
1天= 1 1天= 24小时 1小时= 1/24 16小时= 16/24 = 2/3
因此,您应该将公式重写为:{/ 1>而不是B1:B4,">16:00"
B1:B4,">"&2/3
&
连接大于号,2/3将给出相当于16:00的小数值。最后,您将得到一个等于“&gt; .6666666666”的字符串
(如果您愿意,也可以使用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)
答案 1 :(得分:1)
如果您正在寻找&#34;在昨天16:00到16:00之间进入和离开队列的项目&#34;有些人有可能今天进入队列 (或昨天离开队列)?如果是这样,你肯定需要检查今天输入的物品吗?使用AVERAGEIFS
函数很难做到这一点 - 使用&#34;数组公式&#34;可能更容易。像这样:
=AVERAGE(IF(A1:A4+B1:B4>=TODAY()-1/3,IF(C1:C4+D1:D4<TODAY()+2/3,E1:E4)))
使用 CTRL + SHIFT + ENTER确认
我假设公式不必明确处理您的负值,因为这些只会出现在已存在超过24小时的项目中,并且IF函数无论如何都会排除这些值。 ..
如果你想对AVERAGEIFS做同样的事情,你需要创建两个额外的列,并添加进入/退出日期/时间,例如如果列G是列A和B的总和,列H是列C和D的总和,则可以使用此版本
=AVERAGEIFS(E1:E4,G1:G4,">="&TODAY()-1/3,H1:H4,"<"&TODAY()+2/3)
请注意,我使用了&gt; =和&lt;故意避免在几天内重复计算/不计算