Excel - VLOOKUP与INDEX/MATCH - 哪个更好?

Ima*_*889 2 indexing excel match vlookup

我理解如何使用每种方法:( VLOOKUPHLOOKUP)vs . INDEX/ MATCH.

我在寻找他们之间的差异,而不是在个人偏好方面,但主要是在以下方面:

  1. 是否有一种方法可以做到另一种方法无法做到的事情?

  2. 哪一个更有效(或者取决于具体情况)?

  3. 使用一种方法与另一种方法的任何其他优点/缺点

注意:我在这里回答我自己的问题,但是想看看是否有其他人有其他我没有想过的见解.

Ima*_*889 15

我更喜欢使用INDEX/ MATCH在几乎所有情况下,因为它是更为灵活,且必须更有效取决于查找表有多大的潜力.

我真正能够证明使用的唯一时间VLOOKUP是非常直接的表,其中列索引号是动态的,尽管在这种情况下,INDEX/ MATCH同样可行.

我将在下面给出一些具体的例子来说明这两种方法之间的细节差异.


INDEX/MATCH可以向左 (或任何你想要的)查找

这可能是最明显的优势INDEX/ MATCH以及最大的挫折之一VLOOKUP.VLOOKUP只能查找到右边,INDEX/ MATCH可以从任何范围查找,包括必要时的不同表格.

以下示例无法实现VLOOKUP.

在此输入图像描述


INDEX/MATCH有可能使用更小的细胞范围(从而提高效率)

考虑下面的例子.它可以用任何一种方法完成.

在此输入图像描述

在此输入图像描述

这两个公式都很好.然而,由于该VLOOKUP公式包含比INDEX/ MATCH公式更大的范围,因此它具有不必要的挥发性.

如果范围中的任何单元格B1:G4发生更改,则VLOOKUP公式必须重新计算(因为B1:G4在此范围内A1:H4),即使更改任何单元格B1:G4也不会影响公式的结果.这不是INDEX/ 的问题,MATCH因为它的公式不包含范围B1:G4.


使用具有固定col_index_number的VLOOKUP是危险的

我看到具有固定列索引号的主要问题是,如果插入完整列,它将不会更新.请考虑以下示例:

在此输入图像描述

除非在查找表中插入列,否则此公式可以正常工作.在这种情况下,公式将查找应该在哪里的值的左侧.插入列后见下面的结果.

在此输入图像描述

实际上可以通过使用以下VLOOKUP公式来缓解:

= VLOOKUP("s",A1:H4,COLUMN(H1)-COLUMN(A1)+1,FALSE)
Run Code Online (Sandbox Code Playgroud)

现在H1将自动更新为I1是否插入列,从而保留对同一列的引用.但是,这完全没有必要,因为INDEX/ MATCH可以通过下面的公式解决这个问题.

= INDEX(H1:H4,MATCH("s",A1:A4,0))
Run Code Online (Sandbox Code Playgroud)

我意识到这是一个不太可能的情况,但它始终困扰我,VLOOKUP默认情况下根据固定列索引查找,如果插入列,则不会自动更新.对我而言,它似乎使VLOOKUP功能更加脆弱.


INDEX/MATCH也可以处理变量列索引,但是更长的公式

如果列索引号本身是动态的,那么这实际上是我认为VLOOKUP稍微简化一下的唯一情况,但是INDEX/ MATCH替代方案同样好,只是稍微有点混乱.见下面的例子.

在此输入图像描述

在此输入图像描述


INDEX/MATCH对于多次查找更有效

(感谢@jeffreyweir)

如果单个匹配值需要多个查找值,则使用具有匹配值的辅助单元格会更有效.这样,匹配只需要计算一次,而不是每个查找公式计算一次.见下面的例子.

在此输入图像描述

然后可以使用此匹配值返回适当的查找值.请参见下面的示例,(公式已拖到右侧).

在此输入图像描述

此手册"分割"匹配值和索引值不是一个选项,VLOOKUP因为匹配值是"内部"变量VLOOKUP并且无法访问.


INDEX/MATCH可以查找范围,允许另一个操作

例如,您可以根据列名称在列中查找最大值.

您可以先使用MATCH查找相应的列,然后INDEX返回整个列的范围,然后使用它MAX来查找该范围的最大值.

请参阅下面的示例,公式中H4查找单元格中指定的列名称的最大值G4.这不能单独使用VLOOKUP.

在此输入图像描述


综上所述

MATCH在某些情况下,充其量只是和0/ -1并且在某些情况下稍微有点混乱.在最坏的情况下,1它比MATCH/ 更不安全和不稳定A.

另外值得注意的是,如果要查找范围而不是单个值,则必须使用A/ A.INDEX不能用来查找范围.

出于这些原因,我通常更喜欢VLOOKUP/ INDEX几乎在所有情况下.

  • 一旦我学会了"索引/匹配",我再也没有回去过.你可以操纵你的数据(特别是移动列),`索引/匹配'仍然可以工作.与`VLOOKUP()`不同,对我来说最好的事情是我的数据不必是"从左到右"的顺序.你也可以[多标准索引/匹配](https://www.deskbright.com/excel/index-match-multiple-criteria/)比`VLOOKUP()`等效,IMO简单得多. (2认同)
  • 为了完整起见,这是使用 INDEX/MATCH 的另一个原因:MATCH 部分可以拆分到它自己的单元格中,并在您使用多个 VLOOKUPS 来获取与特定相关的其他列时重用(也称为“缓存”)记录。例如,如果您正在查找客户 ID,并返回姓氏、名字和性别。拆分 MATCH 组件并使用它来驱动三个 INDEX 函数,其效率将比使用由 VLOOKUP 填充的三列高出三倍以上。 (2认同)