哎,说到Excel里的“匹配”,这俩字儿听着简单,实际操作起来嘛,那真是有人欢喜有人愁。多少回了,对着两张看似差不多的表格,一个客户清单,一个销售记录,或者是个啥库存明细跟采购订单,就想把它们对起来,看看哪个客户买了啥,哪个库存对应哪个订单。眼睛盯得发酸,鼠标滚轮都快搓出火星子,一个一个人工去核对?想都别想,数据量稍微大一点,保准给你整到怀疑人生。而且错漏百出那是家常便饭,回头领导或者客户一句“这数据对不上啊”,得,从头再来。
所以说,“匹配”这活儿,在Excel里头简直是刚需,是生命线!它不是简单的把俩字儿搁一块儿,是基于某个共同的信息点,比如唯一的客户ID,或者独一无二的商品编码,把散落在不同表里的相关数据关联起来。一旦这个关联建立起来,你就能轻松调取、汇总、分析,那效率,“蹭”一下就上去了。
那这玩意儿到底怎么搞呢?其实Excel提供了好几个“武器”让你去匹配。最最最经典的,可能也是被提及最多的,就是那个有点儿年纪、但依然战斗在第一线的老兵——VLOOKUP。
你可能听过它的鼎鼎大名,甚至被它的语法搞得头大过。它的基本想法是:你给我一个要查找的东西(比如一个客户ID),我到你指定的另一张表格或者区域的第一列去找到它,找到之后呢,你告诉我你想要这一行里的第几列的数据,我就给你拎出来。
公式长这样:=VLOOKUP(查找值, 查找区域, 返回列序数, [匹配模式])
听着是不是有点儿像绕口令?拆开了说:
* 查找值:就是你要去别处找谁,比如单元格 A2 里的客户ID。
* 查找区域:你要去哪儿找?这是个区域,比如 Sheet2!A:C。敲黑板!VLOOKUP有个脾气,它只能在查找区域的第一列找你的“查找值”,而且只能往右边找。也就是说,如果你想根据名字找ID,而名字在第二列,ID在第一列,VLOOKUP就干不了这活儿。这是它的一个先天不足。
* 返回列序数:找到查找值所在的那一行了,你想把这一行的第几列数据拿回来?数一下,从查找区域的第一列开始数,比如第三列就是3。
* [匹配模式]:这个参数巨重要!它决定了你是要精确匹配还是模糊匹配。绝大多数时候,咱们都是需要精确匹配的,也就是要找到一模一样的那个查找值。这时候,这个参数要写 FALSE 或者数字 0。如果你写 TRUE 或省略(默认是TRUE),那就是模糊匹配,它会找近似的值,那个特别容易出错,一般用在查找某个数值所在区间这种特定场景,日常匹配数据千万别忘了写 FALSE 或 0!
实际操作中,比如你在 Sheet1 有个客户ID列表,你想把 Sheet2 里对应的客户姓名和联系方式匹配过来。 Sheet2 的数据是客户ID在A列,姓 D列,电话在 E列。在 Sheet1 的 B列你想放姓名, C列放电话。
在 Sheet1 的 B2 单元格输入 =VLOOKUP(A2, Sheet2!$A:$E, 4, FALSE)。
在 Sheet1 的 C2 单元格输入 =VLOOKUP(A2, Sheet2!$A:$E, 5, FALSE)。
注意那个 Sheet2!$A:$E 里的 $ 符号,这是绝对引用,意味着你往下拖动公式的时候,查找区域不会变,这个必须加,否则你拖下去公式就全乱套了!然后向下填充公式,Duang!数据就匹配过来了。如果 Sheet2 里找不到 A2 的那个客户ID,公式会返回 #N/A,表示“没找到”。
VLOOKUP 虽然好用,但这“只能向右查”的毛病,有时候真让人头疼。尤其碰到那些“奇葩”表格,你想找的那个唯一标识偏偏不在第一列,或者返回数据在唯一标识的左边,这时候怎么办?
别急,Excel里还有一对黄金搭档,功能更强大,更灵活,可以弥补 VLOOKUP 的不足,那就是 INDEX+MATCH 组合!
这俩函数单独拿出来可能你觉得不常用,但它们一旦组合起来,那威力可不一般。
MATCH 函数是干嘛的?它就是个“定位器”。你给它一个要查找的值,一个查找的区域(可以是一列或一行),它就告诉你这个值在区域里的位置(第几个)。
公式:=MATCH(查找值, 查找区域, [匹配模式])
参数跟 VLOOKUP 里的差不多,匹配模式也一样,精确匹配用 0。比如 =MATCH("张三", Sheet2!D:D, 0),如果张三在 Sheet2 的 D列第10行,它就返回 10。
那 INDEX 函数呢?它是“取值器”。你给它一个区域,再告诉它你要这个区域里第几行第几列的值,它就给你拎出来。
公式:=INDEX(区域, 行序数, [列序数])
比如 =INDEX(Sheet2!$A:$E, 10, 5),就是取 Sheet2 的 A到E列组成的区域里,第10行第5列的值。
把 MATCH 和 INDEX 组合起来匹配数据,思路是这样的:
1. 用 MATCH 函数,根据你要查找的值(比如 Sheet1 的客户ID),在另一张表(Sheet2)的唯一标识列(比如客户ID列)找到它所在的行号。
2. 用 INDEX 函数,指定要返回数据所在的列(比如姓名列),然后把刚刚 MATCH 找到的行号给 INDEX,让它去那一行里把数据拿出来。
公式大概是这样:=INDEX(要返回数据的列区域, MATCH(查找值, 查找值所在列区域, 0))
举例:还是 Sheet1 的客户ID列表,想从 Sheet2 匹配姓名(在D列)。
在 Sheet1 的 B2 输入:=INDEX(Sheet2!$D:$D, MATCH(A2, Sheet2!$A:$A, 0))
这个公式的意思是:到 Sheet2 的 D列去取值,取哪一行的值呢?取 Sheet2 的 A列里跟 A2 内容精确匹配的那一行!
你看,这种方式里,你要查找的值(A列)和要返回的值(D列)可以不在查找区域的第一列,也不限制返回列在查找列的右边,是不是比 VLOOKUP 灵活多了?这个组合是Excel高手们匹配数据时的杀手锏!当然,语法稍微复杂一丢丢,但理解了逻辑就不难了。
近些年,Excel出了个新函数,算是 VLOOKUP 和 INDEX+MATCH 的“集大成者”,语法更直观,功能更强大,可惜不是所有版本都有(主要在 Office 365 和 Excel 2021 里)。它就是——XLOOKUP!
XLOOKUP 的语法友好多了,也更直观:
=XLOOKUP(查找值, 查找数组, 返回数组, [找不到时返回什么], [匹配模式], [查找模式])
- 查找值:跟之前一样,你要找谁。
- 查找数组:你要在哪个区域(通常是一列)去找查找值。
- 返回数组:找到后,你想从哪个区域(通常是一列)把数据拿回来。注意,这里直接指定的是返回数据的那一列,而不是像
VLOOKUP那样指定一个大区域再数第几列,也不是像INDEX那样指定返回区域再给行号,直观太多! - [找不到时返回什么]:这个参数超实用!如果没找到查找值,你不想看到
#N/A?可以在这里指定返回一个文本(比如“未找到”)或者其他值。VLOOKUP和INDEX+MATCH想实现这个效果,得套一层IFERROR函数,XLOOKUP直接内置了。 - [匹配模式]:跟
VLOOKUP,MATCH类似,0代表精确匹配,这也是默认值。 - [查找模式]:这个更高级,可以指定是从上往下找还是从下往上找,甚至可以用二分查找等等。一般用默认值就行。
用 XLOOKUP 匹配刚才的例子:
在 Sheet1 的 B2 输入:=XLOOKUP(A2, Sheet2!$A:$A, Sheet2!$D:$D, "未找到姓名")
是不是简洁明了?找到 Sheet2 的 A列里等于 A2 的那一行,然后返回 Sheet2 的 D列同一行的数据。如果找不到,就显示“未找到姓名”。简直不要太方便!
好了,讲完了几个主要的匹配函数,但这事儿还没完。 想把数据匹配好,光会函数是远远不够的!我见过太多人,函数公式写得溜溜的,结果匹配出来的数据一塌糊涂,为啥?根源不在函数,在数据本身!
首要也是最重要的一点:唯一标识!唯一标识!唯一标识!(重要的事情说三遍!) 你要用来匹配的那一列,比如客户ID、商品编码、订单号,它必须是唯一的!如果你的客户ID列里有两个“A001”,你让函数去查“A001”,它找到第一个就停下了,后面的那个就被忽略了。或者更糟,它可能返回你意想不到的结果。所以,在匹配之前,务必确认你的唯一标识列是干净的,没有重复值。怎么检查重复?条件格式里有高亮重复值的选项,或者用数据透视表也能看出来。数据清洗这一步,看着枯燥,但它是匹配成功的地基,地基不牢,上层建筑随时塌!
其次是数据格式问题。这是个巨坑!比如,这边是数字格式的“123”,那边是文本格式的“123”,肉眼看一模一样,函数可不认!它觉得这是两码事儿,匹配?没门儿!还有那些看不见的空格、制表符、换行符,甚至是非打印字符,都能让你的精确匹配失灵。我就踩过这种坑,对着公式百思不得其解,最后眼睛都要瞪出血了才发现,哎呀,源数据里有个空格!解决办法?可以用 TRIM 函数去掉首尾空格,或者用“查找替换”功能把恼人的空格、特殊字符都干掉。有时候,直接把那一列的数据格式“重置”一下,比如先设置成文本,再设置成数字,也能解决一部分问题。
还有,精确匹配和模糊匹配别搞混了。记住,绝大多数需要把一份清单的数据跟另一份清单对起来的时候,都是要找一模一样的那个,所以匹配模式请老老实实写 FALSE 或 0!除非你确实是要找某个数值所在的区间,比如查找某个分数对应的等级(0-60不及格,60-70及格...),这时候才考虑模糊匹配(TRUE 或 1),而且用来查找的那一列数据必须是升序排列的!否则结果也是错的。
另外,绝对引用($ 符号)别忘了加!如果你要匹配多行数据,公式需要向下填充,查找区域必须是固定的,否则你的查找范围就跑偏了。这是个特别低级但特别容易犯的错误,尤其对于新手来说。
有时候,你可能不是要把整个数据匹配过来,只是想知道有没有另一张表里的数据。这时候可以用 COUNTIF 或者 COUNTIFS 函数。比如想知道 Sheet1 的客户ID有没有出现在 Sheet2 里,可以在 Sheet1 用公式 =COUNTIF(Sheet2!$A:$A, A2)。如果结果大于0,就说明在 Sheet2 里找到了对应的ID。这种方法可以用来快速核对哪些数据是双方都有的,哪些是独有的。
再或者,你想找出两份清单里不一样的地方,除了 COUNTIF,还可以利用条件格式。选中要对比的两列(或者整个区域),在条件格式里选择“突出显示单元格规则” -> “重复值”,它会高亮显示重复的。如果你想找不重复的(也就是独有的),可以先把一列复制到另一列下面,然后高亮重复项,那些没有被高亮的,就是独有的数据了。虽然不是函数匹配,但这思路也是在做一种对齐和核对。
总而言之,Excel里的匹配,不仅仅是输入一个函数那么简单。它是一套组合拳:首先得确保你的源数据是干净的,特别是作为唯一标识的那一列,必须唯一且格式正确;然后根据你的需求、Excel版本以及数据结构,选择合适的匹配函数(VLOOKUP, INDEX+MATCH, XLOOKUP 等);使用函数时,精确匹配参数别写错,绝对引用别忘了加。多练多试,理解每个函数的逻辑和脾气,才能真正把匹配这活儿干得漂亮,从对着表格抓瞎到轻松搞定数据关联,这中间的效率提升和成就感,谁用谁知道!
【excel表格怎么做匹配】相关文章:
excel2007行高怎么设置12-06
怎么用excel画函数图12-06
怎么筛选出excel中重复数据12-06
excel成绩排序怎么排12-06
excel对数函数怎么输入12-06
excel怎么把字放中间12-06
excel表格怎么做匹配12-06
excel中合格率怎么算12-06
Excel表格加密忘记密码怎么办?12-06
怎么用Excel求回归方程?12-06
excel表格怎么转换成pdf格式12-06
excel表格rank函数怎么用12-06
excel没有数据分析怎么办12-06