如何使用 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,您可以轻松地为开始日期添加一个额外条件。公式的两个部分包含相同的条件,因此它们适用于相同的行。
上面的中间列只是为了解释。
我正在对任务列表和相应的日期(开始日期、首次回答日期...)进行总结。
大致如下所示:
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,您可以轻松地为开始日期添加一个额外条件。公式的两个部分包含相同的条件,因此它们适用于相同的行。
上面的中间列只是为了解释。