如何避免重复编辑30个行范围偏移的INDEX/MATCH公式?
哎呀,手动写30次长公式可太折磨人了!别慌,给你几个省心的办法,不用重复编辑,轻松搞定:
这个方法靠ROW函数帮我们自动计算每个数据块的起始/结束行,写完第一个公式直接往下拉就行。
比如你把第一个公式放在A1单元格,公式改成这样:=INDEX(INDIRECT("Fixtures!$F$"&10+(ROW(A1)-1)*19&":$F$"&10+(ROW(A1)-1)*19+14),MATCH(T!$C$4,INDIRECT("Fixtures!$E$"&10+(ROW(A1)-1)*19&":$E$"&10+(ROW(A1)-1)*19+14),0),1)
为啥这么写?
ROW(A1)下拉时会自动变成ROW(A2)、ROW(A3)…对应第1、2、3…个数据块10+(ROW(A1)-1)*19计算每个数据块的起始行:第一个是10,第二个是10+19=29,第三个10+38=48,刚好匹配你的需求10+(ROW(A1)-1)*19+14是结束行(因为F10:F24是15行,24-10=14,所以起始行加14就是结束行)
OFFSET函数可以直接基于一个基准单元格偏移生成范围,写法比INDIRECT更简洁:=INDEX(OFFSET(Fixtures!$F$10,(ROW(A1)-1)*19,0,15,1),MATCH(T!$C$4,OFFSET(Fixtures!$E$10,(ROW(A1)-1)*19,0,15,1),0),1)
细节说明:
OFFSET(Fixtures!$F$10,(ROW(A1)-1)*19,0,15,1)意思是:从F10开始,向下偏移(ROW(A1)-1)*19行,列不偏移,取15行1列的范围,正好对应你的每个数据块- 注意: OFFSET是易失性函数,每次工作表有变动都会重新计算,不过30个公式的话完全不会有性能问题
如果你的Excel支持动态数组(比如365或2021版本),那直接一个公式就能生成30个结果,连下拉都省了:=INDEX(OFFSET(Fixtures!$F$10,SEQUENCE(30,,0,19),0,15,1),MATCH(T!$C$4,OFFSET(Fixtures!$E$10,SEQUENCE(30,,0,19),0,15,1),0),1)
原理:SEQUENCE(30,,0,19)会生成0、19、38…一直到第30个偏移量,一次性对应所有30个数据块,公式会自动“溢出”出30个结果,完美替代手动下拉30次!
小提示: 如果你的起始单元格不是A1(比如从B5开始),把公式里的ROW(A1)-1改成ROW(B5)-5,这样下拉时计数还是从0开始,保证偏移量正确。
内容的提问来源于stack exchange,提问作者user4630731

