Excel 应用VLOOKUP函数实现竖直查找

VLOOKUP函数用于在表格数组的首列查找指定的值,并由此返回表格数组当前行中其他列的值,VLOOKUP中的V表示垂直方向。当比较值位于需要查找的数据左边的一列时,可以使用VLOOKUP而不是HLOOKUP。其语法如下。


VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)

其中参数lookup_value为需要在表格数组第一列中查找的数值。lookup_value可以为数值或引用。table_array为两列或多列数据。col_index_num为table_array中待返回的匹配值的列序号。range_lookup为逻辑值,指定希望VLOOKUP查找精确的匹配值还是近似匹配值。

【典型案例】实现竖直查找。本例的原始数据如图15-33所示。

步骤1:在B11单元格中输入公式“=VLOOKUP(A10,$A$2:$C$6,2,FALSE)”,用于在“A2:C6”单元格区域中根据A10单元格中输入的姓名查找对应的职务。

步骤2:在C10单元格中输入公式“=VLOOKUP(A10,$A$2:$C$6,3,FALSE)”,用于在“A2:C6”单元格区域中根据A10单元格中输入的姓名查找对应的出生日期。

步骤3:在A10单元格中输入一个员工姓名,例如“李靖”,在B10和C10单元格中就会显示出相应的结果,如图15-34所示。

图15-33 本例的原始数据

图15-34 计算结果

Excel 通过与首列值对比来查找值:VLOOKUP函数

若需要查找的值与其首列中的值有对应关系,可通过VLOOKUP函数实现。VLOOKUP函数的语法为:=VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)。

※ lookup_value:用数值或数值所在的单元格指定在数组第一列中查找的数值。如果为lookup_value参数提供的值小于table_array参数第一列中的最小值,则VLOOKUP将返回错误值#N/A。

※ table_array:指定查找范围。

※ col_index_num:为table_array中待返回的匹配值的列号。当col_index_num参数为1时,返回table_array第一列中的值;col_index_num为2时,返回table_array第二列中的值,依此类推。

※ range_lookup:一个逻辑值,指定希望VLOOKUP查找精确匹配值还是近似匹配值。如果range_lookup为TRUE或被省略,则返回精确匹配值或近似匹配值。如果找不到精确匹配值,则返回小于lookup_value的最大值。如果range_lookup为TRUE或被省略,则必须按升序排列table_array第一列中的值;否则,VLOOKUP可能无法返回正确的值。

下面举例说明VLOOKUP函数的使用方法:某学校规定学生的综合得分为60分以下为D级,60分(包含60)至80分为C级,80分(包含80)至90分为B级,90分(包含90)以上为A级,现在需要将B列中的得分转换为等级评价。

01 打开工作表,在A列中输入学生姓名,在B列中输入学生的综合得分。

02 选中C2单元格,在其中输入公式:=VLOOKUP(B2,{0,”D”;60,”C”;80,”B”;90,”A”},2)。

03 使用填充柄功能复制公式到该列的其他单元格中,即可得到所有学生的得分等级结果。

alt

Excel竖直查找:VLOOKUP函数实例图解

VLOOKUP函数用于在表格数组的首列查找指定的值,并由此返回表格数组当前行中其他列的值,VLOOKUP中的V表示垂直方向。当比较值位于需要查找的数据左边的一列时,可以使用VLOOKUP而不是HLOOKUP。其语法如下:


VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)

其中,lookup_value参数为需要在表格数组第1列中查找的数值。lookup_value可以为数值或引用。table_array参数为两列或多列数据。col_index_num参数为table_array中待返回的匹配值的列序号。range_lookup参数为逻辑值,指定希望VLOOKUP查找精确的匹配值还是近似匹配值。下面通过实例详细讲解该函数的使用方法与技巧。

打开“VLOOKUP.xlsx”工作簿,切换至“Sheet1”工作表,本例中的原始数据如图16-19所示。要求根据工作表中的数据内容,实现竖直查找。具体的操作步骤如下。

