当前位置: 首页 > news >正文

Excel VLOOKUP函数完全教程:从基础到高级实战

Excel VLOOKUP函数完全教程:从基础到高级实战

文章目录

  • Excel VLOOKUP函数完全教程:从基础到高级实战
    • 一、VLOOKUP基础:语法与核心参数
      • 1. 函数语法
      • 2. 参数详解
      • 3. 关键规则(必看)
    • 二、基础VLOOKUP实战:9个高频场景
      • 场景1:精确匹配(最常用)
      • 场景2:近似匹配(用于范围判断)
      • 场景3:区分大小写的查找
      • 场景4:从右到左查找(反向查找)
      • 场景5:查找第2个/第n个匹配值
      • 场景6:通配符部分匹配
      • 场景7:跨工作表查找
      • 场景8:跨工作簿查找
      • 场景9:替换0或#N/A错误值
    • 三、高级VLOOKUP技巧:9个进阶场景
      • 场景1:双向查找(行+列同时匹配)
      • 场景2:多条件匹配(两个及以上条件)
      • 场景3:返回多个匹配值(垂直/水平)
      • 场景4:返回匹配值的整行数据
      • 场景5:嵌套VLOOKUP(跨多表查找)
      • 场景6:检查值是否存在于另一列
      • 场景7:VLOOKUP并求和(行/列)
      • 场景8:根据关键列合并两个表
      • 场景9:跨多个工作表匹配
    • 四、VLOOKUP匹配值保留格式:4个实用技巧
      • 技巧1:保留单元格颜色和字体格式
      • 技巧2:保留日期格式
      • 技巧3:保留单元格批注
      • 技巧4:处理“数字存储为文本”的匹配
    • 五、常见问题与注意事项

VLOOKUP(Vertical Lookup,垂直查找)是Excel中最实用的函数之一,可快速在数据区域的左侧列查找目标值,并返回同一行中指定列的结果。本教程基于实战场景,从函数基础到高级技巧,覆盖初学者到进阶用户的核心需求,包含20+实用示例,帮你彻底掌握VLOOKUP的用法。

一、VLOOKUP基础:语法与核心参数

在学习示例前,必须先理解VLOOKUP的语法结构——这是正确使用函数的前提。

1. 函数语法

VLOOKUP函数的完整公式格式为:

=VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])

2. 参数详解

四个参数中,前三个为必需参数,最后一个为可选参数,具体作用如下表:

参数名称作用说明注意事项
lookup_value要查找的目标值(可是数字、文本、日期或单元格引用)必须位于table_array第一列,否则无法查找
table_array查找范围(包含“查找列”和“结果列”的数据区域)建议用绝对引用(如$A$2:$D$7),避免复制公式时范围偏移
col_index_num结果列在table_array中的“列号”(从左数第1列记为1)列号不能超过table_array的总列数,否则返回#VALUE!错误
[range_lookup]逻辑值,控制“精确匹配”或“近似匹配”(默认省略时为近似匹配)精确匹配填FALSE(或0),近似匹配填TRUE(或1),初学者优先用FALSE

3. 关键规则(必看)

VLOOKUP有3个核心限制,使用前必须牢记:

  1. 只能从左到右查找:目标值必须在查找范围的第一列,无法直接从右列查找左列数据(需高级技巧解决);
  2. 不区分大小写:默认将“Apple”和“apple”视为同一值,区分大小写需额外处理;
  3. 仅返回第一个匹配值:若存在多个相同目标值,仅返回最上方的第一个结果。

二、基础VLOOKUP实战:9个高频场景

基础示例覆盖日常办公中80%的VLOOKUP使用场景,每个示例均包含“场景描述+数据表格+公式+解析”。

场景1:精确匹配(最常用)

需求:根据学生ID(如C1005)查找对应的数学成绩,要求结果完全匹配。
数据表格

行号A(ID)B(姓名)C(数学)D(化学)E(目标ID)F(结果)
2A1001Emily4970C1005?
3A1002James7858
4B1003Nicol10096
5C1004Hedy9298
6C1005Mario6179

公式(输入到F2单元格):

=VLOOKUP(E2,$A$2:$D$7,3,FALSE)

