我有两个Excel工作表。工作表1具有以下记录:
Salon coach date amount
Sal1 col1 11/7/2018 500
Sal1 col1 11/1/2018 400
Sal1 col1 10/25/2018 600
Sal1 col1 10/19/2018 700
Sal1 col1 10/1/2018 250
And so on
第2页具有以下列和记录:
Salon coach average of lastest 4 dates
Sal1 col1 ???
我想找到最近四个日期(不包括最近日期)的平均金额。计算应从最近的第二个日期到最近的第五个日期,并与沙龙和教练的条件相匹配。
答案 0 :(得分:2)
最终版本(灵活的日期参数和定义的名称)
具有数组函数(因此您必须使用ctrl + shift + enter输入),并具有命名范围,以使公式更易于理解:
{=AVERAGE(IF(
(r_salon=A14)*
(r_coach=B14)*
(r_date>=LARGE(IF((r_salon=A14)*(r_coach=B14);r_date;);
MIN(d_last;COUNTIFS(r_salon;A14;r_coach;B14))))*
(r_date<=LARGE(IF((r_salon=A14)*(r_coach=B14);r_date;);
MIN(d_first;COUNTIFS(r_salon;A14;r_coach;B14))));
r_amount))}
为了进行测试,我将公式与数据放在同一张纸上,因此Sal1在单元格A14
中,col1在单元格B14
中。
公式的说明(因此您可以根据需要进行微调):
IF
为Sal1和col1(单元格A14
和B14
)创建了一个包含所有日期的数组,其周围的LARGE
函数采用n-最大价值; n实际上是分别根据sal1 / col1组合中实际存在的日期/行数分别计算为d_first
或d_last
的最小值(这将解决某些沙龙/教练组合的日期可能少于d_first
或d_last
个日期; IF
然后创建一个满足所有条件的所有日期的数组,例如,对于d_first
之后的Sal1 AND col1 AND d_last
之前的 AND (在上一步中以内部IF
计算); *
是AND
运算符的简写,它也适用于数组公式(AND
无效); AVERAGE
当然是微不足道的。为使公式更灵活,我使用了两个参数(定义的名称):d_first
是要包括的最近日期,而d_last
是要包括的最后日期。一些示例:
d_first=2
和d_last=5
:回答您实际的(更新的)问题,即平均4个日期,从最近的第二个开始到最近的第五个; d_first=1
和d_last=4
:与答案的第一个版本相同,即结果将是最近四个日期的平均值; d_first=2
和d_last=4
:这是最近的第二个日期到第4个日期的平均值; d_first=1
和d_last=1
:这只会导致最近的日期(一个值的平均值就是值本身)。您只需要确保d_first
是一个正整数(大于零),并且d_last
必须大于或等于d_first
。如果它们大于数据集中的日期总数,则结果是与最早日期相对应的值。
您还必须考虑如果在同一日期有多个条目,会发生什么情况。当前公式适用于截止日期(最早和最晚),而不适用于实际平均记录数((如果您有多个具有相同日期在截止日期内的记录,则所有这些都将用于平均值的计算)。
版本2 (增加了灵活性)
公式:
{=AVERAGE(IF(($A$2:$A$11=A14)*($B$2:$B$11=B14)*($C$2:$C$11>=LARGE(IF(($A$2:$A$11=A14)*($B$2:$B$11=B14);$C$2:$C$11;);MIN(d_last;COUNTIFS($A$2:$A$11;A14;$B$2:$B$11;B14))))*($C$2:$C$11<=LARGE(IF(($A$2:$A$11=A14)*($B$2:$B$11=B14);$C$2:$C$11;);MIN(d_first;COUNTIFS($A$2:$A$11;A14;$B$2:$B$11;B14))));$D$2:$D$11))}
版本1 (原始问题,即最近4个日期的平均值;该问题不相关,因为该问题已更新)
您可以使用以下数组公式来完成此操作(因此必须使用ctrl + shift + enter来输入):
{=AVERAGE(IF(($A$2:$A$11=A14)*($B$2:$B$11=B14)*($C$2:$C$11>=LARGE(IF(($A$2:$A$11=A14)*($B$2:$B$11=B14);$C$2:$C$11;);MIN(4;COUNTIFS($A$2:$A$11;A14;$B$2:$B$11;B14))));$D$2:$D$11))}
注意
(仅供参考,以防您使用F9调试公式并检查各种数组中间结果)
数组不仅包含满足条件的值,而且大小与IF
的参数相同(即,其值将与数据集中的行数一样多),并且对于不符合条件的行,用FALSE
填充。由于AVERAGE
函数(与许多其他函数一样)没有考虑FALSE
的值,因此对结果没有影响,因此我没有使公式过于复杂以仅保留匹配的日期数组。
答案 1 :(得分:1)