STEP01:选中B10单元格,在编辑栏中输入公式“=VLOOKUP(A10,$A$2:$C$6,2,FALSE)”,用于在A2:C6单元格区域中根据A10单元格中输入的姓名查找对应的职务,输入完成后按“Enter”键返回计算结果,如图16-20所示。

图16-19 原始数据

图16-20 查找职务

STEP02:选中C10单元格,在编辑栏中输入公式“=VLOOKUP(A10,$A$2:$C$6,3,FALSE)”,用于在A2:C6单元格区域中根据A10单元格中输入的姓名查找对应的出生日期,输入完成后按“Enter”键返回计算结果,如图16-21所示。

STEP03:在A10单元格中输入一个员工姓名,例如“李靖”,在B10和C10单元格中就会显示出相应的结果,如图16-22所示。

图16-21 查找出生日期

图16-22 输入员工姓名

是否能用VLOOKUP函数获得检索列左侧的数值?

VLOOKUP 函数下,无法取得检索列左侧的数值

VLOOKUP 函数可以说是 Excel 中最重要的函数,这里让我们再来看看其具体的公式和功能。

【公式】

=VLOOKUP(检索值,检索范围,列数,0)

【功能】

在检索范围最左一列中查找与检索值相同的单元格,然后在该单元格中返回第三参数指定的列数中的某个单元格的值。

“从检索范围的最左边的列返回到第三参数指定的列数中的某个单元格的值”,也就是“返回位于该列右侧的值”。

那么,问题就来了。

“难道无法直接用这一列左侧的数值吗?”

“给第三参数做减法导出数值就可以了吧?”或许有许多人都抱有这样的疑问。但答案是:“不可以”。

那么,如果想要获得位于检索列左侧的列中的数值,应该怎么办?

什么是 OFFSET 函数

组合使用 OFFSET 函数与 MATCH 函数可以解决前文中的问题。OFFSET 函数的本质是“确定作为基准的单元格,通过上下左右偏移得到新的区域的引用”。

【公式】

=OFFSET(基准单元格,偏移行数,偏移列数)

【功能】

是以基准单元格为起始,返回按移动行数、移动列数偏移的单元格的值。

偏移行数,正数表示向下,负数表示向上。

偏移列数,正数表示向右,负数表示向左。

首先,举个非常简单的例子。

➊ 在 Excel 工作表的单元格 C3中输入“100”。

➋ 将下列公式输入任意一个单元格。

=OFFSET(A1,2,2)

输入有上述公式的单元格,将返回“100”。

作为基准单元格的 A1,向下2行、向右2列的目标单元格是 C3(值为100)。所以输有此公式的单元格所返回的值就是100。

将 OFFSET 函数与 MATCH 函数组合

运用这个公式,想办法引用检索列左侧的单元格。

下列表格我们可以看到,按照单元格 E2的数字,在 F2、G2的“课程”和“单价”中会分别对应返回数据。首先,先在 E2里输入1。

首先,F2的“课程”十分简单,通常使用 VLOOKUP 函数就能处理。

=VLOOKUP(E2,B:C,2,0)

在单元格 F2中输入=VLOOKUP(E2,B:C,2,0)后取得“课程”数据

但是,单元格 G2的“单价”数据位于单价的检索列(B 列)的左侧,这样用 VLOOKUP 函数就无法处理了。

这时候,我们可以组合使用 MATCH 函数和 OFFSET 函数。为了导出 E2中“No.”所对应的单价数据,G2中要输入以下公式:

=OFFSET(B1,MATCH(E2,B:B,0)-1,-1)

在单元格 G2中输入=OFFSET(B1,MATCH(E2,B:B,0)-1,-1)

以单元格 B1为基准,作为第二参数的结果的数字向下、再向左移动1格的目标单元格数值将会出现在 G2中。

第二参数的 MATCH 函数,会查找单元格 E2的值位于 B 列的上数第几列。单元格 E2的值若为1,B 列内容为1的单元格位于第2行,因此 MATCH 函数导出结果为“2”。在这个例子中,以单元格 B1为基准的 OFFSET 函数直接嵌入 MATCH 函数中,由于 B1向下偏移数为2,产生了1格的误差,所以需要做出调整,在此基础上减去1。