解析

  • E2:目标值(C1005);
  • $A$2:$D$7:查找范围(ID列到化学列,绝对引用避免偏移);
  • 3:结果列是“数学”(在范围中从左数第3列);
  • FALSE:精确匹配,确保只有ID完全一致时才返回结果。

结果:F2单元格返回61(Mario的数学成绩);若目标ID不存在,返回#N/A错误。

场景2:近似匹配(用于范围判断)

需求:根据订单量(如60、268)查找对应的折扣,无精确订单量时返回“小于目标值的最大折扣”。
数据表格(需按“订单量”升序排序!):

行号A(订单量)B(折扣)C(目标订单量)D(结果折扣)
215%60?
32010%268?
45015%685?
510022%
620030%
730045%

公式(输入到D2单元格):

=VLOOKUP(C2,$A$2:$B$9,2,TRUE)

解析

  • TRUE:近似匹配,需满足“查找范围第一列(订单量)升序排序”;
  • 示例:目标订单量60,无精确匹配,返回小于60的最大订单量(50)对应的折扣15%。

注意:近似匹配若不排序,结果会混乱甚至错误!

场景3:区分大小写的查找

需求:ID列包含大小写(如A1001、a1001),需严格区分大小写查找对应的数学成绩(默认不区分)。
数据表格

行号A(ID)B(姓名)C(数学)D(目标ID)E(结果)
2A1001Emily49a1001?
3b1003James78B1003?
4C1004Nicol100d1006?
5a1001Hedy87
6B1003Mario61

公式(二选一,需按Ctrl+Shift+Enter确认数组公式):

# 公式1:INDEX+MATCH+EXACT
=INDEX($C$2:$C$10,MATCH(TRUE,EXACT(D2,$A$2:$A$10),0))# 公式2:LOOKUP+EXACT(无需数组确认,Excel 365适用)
=LOOKUP(2,1/EXACT(D2,$A$2:$A$10),$C$2:$C$10)

解析EXACT(D2,$A$2:$A$10)严格对比大小写,返回TRUE/FALSE数组,再通过MATCH找到TRUE的位置,最终用INDEX返回成绩。

场景4:从右到左查找(反向查找)

需求:根据“年龄”(右列)查找对应的“姓名”(左列),VLOOKUP默认无法实现,需结合INDEX+MATCH
数据表格

行号A(ID)B(姓名)C(性别)D(年龄)E(目标年龄)F(结果姓名)
2AA-1001EmilyF2921?
3BB-1002JamesM3538?
4CC-1003NicolF21
5DD-1004HedyF56
6EE-1005AnnyF38

公式(输入到F2单元格):

=INDEX($B$2:$B$6,MATCH(E2,$D$2:$D$6,0))

解析

  • MATCH(E2,$D$2:$D$6,0):先找到“目标年龄”在D列的行号(如21在第4行);
  • INDEX($B$2:$B$6,行号):根据行号从B列(姓名)返回结果(Nicol)。

场景5:查找第2个/第n个匹配值

需求:同一姓名(如Emily)购买了多门培训课程,需查找她的第2门课程。
数据表格

行号A(姓名)B(课程)C(目标姓名)D(目标次数)E(结果)
2EmilyExcelEmily2?
3JamesExcel
4EmilyPowerpoint
5HedyWord
6EmilyOutlook

公式(输入到E2,按Ctrl+Shift+Enter确认):

=INDEX($B$2:$B$14,SMALL(IF(C2=$A$2:$A$14,ROW($A$2:$A$14)-ROW($A$2)+1),D2))

解析

  • IF(C2=$A$2:$A$14,...):筛选出Emily对应的所有行号,生成行号数组;
  • SMALL(...,D2):取数组中第2小的行号(即第2个匹配的位置);
  • INDEX:根据行号返回对应课程(Powerpoint)。

修改:若要找第3个匹配值,将D2改为3即可。

场景6:通配符部分匹配

需求:根据“部分姓名”(如Dave)查找对应的分数,无需输入全名(如Dave Bell)。
数据表格

行号A(全名)B(ID)C(分数)D(目标部分名)E(结果)
2Jon BaderA-100149Dave?
3Angel BanksA-100278Carol?
4Carol AvilesB-1003100Erica?
5Dave BellD-100685
6Erica StoneE-100843

