我正在汇总任务列表以及相应的日期(开始日期,第一个回答日期等)。
看起来或多或少如下:
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。另外一件使我的生活更轻松的事情是,可以查看哪些单元格具有名称(我当时在考虑条件格式,但我没有找到实现此目的的方法)。有人知道是否有一种方法可以突出显示与名称链接的单个单元格吗?
答案 0 :(得分:1)
所以我建议的答案是
=AVERAGEIF(All_First_Answered,">0")-AVERAGEIF(All_First_Answered,">0",All_Start_Dates)
我在这里假设所有开始日期都存在,但是可能缺少第一个回答日期:如果您使用AVERAGEIFS,则可以轻松为开始日期添加一个附加条件。公式的两个部分都包含相同的条件,因此它们在同一行上工作。
上面的中间列仅作为说明。
答案 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)))))