在 OFFSET 函数中,可以将第二参数的移动行数、第三参数的移动列数指定为负数值。也就是说,可以引用位于基准单元格的上方、左侧的单元格。利用这一特性,可以解决 VLOOKUP 函数无法引用位于检索列左侧单元格的缺陷。

在有多个相同检索值的工作表中使用 VLOOKUP函数的技巧

VLOOKUP 函数会以最初达成一致的检索值单元格作为对象

在 A 列中重复输入了同一家客户公司的名称,B 列中则为相应的负责人的名字。

如果以 A 列和 B 列中的数据为基础,想要在 E 列中按顺序输入相应的负责人,这时使用 VLOOKUP 函数可能会无法得到想要的结果。我们来实际操作一下。

➊ 在单元格 E1中输入以下公式:

=VLOOKUP(D2,A:B,2,0)

➋ 将单元格 E1中的公式一直复制粘贴到第7行。

将单元格 E1中的公式一直复制粘贴到第7行

E 列中的相同的公司对应同一名负责人。例如,ABC 股份有限公司,原本是按铃木、田中、加藤这样的顺序排列,而现在全部变为了“铃木”。

像这样检索值存在重复的情况,VLOOKUP 函数会以从上数、与起始处一致的检索值的单元格为对象来处理数据。单元格 E2、E3、E4也同样如此,都以“ABC 股份有限公司”为检索值,在作为检索范围的 A 列中以最初的单元格 A2为对象运行 VLOOKUP 函数,所以会返回“铃木”这个值。

无重复状态下应加工后再处理

为了解决这个问题,我们可以把有重复数据的 A 列和 D 列中的数据“加工”成唯一的状态,也就是该列下无重复的状态。这里,我们需要重新追加操作用的数据列,再进行处理。

这个方法的原理是,给重复的客户公司名称标上不同的固定编号。

首先,在各个表的左侧分别追加2列,作操作用。

表格左侧分别追加2列,供操作用

表格左侧分别追加2列,供操作用

按照以下步骤,给相同客户公司名称的每个数据分别标上编号。每个公式引用的哪个单元格,进行了怎样的处理,我们一边看一边分析。

➊ 在单元格 A2输入以下公式,一直复制粘贴到第7行。

=COUNTIF($C$2:C2,C2)

※C 列的客户公司名称标上数字

➋ 同样地,单元格 F2输入下列公式,一直复制粘贴到第7行。

=COUNTIF($H$2:H2,H2)

※H 列的客户公司名称标上数字

➌ 在单元格 B2中输入以下结合了固定编号和客户公司名称的公式,一直复制粘贴到第7行。

=A2&C2

➍ 同样地,在单元格 G2输入下列公式,一直复制粘贴到第7行。

=F2&H2

做完以上步骤,在 I 列输入下列 VLOOKUP 函数后,目标单元格中就会自动显示相应的负责人了。

=VLOOKUP(G2,B:D,3,0)

显示个别对应的负责人名称

这个方法的关键在于,用 COUNTIF 函数给每个数据设定编号(出现次数),通过编号与检索值得到新的固定检索值,并将其嵌入 VLOOKUP 函数中,由此就能得出正确结果了。

如何用 VLOOKUP函数应对检索范围中竖列顺序的变动状况

输入表与负责部分的项目顺序不同时

在刚才的例子中,为了让“输入表”与“负责部分”的项目排列顺序保持一致,第三参数按顺序输入2、3、4……这样连续的序号。因此,VLOOKUP 函数第三参数引用嵌入了 COLUMN 函数,这样做会提高效率。

但是,如果像下面这样,输入表与负责部分的项目顺序不同时该怎么办?也就是说第三参数不是连续数字的话,各单元格中的 VLOOKUP 函数即便运用了 COLUMN 函数,也无法得出正确的第三参数。

输入表与负责部分的项目顺序不同时

此例中,D 列的“单价”对应“负责部分”最左端往右数第6列,E 列的“生产者”对应“负责部分”最左端往右数第5列。在这样的前提下,如果想要在单元格 C3中输入最开始的那个函数公式,之后只要复制到 G 列也都可以得出结果的话,我们应该怎么做呢?

