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

时间:2018-07-18 13:47:42

标签: excel excel-formula conditional-formatting array-formulas

我正在汇总任务列表以及相应的日期(开始日期,第一个回答日期等)。

看起来或多或少如下:

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

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

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

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)

说明:在标题(列标题)下找到第一个条目,然后转到与最后一个任务相对应的行。

这很容易编写公式来计算这些日期列之间的平均差:

{=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。另外一件使我的生活更轻松的事情是,可以查看哪些单元格具有名称(我当时在考虑条件格式,但我没有找到实现此目的的方法)。有人知道是否有一种方法可以突出显示与名称链接的单个单元格吗?

2 个答案:

答案 0 :(得分:1)

所以我建议的答案是

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

我在这里假设所有开始日期都存在,但是可能缺少第一个回答日期:如果您使用AVERAGEIFS,则可以轻松为开始日期添加一个附加条件。公式的两个部分都包含相同的条件,因此它们在同一行上工作。

enter image description here

上面的中间列仅作为说明。

答案 1 :(得分:0)

尝试数组公式。

如果您不熟悉数组公式,则最大的不同是您按住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)))))
相关问题