如何匹配Excel行与列并使用VLOOKUP获取对应值?
跨工作表按索引+分类匹配取值的解决方法
现有表格
工作表1(Table1)
| 索引 | 分类 |
|---|---|
| 1234 | 汽车 |
| 5678 | 火车 |
| 9101 | 摩托车 |
| 177 | 摩托车 |
工作表2(Table2)
| 索引 | 汽车 | 火车 | 摩托车 |
|---|---|---|---|
| 1234 | 100 | 150 | 15 |
| 5678 | - | 200 | 167 |
| 344 | 355 | 455 | 156 |
需求与期望结果
需要根据Table1的索引和分类,匹配Table2中对应位置的值,生成带「取值」列的结果表,期望效果如下:
| 索引 | 分类 | 取值 |
|---|---|---|
| 1234 | 汽车 | 100 |
| 5678 | 火车 | 200 |
| 9101 | 摩托车 | - |
| 177 | 摩托车 | - |
原公式问题分析
你用的公式vlookup('Table1'!A2,"Table2"!A:D,Match(B2,'Table2'A1:D1))有3个错误:
- Table2的区域引用多了引号,应该是
Table2!A:D而非"Table2"!A:D - MATCH函数里的表头引用缺少感叹号,正确写法是
Table2!A1:D1 - 没有指定精确匹配参数,且未处理索引不存在的异常情况
修正后的可用公式
方法1:兼容多数Excel版本(VLOOKUP+MATCH+IFERROR)
在Table1的「取值」列第一个单元格(比如C2)输入以下公式,下拉填充即可:
=IFERROR(VLOOKUP(A2, Table2!A:D, MATCH(B2, Table2!A1:D1, 0), FALSE), "-")
MATCH(B2, Table2!A1:D1, 0):精确找到分类对应的列序号VLOOKUP(A2, Table2!A:D, 列序号, FALSE):按索引精确匹配,返回对应列的值IFERROR(..., "-"):当索引在Table2中找不到时,返回「-」
方法2:新版Excel简化写法(XLOOKUP)
如果用的是Excel 365或2021及以上版本,用XLOOKUP更简洁:
=IFERROR(XLOOKUP(A2, Table2!A:A, XLOOKUP(B2, Table2!A1:D1, Table2!A:D)), "-")
- 内层XLOOKUP先定位到分类对应的整列
- 外层XLOOKUP再按索引在该列中取值
- 同样用IFERROR处理无匹配的情况
内容的提问来源于stack exchange,提问作者Andrew Pike
相关产品推荐
相关产品推荐

