是的,您需要使用 MATCH。
我认为最简单的方法是使用 OFFSET 函数:-
=AVERAGE(OFFSET(B1,MATCH(E2,A2:A11,0)-D2,0,D2*2+1))
查找值在 E2 中,包含任一侧的单元格数在 D2 中。如果 D2 包含零,您只需获得与键 (25) 对应的值。 Lookup 和 Return 列不需要放在一起。
该示例包括 B 列中包含 9、16、25、36 和 49 的单元格,并给出答案 27。
我可能应该为单元格太靠近范围的结尾或开头而在时间允许时给出正确答案的情况添加错误处理。
这是带有错误处理的公式:-
=IFERROR(
IF(OR((MATCH(E2,A2:A11,0)-D2)<1,(MATCH(E2,A2:A11,0)+D2)>ROWS(B2:B11)),
"Out of range",
AVERAGE(OFFSET(B1,MATCH(E2,A2:A11,0)-D2,0,D2*2+1))),
"Not found")
以下是修改为在范围末端“逐渐减少”的公式,因此两侧的单元格数最多为 n,其中 n 是匹配单元格和范围末端之间的单元格数: -
=IFERROR(
AVERAGE(OFFSET(B$1,
MATCH(E2,A$2:A$11,0)-MIN(MATCH(E2,A$2:A$11,0)-1,ROWS(A$2:A$11)-MATCH(E2,A$2:A$11,0),D$2),0,
MIN(MATCH(E2,A$2:A$11,0)-1,ROWS(A$2:A$11)-MATCH(E2,A$2:A$11,0),D$2)*2+1)),
"Not found")
更新
INDEX 可能比 OFFSET 更受欢迎,因为它不是易失性的。
这是使用 INDEX 的两个公式:-
=IFERROR(
IF(OR((MATCH(E2,A2:A11,0)-D2)<1,(MATCH(E2,A2:A11,0)+D2)>ROWS(B2:B11)),
"Out of range",
AVERAGE(INDEX(B2:B11,MATCH(E2,A2:A11,0)-D2):INDEX(B2:B11,MATCH(E2,A2:A11,0)+D2) )),
"Not found")
和
=IFERROR(
AVERAGE(
INDEX(B$2:B$11,MATCH(E2,A$2:A$11,0)-MIN(MATCH(E2,A$2:A$11,0)-1,ROWS(A$2:A$11)-MATCH(E2,A$2:A$11,0),D$2)):
INDEX(B$2:B$11,MATCH(E2,A$2:A$11,0)+MIN(MATCH(E2,A$2:A$11,0)-1,ROWS(A$2:A$11)-MATCH(E2,A$2:A$11,0),D$2))),
"Not found")