如何设置VLOOKUP向右拖动时表格区域按两列递增?
解决VLOOKUP向右拖动时table_array递增2列的问题
嘿,这个需求我太熟悉了——默认的单元格引用规则只会让table_array逐列平移,要实现每次跳2列的效果,得用点小技巧,给你三个实用方案:
方案1:用INDEX+MATCH组合(推荐,性能更稳定)
INDEX+MATCH本身就比VLOOKUP更灵活,能精准控制我们要引用的列范围。把原来的公式换成这个:
=INDEX($S:$X,MATCH($Q$3,INDEX($S:$X,,1+(COLUMN(A1)-1)*2),0),2+(COLUMN(A1)-1)*2)
- 原理:
COLUMN(A1)会随着单元格向右拖动依次返回1、2、3...,通过(COLUMN(A1)-1)*2生成0、2、4...的偏移量,让匹配列和返回列每次跳2列 - 好处:非易失性函数,数据量大的时候不会拖慢表格性能
方案2:用OFFSET函数快速实现
如果追求简单直接,可以用OFFSET来偏移整个table_array区域:
=VLOOKUP($Q$3,OFFSET($S:$T,,(COLUMN(A1)-1)*2),2,FALSE)
- 原理:
OFFSET($S:$T,,N)表示把S:T区域向右偏移N列,(COLUMN(A1)-1)*2让每次拖动时偏移量增加2,正好得到U:V、W:X...这样的区域 - 注意:OFFSET是易失性函数,表格数据特别多的时候可能会有轻微卡顿
方案3:用INDIRECT函数(仅适合列数不多的场景)
如果你的数据列没超过Z列,可以用ASCII码来生成列标:
=VLOOKUP($Q$3,INDIRECT(CHAR(83+(COLUMN(A1)-1)*2)&":"&CHAR(84+(COLUMN(A1)-1)*2)),2,FALSE)
- 原理:83是字母S的ASCII码,84是T的,每次加2就能得到U(85)、V(86)、W(87)...这样的列标
- 缺点:列数超过Z后会失效,而且可读性较差,不推荐大规模使用
小提示
拖动公式前,记得把$Q$3的引用保持绝对引用(带$符号),这样拖动时不会改变要查找的目标值,这一步你已经做对啦👍
内容的提问来源于stack exchange,提问作者ionutzul
相关产品推荐
相关产品推荐

