数据位于彩色部分,右边是一个表格,显示ABC,XYZ或GGG下的数据介于最大值和最小值之间时结果列的平均值。
这是通过以下公式完成的:=AVERAGEIFS($D$4:$D$27,A$4:A$27,"<"&$F5,A$4:A$27,">"&$G5)
我想要做的是让该公式引用标题,然后在数据表中查找相应的列以应用averageif标准。
我现在的公式工作得很好,但是当我添加更多列和可能乱序的数据表时,如果我能够将查找或匹配合并到averageifs公式中会更好。
答案 0 :(得分:2)
如果您是通过少量计算进行的,那么Offset函数将用于替换您对当前A列的引用
MATCH(h$2,$a$2:$d$2,0))-1
将偏移分解为$ 4 $作为参考点。
0是从参考点开始移动的行数
=AVERAGEIFS($D$4:$D$27,OFFSET($A$4,0,MATCH(h$2,$a$2:$d$2,0))-1,24,1),"<"&$F5,OFFSET($A$4,0,MATCH(h$2,$a$2:$d$2,0))-1,24,1),">"&$G5)
是从参考点移动的列数
24是要返回的行数
1是要返回的列数
匹配公式在A2:D2中的标题道路中查找H2中的值以获得完全匹配,并返回找到该项目的点的数字。我们从这个结果中减去1,因为我们只想移动比找到项目少一个点。因此,如果在第一个点发现我们不想移动任何列,所以我们需要将值设为0.
你最终公式看起来像:
{{1}}
答案 1 :(得分:2)
以下非易失性函数将执行此操作:
=SUMPRODUCT(($A$1:$C$1=H$1)*($A$2:$C$21>=$G2)*($A$2:$C$21<=$F2)*($A$2:$C$21))/SUMPRODUCT(($A$1:$C$1=H$1)*($A$2:$C$21>=$G2)*($A$2:$C$21<=$F2))
修改强>
当另一列在约束内时,获取结果列的平均值。在第一个SUMPRODUCT()中更改第四个标准:
=SUMPRODUCT(($A$1:$C$1=H$1)*($A$2:$C$21>=$G2)*($A$2:$C$21<=$F2)*($D$2:$D$21))/SUMPRODUCT(($A$1:$C$1=H$1)*($A$2:$C$21>=$G2)*($A$2:$C$21<=$F2))
<强> EDIT2 强>
另一个非易失性和非数组的选项:
=AVERAGEIFS(D:D,INDEX(A:C,0,MATCH(H$1,1:1,0)),">=" & G4,INDEX(A:C,0,MATCH(H$1,1:1,0)),"<=" &F4)