如何使用 AverageIf 工作表函数计算平均日期差异(如果填写日期)

How to use AverageIf worksheet function for calculating average date differences (in case date is filled in)

我正在对任务列表和相应的日期(开始日期、首次回答日期...)进行总结。

大致如下所示:

Title    Start date    First answer
Task1     29/06/2018   02/07/2018
Task2     09/05/2018   
Task3     13/06/2018   14/06/2018

我想计算给出第一个答案所需的平均时间。如果还没有给出第一个答案,则在计算平均值时需要忽略此条目。

为了能够更好地理解公式,我决定使用 header 的名称,例如:

Name "Header_Title"        has value "Title"
Name "Header_Start_Date"   has value "Start Date"
Name "Header_First_Answer" has value "First answer"

此外,定义为 COUNTA(OFFSET(Header_Title;1;0):A1048576) 的条目数有一个名称:Total_Count.

接下来,我为列值的范围创建了名称:

"All_Start_Dates"    is defined as =OFFSET(Header_Start_Date;1;0):OFFSET(Header_Start_Date;Total_Count;0)
"All_First_Answered" is defined as =OFFSET(Header_First_Answer;1;0):OFFSET(Header_First_Answer;Total_Count;0)

说明:取 header(列标题)下的第一个条目并转到对应于最后一个任务的行。

这使得编写计算这些日期列之间的平均差异的公式变得非常容易:

{=AVERAGE(All_First_Answered_Dates-All_Start_Dates)}
// mind the {} for showing this is an array formula

现在的问题是:如何使用AverageIf工作表函数才能不考虑First answer未填写的情况?
我已经尝试使用 ">0"">"&0,但这不起作用,据说公式无效:

{=AVERAGEIF(All_First_Answered_Dates-All_Start_Dates;">0")}
{=AVERAGEIF(All_First_Answered_Dates-All_Start_Dates;">"&0)}

有人有想法吗?
提前致谢

P.s.1。如您所见,我使用单元格范围 A1048576 作为列 A 的最后一个条目,有人知道更优雅的描述方式吗?
P.s.2。可以让我的生活更轻松的另一件事是可以查看哪些单元格具有名称(我正在考虑条件格式,但我没有找到执行此操作的方法)。有人知道是否有办法突出显示链接到名称的单个单元格吗?

试试数组公式。

如果您不熟悉数组公式,显着的区别是您按住 Ctrl+Shift 然后按 Enter,而不是只按 Enter。您会看到公式前后都带有大括号。不要输入那些。这些会自动出现。

=AVERAGE(IF(INDIRECT("C14:C"&LOOKUP(2,1/(A:A<>""),ROW(A:A)))=0,"",INDIRECT("C14:C"&LOOKUP(2,1/(A:A<>""),ROW(A:A)))-INDIRECT("B14:B"&LOOKUP(2,1/(A:A<>""),ROW(A:A)))))

所以我建议的答案是

=AVERAGEIF(All_First_Answered,">0")-AVERAGEIF(All_First_Answered,">0",All_Start_Dates)

我在这里假设所有开始日期都存在,但第一个回答的日期可能会丢失:如果您使用 AVERAGEIFS,您可以轻松地为开始日期添加一个额外条件。公式的两个部分包含相同的条件,因此它们适用于相同的行。

上面的中间列只是为了解释。