在 C 列商品名的单元格输入的 VLOOKUP 函数中第三参数应该是什么数字呢?答案是2。那么,我们只要输入能自动导出数字2的第三参数就可以了。这时候,我们就要用到 MATCH 函数。

我们通过以下例子具体解释一下。

上述例子中,A1到 D1项目名称分别为“商品名”、“单价”、“生产者”、“最低订购单位”,这些项目在 F1到 I1的范围中位于左数第几列,会相应地显示在 A2到 D2中。以单元格 A2为例,“A1(即商品名)的值,在 F1:I1范围里位于左数第2个”,那么 A2中则会显示数字2。

在单元格 A2做出这种处理的是下面的函数公式。

=MATCH(A1,$F$1:$I$1,0)

MATCH 函数中第一参数指定的值,会导出在第二参数指定范围中位于第几位的数字。第三参数基本上“只要输入0就行了”。

在图中,将单元格 A2的公式一直复制粘贴到 D2。因为第一参数不做绝对引用,单元格 B2里被复制粘贴的公式中的第一参数为 B1,单元格 C2里被复制粘贴的公式的第一参数为 C1,D2中则是 D1。

第二参数限定了纵列或横行的范围。

▲指定纵列的范围

第一参数指定的值为在此范围内的上数第几行。

▲指定横行的范围

第一参数指定的值为在此范围内左数第几列。

单元格范围限定为 F1:I1,则呈现如下状态:

  • 单元格 A1即“商品名”位于左数第2个
  • 单元格 B1即“单价”位于左数第4个
  • 单元格 C1即“生产者”位于左数第3个
  • 单元格 D1即“最低订购单位”位于左数第1个

能够在单元格中显示数字2、4、3、1,是因为 MATCH 函数的处理。

在 VLOOKUP 函数的第三参数中加入 MATCH 函数,即使“输入表”与“负责部分”的项目的排列顺序不同,也能够通过 MATCH 函数取得“‘输入表’的各项目名在‘负责部分’下位于第几列”的数字,把这样的结构嵌入 VLOOKUP 函数第三参数中就能够解决顺序不同的问题。在输入表的单元格 C3,请输入以下公式:

=VLOOKUP($B3,$I:$N,MATCH(C$2,$I$2:$N$2,0),0)

然后复制到整个表格,画面则显示如下:

在单元格 C3中输入=VLOOKUP($B3,$I:$N,MATCH(C$2,$I$2:$N$2,0),0)并复制粘贴至全表

分析 MATCH 函数的处理

可能乍一看上述的公式很复杂,接下来我们来仔细分析一下。关键在于理解嵌入 VLOOKUP 函数第三参数的 MATCH 函数是如何发挥作用的。

MATCH(C$2,$I$2:$N$2,0)

这个公式得出的数字指向的是,第一参数指定的单元格 C2的值(即商品名的值)位于第二参数指定范围($I$2:$N$2)的左数第几个。在这一例子中为数字2,它与单元格 C3中以 B3的值(数字1)为检索值的 VLOOKUP 函数里,检索范围 I:N 从左数第几列的对应数字是一致的。

将输有单元格 C3内容的单元格一致复制粘贴到 G6,为了不让参照项移位,需要设定绝对引用。

无需在工作表外填入数据并完成连续输入VLOOKUP函数

在这种情况下,由于“输入表”与“负责部分”各项目的排列顺序相同,VLOOKUP 函数第三参数中指定的数字也要向右递增,显示连续的数字。因此,工作表外的上部不用输入其他数字,也可以完成操作。

想要沿着行的方向输入连续的数字,我们可以使用 COLUMN 函数。利用 COLUMN 函数的特性,并将之嵌套在 VLOOKUP 函数的第三参数里,就可以瞬间完成复杂的操作。

在单元格 C3中输入以下公式:

=VLOOKUP($B3,$I:$N,COLUMN()-1,0)

一直复制粘贴到单元格 G3,Excel 中就会出现如下页面。

在单元格 C3里输入=VLOOKUP($B3,$I:$N,COLUMN()-1,0)并复制粘贴到 G3