公式(输入到E2):

=VLOOKUP(D2&"*",$A$2:$C$11,3,FALSE)

解析

  • D2&"*":通配符*表示“任意字符”,Dave*即“以Dave开头的所有字符串”;
  • 其他通配符用法:
    • 以目标值结尾:"*"&D2(如*Banks匹配Angel Banks);
    • 包含目标值:"*"&D2&"*"(如*Bell*匹配Dave Bell)。

场景7:跨工作表查找

需求:在“Lookup sheet”中,根据姓名查找“Data sheet”中的分数(两个工作表位于同一工作簿)。
工作表结构

  • Data sheet:包含A(姓名)、B(ID)、C(分数);
  • Lookup sheet:A(目标姓名)、B(结果分数)。

公式(在Lookup sheet的B2单元格输入):

=VLOOKUP(A2,'Data sheet'!$A$2:$C$15,3,0)

解析

  • 'Data sheet'!$A$2:$C$15:跨工作表引用格式,工作表名带空格需加单引号;
  • 若工作表名无空格(如Datasheet),可简化为Datasheet!$A$2:$C$15

场景8:跨工作簿查找

需求:在“Order price.xlsx”中,根据产品(如Apple)查找“Product list.xlsx”中的成本。
公式(在Order price.xlsx的D2单元格输入):

=VLOOKUP(B2,'[Product list.xlsx]Sheet1'!$A$2:$B$6,2,0)

