excel 带if条件和减法的数组公式

7tofc5zh  于 2023-01-31  发布在  其他
关注(0)|答案(3)|浏览(150)

我正在搜索一个公式解决方案,将总结小时基于两个条件(日期-列a,活动-列b)。更准确地说,我想总结每天的睡眠时间与数组公式,将包括整个列范围。
数据如下所示:

当我定义精确范围时,公式起作用。
{=如果(A2:A10 = I$6;如果(B2:B10 ="睡眠";(二氟甲基:二氟甲基)-(二氟甲基:一氟甲基);0); 0)}
但是当我尝试包含整列时,它返回0。
{=如果(A:A = I$6;如果(B:B ="睡眠";(D:D)-(C:C);0); 0)}
谢谢大家!

myss37ts

myss37ts1#

您可以在SUMSUMPRODUCT中使用IF语句来使用整列,它确保只对输入数据的有效行执行时差计算:

=SUM(IF(($A:$A=F1) * ($B:$B="Sleep"), ($D:$D + ($C:$C > $D:$D) - $C:$C),0))

然后将公式向右扩展(注意$-符号)。
使用SUMSUMPRODUCT会直接产生错误(#VALUE!),例如:

=SUM(($A:$A=F1) * ($B:$B="Sleep") * ($D:$D + ($C:$C > $D:$D) - $C:$C))

因为它不会首先过滤减法不会产生错误的有效行。
下面是输出:

    • 注**:您需要尝试您的excel版本,对于O365它的工作,但它必须测试为旧版本。

时差的计算(括号为必填项):

$D:$D + ($C:$C > $D:$D) - $C:$C

确保当结束日期表示第二天的某个时间时(如行5中所示),它将添加1以考虑第二天。您可以使用另一个IF(更长,但可能更容易理解)实现相同的目的:

IF($D:$D > $C:$C, $D:$D - $C:$C, (1+$D:$D) - $C:$C)
    • 性能**:请记住下面@JosWoolley关于性能的注解。通常,在公式中指示整列而不是特定范围,会强制Excel检查所有行(当前最大值:1,048,576),一次调用公式影响不大,但多次调用会对性能产生很大影响,甚至Excel无法响应。
omqzjyyz

omqzjyyz2#

看看这个链接,了解一些微软鲜为人知的见解。微软故意禁止在一些内部使用数组的公式中使用整列:
Excel Limitations
具体见本段。

c86crjj0

c86crjj03#

如果将数据指定为Excel表,则可以使用结构化引用,如以下示例

所示

=SUMPRODUCT(((Schedule[End]+(Schedule[Start]>Schedule[End]))-Schedule[Start])*(Schedule[Activity]="Sleep")*(Schedule[Date]=I6))

但您应该认识到,您的数据组织不允许您所需的(按日期)分析,例如,归因于1月22日的大部分睡眠可适当归因于1月23日,但无法反映在总结中,因为您将1月22日的结束时间视为开始时间 * 之前 * 16小时......
(单元格I7:K7具有自定义数字格式[hh]:mm

相关问题