第三参数“COLUMN()-1”在 C 列中为2,在 D 列中为3。COLUMN 函数所导出的,是含有 COLUMN()的单元格位于工作表中第几列的数字。

在单元格 C3中输入的 VLOOKUP 函数,其第三参数指定数字为2。由于 C3的 COLUMN()为3,在此基础上减去1后,则调整为2。同理,D 列到 G 列中“COLUMN()”获得的数字减去1就是 VLOOKUP 函数的第三参数,这样就能顺利地计算出正确的项目数值。

VLOOKUP函数:在粘贴的单元格中变为合适的数字

这里需要的并不是把 VLOOKUP 函数的第三参数输入成2或3这样的固定值,而是需要“输入可以在粘贴的单元格里,实时转化为合适的数字”这样的设想。

最简单的就是在表外的上方输入想要指定的第三参数的数字,然后引用这一单元格。例如,在单元格 C1到 G1中,分别输入从2到6的数字,在 C3中输入以下公式:

=VLOOKUP($B3,$I:$N,C$1,0)

将这个公式一直复制粘贴到 G3,显示如下。

在单元格 C3输入=VLOOKUP($B3,$I:$N,C$1,0)并一直复制粘贴到 G3

在单元格 C3输入=VLOOKUP($B3,$I:$N,C$1,0)并一直复制粘贴到 G3

第三参数引用的是同一列的第1行的单元格。也就是说,C 列引用2,D 列引用3,如此自动改变数值。这样就不用在每个单元格里逐个输入 VLOOKUP 函数的第三参数了,从而大大减轻了工作负担。

沿行方向输入大量VLOOKUP函数的方法:批量修改单元格

如果遇到像下图这样,需要输入大量的 VLOOKUP 函数,按照常规的方法处理需要花费大量的时间和精力。

“输入表”中的各个单元格里,按照“商品 No.”在“负责部分”中用 VLOOKUP 函数找出对应值。首先用常规的方法,在最开始的单元格 C3中输入以下公式:

=VLOOKUP($B3,$I:$N,2,0)

将单元格 C3的公式向右一直复制到 G 列,为了不改变从属单元格,需要用绝对引用来固定第一参数的检索值和第二参数的检索范围。

在单元格 C3输入=VLOOKUP($B3,$I:$N,2,0)后

接着将它一直拖拽复制到单元格 G3。画面显示如下:

将单元格 C3一直拖拽复制到单元格 G3

所有单元格中的数据都已经变成了相同数值。这是因为从单元格 C3到 G3,每个单元格中的函数如上变为了第三参数“2”。参考的是检索范围 I:N 列最左端开始数第2列的值。

因此,如果要让 C3到 G3中的每个单元格都显示各自所属正确的数值,就必须修改各单元中的 VLOOKUP 函数的第三参数。C3中 VLOOKUP 函数第三参数改为“2”、D3改为“3”、E3改为“4”、F3改为“5”、G3改为“6”,这样每个单元格中的数值才是正确的。

像这样逐个修改还是很麻烦的。像前文中的例子那样,如果需要修改的单元格只有4个,那么不会花费很多时间。但是工作中需要输入 VLOOKUP 函数和修改第三参数的单元格有时会多达50列。遇到这种情况,千万不要动手逐个去修改。我告诉大家一个便捷的办法,甚至可以不用逐个修改单元格。

VLOOKUP函数:用“整列指定”检查

请注意一下在第二参数中指定 F 列和 G 列这两个整列的这一操作。这样,即便在单价表里追加了新商品时,VLOOKUP 函数依然可以做出相应的处理。在设定事先输入 VLOOKUP 函数,就能自动显示的格式时,也一并使用上述方便的功能吧。

下面的公式,仅指定了单价表范围,每次增加商品时都需要修改 VLOOKUP 函数,这样十分浪费时间。

=VLOOKUP(A2,$F$3:$G$8,2,0)

无论是 SUMIF 函数、COUNTIF 函数还是 VLOOKUP 函数,基本都是以列为单位选取范围。这样不仅能够快速输入公式,使用起来也十分方便。