解析

  • '[Product list.xlsx]Sheet1'!$A$2:$B$6:跨工作簿引用格式,工作簿名用[]包裹;
  • 若“Product list.xlsx”已关闭,公式会自动补充文件路径(如C:\Users\Desktop\[Product list.xlsx]Sheet1'!$A$2:$B$6)。

场景9:替换0或#N/A错误值

需求:VLOOKUP返回0(匹配到空白单元格)或#N/A(无匹配)时,显示空白或自定义文本(如“无数据”)。
公式(二选一):

# 1. 匹配到空白返回空白,无匹配返回“无数据”
=IF(ISNA(VLOOKUP(C2,$A$2:$B$10,2,FALSE)),"无数据",IF(VLOOKUP(C2,$A$2:$B$10,2,FALSE)="","",VLOOKUP(C2,$A$2:$B$10,2,FALSE)))# 2. Excel 2019+简化版(IFERROR+IF)
=IFERROR(IF(VLOOKUP(C2,$A$2:$B$10,2,FALSE)="","",VLOOKUP(C2,$A$2:$B$10,2,FALSE)),"无数据")

解析

  • ISNA(...):判断是否为#N/A错误;
  • IF(...)="":判断匹配结果是否为空白,避免返回0。

三、高级VLOOKUP技巧:9个进阶场景

高级技巧解决复杂需求,需结合其他函数(如MATCH、INDEX、SUMPRODUCT),是提升Excel效率的关键。

场景1:双向查找(行+列同时匹配)

需求:根据“产品(Peach)”和“季度(Q3)”,查找对应的销售额(需同时匹配行和列)。
数据表格

行号A(产品)B(Q1)C(Q2)D(Q3)E(Q4)F(目标产品)G(目标季度)H(结果)
2Apple569769987337PeachQ3?
3Orange979502556685
4Peach424832385453

公式(输入到H2):

=VLOOKUP(F2,$A$2:$E$7,MATCH(G2,$A$2:$E$2,0),FALSE)

解析

  • MATCH(G2,$A$2:$E$2,0):先找到“Q3”在第2行的列号(第4列);
  • VLOOKUP(F2,...):根据“Peach”找到行,再用MATCH的列号返回Q3销售额(385)。

场景2:多条件匹配(两个及以上条件)

需求:根据“产品(T-shirt)”和“尺寸(Medium)”,查找对应的价格(单条件VLOOKUP无法实现)。
数据表格

行号A(产品)B(尺寸)C(颜色)D(价格)E(目标产品)F(目标尺寸)G(结果)
2HoodieLargeBlack49T-shirtMedium?
3T-shirtSmallRed20
4T-shirtMediumRed22

公式(二选一):

# 公式1:LOOKUP(无需数组确认)
=LOOKUP(2,1/($A$2:$A$12=E1)/($B$2:$B$12=F1),$D$2:$D$12)# 公式2:INDEX+MATCH(兼容性更强)
=INDEX($D$2:$D$12,MATCH(1,($A$2:$A$12=E1)*($B$2:$B$12=F1),0))

解析

  • $A$2:$A$12=E1$B$2:$B$12=F1:两个条件分别筛选产品和尺寸,返回TRUE/FALSE
  • 1/(...):将TRUE转为1,FALSE转为错误值,LOOKUP会跳过错误值取最后一个1对应的价格。

场景3:返回多个匹配值(垂直/水平)

需求:查找“国家(US)”对应的所有姓名,垂直排列在一列中。
数据表格

行号A(国家)B(城市)C(姓名)D(目标国家)E(结果)
2USNew YorkCarloUS?
3FranceParisKevin?
4USWashingtonTom?
5USWashingtonAdam?

公式(输入到E2,按Ctrl+Shift+Enter,再向下复制):

=IFERROR(INDEX($C$2:$C$14,SMALL(IF($A$2:$A$14=$D$2,ROW($A$2:$A$14)-ROW($A$2)+1),ROW()-1)),"")

解析

  • ROW()-1:向下复制时,自动递增取第1、2、3…个匹配值;
  • IFERROR(..., ""):无更多匹配值时显示空白,避免错误。

场景4:返回匹配值的整行数据

需求:根据“产品(T-shirt)”,返回该产品对应的“尺寸、颜色、价格”整行信息。
数据表格

行号A(产品)B(尺寸)C(颜色)D(价格)E(目标产品)F(尺寸)G(颜色)H(价格)
2HoodieLargeBlack49T-shirt???
3T-shirtSmallRed20
4T-shirtLargeOrange25

公式(输入到F2,向右复制到H2):

=VLOOKUP($E$2,$A$1:$D$12,COLUMN(A1),FALSE)

解析

  • COLUMN(A1):向右复制时,自动从1→2→3(对应尺寸、颜色、价格列);
  • $E$2:绝对引用目标产品,确保整行查找的是同一产品。

场景5:嵌套VLOOKUP(跨多表查找)

需求:先根据“产品(Sweater)”在表1找“销售员(Kevin)”,再在表2找Kevin的“销售额(650)”。
数据表格

表1(产品-销售员)A(产品)B(销售员)表2(销售员-销售额)C(销售员)D(销售额)结果表E(产品)F(销售额)
行2HoodieJener行2Jener500行2Sweater?
行3T-shirtLinda行3Linda480行3Trousers?
行4SweaterKevin行4Kevin650

公式(输入到F2):

=VLOOKUP(VLOOKUP(E2,$A$2:$B$7,2,0),$C$2:$D$7,2,0)

解析

  • 内层VLOOKUP(E2,$A$2:$B$7,2,0):根据Sweater找到销售员Kevin;
  • 外层VLOOKUP(内层结果,$C$2:$D$7,2,0):根据Kevin找到销售额650。

场景6:检查值是否存在于另一列

需求:判断“目标姓名”(如Frank)是否在“姓名列表”中,返回“Yes/No”。
数据表格

行号A(姓名列表)B(目标姓名)C(结果)
2JenerFrank?
3LindaEmma?
4KevinSimone?
5EmmaNeela?

公式(输入到C2):

=IF(ISNA(VLOOKUP(B2,$A$2:$A$10,1,FALSE)),"No","Yes")

解析

  • VLOOKUP(B2,$A$2:$A$10,1,FALSE):在姓名列表中查找目标姓名,无匹配返回#N/A;
  • ISNA(...):判断是否为#N/A,是则返回No,否则返回Yes。

场景7:VLOOKUP并求和(行/列)

需求1:求和一行中所有匹配值
根据“产品(Hoodie)”,求和其1-5月的销售额。
公式

=SUM(VLOOKUP(H2,$A$2:$F$9,{2,3,4,5,6},FALSE))
  • {2,3,4,5,6}:指定求和的列(1-5月),用数组包裹;
  • SUM(...):对VLOOKUP返回的多列结果求和。

需求2:求和一列中所有匹配值
根据“月份(Jan)”,求和所有产品1月的销售额。
公式

=SUMPRODUCT(($B$2:$F$9)*($B$1:$F$1=H2))
  • $B$1:$F$1=H2:筛选出Jan列;
  • SUMPRODUCT(...):对筛选后的列求和。

场景8:根据关键列合并两个表

需求:根据“产品”这一关键列,将表1的“姓名”和表2的“订单量”合并为一个表。
数据表格

表1A(产品)B(姓名)表2C(产品)D(订单量)合并表E(产品)F(姓名)G(订单量)
行2HoodieJener行2Jacket240行2HoodieJener?
行3T-shirtLinda行3Hoodie488行3T-shirtLinda?

公式(输入到G2):

=INDEX($D$2:$D$8,MATCH($E2,$C$2:$C$8,0))

解析MATCH($E2,$C$2:$C$8,0)找到产品在表2的行号,INDEX返回对应订单量。

场景9:跨多个工作表匹配

需求:在“汇总表”中,根据ID(如AA1001)查找“表1、表2、表3”中的姓名(ID分别在三个表中)。
公式(用IFERROR嵌套多个VLOOKUP):

=IFERROR(VLOOKUP(A2,Sheet1!$A$2:$B$6,2,0),IFERROR(VLOOKUP(A2,Sheet2!$A$2:$B$6,2,0),VLOOKUP(A2,Sheet3!$A$2:$B$6,2,0)))

解析:先查Sheet1,无结果查Sheet2,最后查Sheet3,避免返回#N/A。

四、VLOOKUP匹配值保留格式:4个实用技巧

VLOOKUP默认只返回值,不保留原单元格格式(如颜色、日期格式、批注),需特殊处理。

技巧1:保留单元格颜色和字体格式

需通过VBA自定义函数实现,步骤如下:

  1. 右键工作表标签→查看代码,打开VBA编辑器;
  2. 在“工作表模块”粘贴以下代码(处理格式更新):
    Sub Worksheet_Change(ByVal Target As Range)Dim I As LongDim xKeys As LongDim xDicStr As StringOn Error Resume NextApplication.ScreenUpdating = FalsexKeys = UBound(xDic.Keys)If xKeys >= 0 ThenFor I = 0 To UBound(xDic.Keys)xDicStr = xDic.Items(I)If xDicStr <> "" ThenRange(xDic.Keys(I)).Interior.Color = Range(xDic.Items(I)).Interior.ColorRange(xDic.Keys(I)).Font = Range(xDic.Items(I)).FontElseRange(xDic.Keys(I)).Interior.Color = xlNoneEnd IfNextSet xDic = NothingEnd IfApplication.ScreenUpdating = True
    End Sub
    
  3. 插入→模块,粘贴以下代码(自定义查找函数):
    Public xDic As New Dictionary
    Function LookupKeepFormat(ByRef FndValue, ByRef LookupRng As Range, ByRef xCol As Long)Dim xFindCell As RangeOn Error Resume NextSet xFindCell = LookupRng.Find(FndValue, , xlValues, xlWhole)If xFindCell Is Nothing ThenLookupKeepFormat = ""xDic.Add Application.Caller.Address, ""ElseLookupKeepFormat = xFindCell.Offset(0, xCol - 1).ValuexDic.Add Application.Caller.Address, xFindCell.Offset(0, xCol - 1).AddressEnd If
    End Function
    
  4. 工具→引用,勾选“Microsoft Scripting Runtime”→确定;
  5. 返回工作表,使用自定义函数:
    =LookupKeepFormat(E2,$A$1:$C$10,3)
    

技巧2:保留日期格式

VLOOKUP返回日期时可能显示为数字(如44190),需用TEXT函数格式化:

=TEXT(VLOOKUP(E2,$A$2:$C$9,3,FALSE),"mm/dd/yyyy")
  • "mm/dd/yyyy":可改为"yyyy-mm-dd"(如2025-10-01)等格式。

技巧3:保留单元格批注

需VBA自定义函数,步骤如下:

  1. Alt+F11打开VBA编辑器,插入→模块,粘贴代码:
    Function VlookupComment(LookVal As Variant, FTable As Range, FColumn As Long, FType As Long) As VariantApplication.VolatileDim xRet As VariantDim xCell As RangexRet = Application.Match(LookVal, FTable.Columns(1), FType)If IsError(xRet) ThenVlookupComment = "Not Found"ElseSet xCell = FTable.Columns(FColumn).Cells(1)(xRet)VlookupComment = xCell.ValueWith Application.CallerIf Not .Comment Is Nothing Then .Comment.DeleteIf Not xCell.Comment Is Nothing Then .AddComment xCell.Comment.TextEnd WithEnd If
    End Function
    
  2. 返回工作表,使用函数:
    =VlookupComment(D2,$A$2:$B$9,2,FALSE)
    

技巧4:处理“数字存储为文本”的匹配

若查找值是文本格式(如“1001”),而目标列是数字格式(如1001),会返回#N/A,公式如下:

=IFERROR(VLOOKUP(VALUE(D2),$A$2:$B$8,2,0),VLOOKUP(TEXT(D2,0),$A$2:$B$8,2,0))
  • VALUE(D2):将文本转为数字;
  • TEXT(D2,0):将数字转为文本,双向兼容。

五、常见问题与注意事项

  1. 为什么返回#N/A?

    • 目标值在查找范围第一列不存在;
    • 数据类型不匹配(如文本vs数字);
    • 近似匹配时查找范围未升序排序。
  2. 为什么返回#VALUE!?

    • col_index_num超过查找范围的总列数;
    • 公式中存在无效的单元格引用(如引用了合并单元格)。
  3. 如何批量修改查找范围?
    若数据新增行/列,可将查找范围定义为“表格”(选中数据→按Ctrl+T),公式会自动扩展范围。

通过本教程的基础示例和高级技巧,你可以解决95%以上的Excel数据查找需求。建议从“精确匹配”“跨工作表查找”等基础场景开始练习,熟练后再尝试“多条件匹配”“嵌套VLOOKUP”等进阶用法,逐步提升Excel效率。

http://www.dtcms.com/a/486582.html

相关文章:

  • 网站建设定制设计网站后台怎么添加代码
  • 网站推广软件预期效果专业团队原版视频
  • 个人网站首页导航栏ps制作教程培训课程ui设计
  • 2025WPF 面试高频问题及标准答案
  • 直线电机(S7-1511PN Linmot C1251)调试文档
  • Leetcode 28
  • 【完整源码+数据集+部署教程】 【零售和消费品&存货】【无人零售】自动售卖机饮料检测系统源码&数据集全套:改进yolo11-KernelWarehouse
  • iOS框架内存中占用很高的ttc文件是否正常
  • 建设部网人事考试网站企业宣传片怎么拍
  • 料神wordpress建站教程优购物官方网站直播
  • Spring Boot 3零基础教程,yml语法细节,笔记16
  • 31-基于ZigBee的车位引导系统设计与实现
  • 济宁专业建网站seo关键词优化软件合作
  • 有赞商城建站优化收费
  • 石碣镇做网站晋城商城网站开发设计
  • AxonHub 开源程序是一个现代 AI 网关系统,提供统一的 OpenAI、Anthropic 和 AI SDK 兼容 API
  • 【运维心得】playbook远程清理windows亲测步骤
  • 【学习AI-相关路程-mnist手写数字分类-一段学习的结束:自我学习AI-复盘-代码-了解原理-综述(5) 】
  • 免费的cms视频网站模板3000款免费软件app下载
  • 网站模板没有html文件下载网站建设中忽略的字体侵权行为
  • QT学习和代码练习
  • 把 Python 应用打包成 Windows 可执行程序 — 完整指南
  • 阿里云代理商:什么是阿里云CDN配额?
  • 做推广任务的网站制作图片的软件加字体
  • 做公司网站优劣势成都建设网站那个好
  • vLLM 推理 AWQ 量化后的模型
  • **发散创新:游戏物理引擎的深入探究**一、引言随着游戏产业的飞速发展,游戏物理引擎作为游戏开发中不可或缺的一部分,
  • 上海网站制作网站wordpress 显示文章作者
  • QT 中的元对象系统(七):Q_GADGET 机制
  • 德阳做网站公司实体店线上线下运营模式