1

我通常会问 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,"=today()-1",B1:B4,">16:00",C1:C4,"=today()",D1:D4,"<16: 00")

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

4

2 回答 2

2

你的公式是这样说的:

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

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

  1. A1:A4 等价于字符串“=today()-1”
  2. B1:B4 等价于字符串 ">16:00"
  3. C1:C4 等价于字符串“=today()”
  4. D1:D4 等价于字符串 ">16:00"

想要它说的是:

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

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

让我们先解决 2 和 4。

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

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

因此,B1:B4,">16:00"您应该将公式重写为:

B1:B4,">"&2/3

&连接大于号,2/3 将给出相当于 16:00 的十进制值。最后你会得到一个等于“>.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)
于 2013-08-22T06:55:08.760 回答
1

如果您正在寻找“昨天 16:00 到今天 16:00 之间进入和离开队列的项目”,是不是有些人今天进入了队列(或昨天离开了队列)?如果是这样,您肯定也需要检查今天输入的项目吗?使用函数很难做到这一点AVERAGEIFS- 使用这样的“数组公式”可能更容易:

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

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

于 2013-08-22T13:54:47.707 回答