我正在搜索一个公式解决方案,将总结小时基于两个条件(日期-列a,活动-列b)。更准确地说,我想总结每天的睡眠时间与数组公式,将包括整个列范围。数据如下所示:
当我定义精确范围时,公式起作用。{=如果(A2:A10 = I$6;如果(B2:B10 ="睡眠";(二氟甲基:二氟甲基)-(二氟甲基:一氟甲基);0); 0)}但是当我尝试包含整列时,它返回0。{=如果(A:A = I$6;如果(B:B ="睡眠";(D:D)-(C:C);0); 0)}谢谢大家!
myss37ts1#
您可以在SUM或SUMPRODUCT中使用IF语句来使用整列,它确保只对输入数据的有效行执行时差计算:
SUM
SUMPRODUCT
IF
=SUM(IF(($A:$A=F1) * ($B:$B="Sleep"), ($D:$D + ($C:$C > $D:$D) - $C:$C),0))
然后将公式向右扩展(注意$-符号)。使用SUM或SUMPRODUCT会直接产生错误(#VALUE!),例如:
$
#VALUE!
=SUM(($A:$A=F1) * ($B:$B="Sleep") * ($D:$D + ($C:$C > $D:$D) - $C:$C))
因为它不会首先过滤减法不会产生错误的有效行。下面是输出:
时差的计算(括号为必填项):
$D:$D + ($C:$C > $D:$D) - $C:$C
确保当结束日期表示第二天的某个时间时(如行5中所示),它将添加1以考虑第二天。您可以使用另一个IF(更长,但可能更容易理解)实现相同的目的:
5
1
IF($D:$D > $C:$C, $D:$D - $C:$C, (1+$D:$D) - $C:$C)
omqzjyyz2#
看看这个链接,了解一些微软鲜为人知的见解。微软故意禁止在一些内部使用数组的公式中使用整列:Excel Limitations具体见本段。
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)
I7:K7
[hh]:mm
3条答案
按热度按时间myss37ts1#
您可以在
SUM
或SUMPRODUCT
中使用IF
语句来使用整列,它确保只对输入数据的有效行执行时差计算:然后将公式向右扩展(注意
$
-符号)。使用
SUM
或SUMPRODUCT
会直接产生错误(#VALUE!
),例如:因为它不会首先过滤减法不会产生错误的有效行。
下面是输出:
时差的计算(括号为必填项):
确保当结束日期表示第二天的某个时间时(如行
5
中所示),它将添加1
以考虑第二天。您可以使用另一个IF
(更长,但可能更容易理解)实现相同的目的:omqzjyyz2#
看看这个链接,了解一些微软鲜为人知的见解。微软故意禁止在一些内部使用数组的公式中使用整列:
Excel Limitations
具体见本段。
c86crjj03#
如果将数据指定为Excel表,则可以使用结构化引用,如以下示例
所示
但您应该认识到,您的数据组织不允许您所需的(按日期)分析,例如,归因于1月22日的大部分睡眠可适当归因于1月23日,但无法反映在总结中,因为您将1月22日的结束时间视为开始时间 * 之前 * 16小时......
(单元格
I7:K7
具有自定义数字格式[hh]:mm
)