【问题标题】:average with multiple conditions on excel在excel上具有多个条件的平均值
【发布时间】:2013-08-22 00:22:02
【问题描述】:

我通常会问 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,"

任何想法将不胜感激!在此先感谢:)

【问题讨论】:

  • 对不起,已经编辑好了
  • 如果您添加 A1:E4 的内容也会很有用,以便我们可以测试...

标签: excel excel-formula formula average formulas


【解决方案1】:

你的公式是这样说的:

=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,"&gt;16:00"

B1:B4,">"&2/3

&amp; 连接大于号,2/3 将给出相当于 16:00 的十进制值。最后你会得到一个等于“>.6666666666”的字符串

(如果您愿意,也可以使用B1:B4,"&gt;.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)

【讨论】:

  • @ jmac - 实际上 ">16:00" 作为标准将完全按预期工作,它与 ">"&2/3 的作用相同
  • @barryhoudini 也很高兴在这里见到你——你会比我更了解(肯定)。感谢您的提醒。
  • 效果很好!谢谢!我只是有一个问题,在 F 列中我有 4 个类别(内部、外部、转移和风险),我尝试添加前 3 个作为标准,例如:F1:F4,“内部”,我只是得到 DIV/0 ,任何想法为什么?
  • 显然没有找到带有“内部”的值,因此分母为零。你确定你有满足所有条件的条目吗?如果不是,=AVERAGEIFS() 将返回 #DIV/0 错误。您可以通过将整个 =AVERAGEIFS() 语句包装在 =IFERROR() 语句中来解决此问题(这只会改变它显示的内容——而不是根本问题)。
  • 是否有办法忽略“内部”是否在该范围内?因为它不会总是在那里,我很抱歉所有的问题,这有点超出我的范围,通常我使用 python 多于 excel :-/
【解决方案2】:

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

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

CTRL+SHIFT+ENTER

确认

我假设该公式不必明确处理您的负值,因为这些只会出现在已存在超过 24 小时的项目中,而 IF 函数将排除那些无论如何...

如果您想对 AVERAGEIFS 执行相同操作,则需要创建两个附加列,并添加进入/退出日期/时间,例如如果 G 列是 A 列和 B 列的总和,H 列是 C 列和 D 列的总和,则可以使用此版本

=AVERAGEIFS(E1:E4,G1:G4,"&gt;="&amp;TODAY()-1/3,H1:H4,"&lt;"&amp;TODAY()+2/3)

请注意,我使用 >= 和

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 2016-11-02
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多