Excel中如何使用查找函数返回行内指定值对应列号/列头
需求背景
- 搭建机构业务电子表格时,需要通过查找类函数实现:指定门店编号+指定员工姓名,定位该姓名在对应门店行的所在列,可选择返回列号,或是返回对应列顶部的职位信息,例:定位编号56213的门店行中Adam的位置,返回其职位VP
- 实际数据规模为数千行,限制条件:无法对数据表做转置操作,无法提前将所有用户单独整理为可搜索数组
- 表结构参考:

可直接落地的公式方案
所有方案均不需要转置数据、不需要提前整理用户数组,适配数千行数据的计算效率。
新版电子表格(Excel 365/2021、最新版WPS)写法
用双层XLOOKUP实现,逻辑最简洁:
1. 返回对应职位
=XLOOKUP("Adam",XLOOKUP(56213,A:A,B:Z),B1:Z1)
公式逻辑:
- 内层XLOOKUP先在A列(门店编号列)匹配56213,返回该门店对应行中B列到Z列(即所有存员工姓名的列,可根据实际表宽度调整范围)的全部内容
- 外层XLOOKUP在刚才返回的目标门店行内容中匹配"Adam",最终返回B1:Z1(表头职位行,列范围和前面的姓名列范围保持一一对应)同位置的值,即为目标员工的职位
2. 返回对应列号
把外层返回的结果区域替换为列号函数即可:
=XLOOKUP("Adam",XLOOKUP(56213,A:A,B:Z),COLUMN(B:Z))
全版本兼容写法(支持所有旧版Excel、全版本WPS)
如果使用的版本没有XLOOKUP函数,用INDEX+MATCH双匹配组合即可,兼容性覆盖所有主流电子表格版本:
1. 返回对应职位
=INDEX(B$1:Z$1,MATCH("Adam",INDEX(B:Z,MATCH(56213,A:A,0),0),0))
公式逻辑:
- 最内层MATCH先定位56213这个门店编号在A列的行号
- 中间层INDEX提取该门店行从B列到Z列的整行姓名内容
- 外层MATCH定位"Adam"在这一行姓名内容里的位置序号
- 最外层INDEX从表头职位行B1:Z1中,提取对应位置的职位值
2. 返回对应列号
替换最外层的取值区域为列号函数即可:
=INDEX(COLUMN(B:Z),MATCH("Adam",INDEX(B:Z,MATCH(56213,A:A,0),0),0))
使用提示:实际使用时,把公式里写死的门店编号、员工姓名替换成对应引用单元格即可,B:Z、B1:Z1的列范围请根据你表格的实际列宽调整,范围不要包含门店编号列即可。
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

