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

Posted

技术标签:

【中文标题】Excel - VLOOKUP 与 INDEX/MATCH - 哪个更好?【英文标题】:Excel - VLOOKUP vs. INDEX/MATCH - Which is better? 【发布时间】:2018-06-29 03:42:22 【问题描述】:

我了解如何使用每种方法:VLOOKUP(或HLOOKUP)与INDEX/MATCH

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

    有没有一种方法可以做而另一种方法不能做的事情?

    一般来说哪个效率更高(或者取决于具体情况)?

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

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

【问题讨论】:

请注意 - 这个问题对于 SO 来说非常广泛,并且有很多意见(但是,是的,我敢肯定,有可量化的理由使用一个而不是另一个)。您可以通过在线搜索找到很多页面,将这两者进行了非常详细的比较。 @BruceWayne 好点。在排除讨论不多的固定列索引号之前,我已经看过很多这样的比较,所以我想我会分享。 【参考方案1】:

我更喜欢在几乎所有情况下使用INDEX/MATCH,因为它更加灵活,并且根据查找表的大小有可能提高效率。

我唯一可以真正证明使用 VLOOKUP 是对列索引号是动态的非常简单的表的情况,尽管即使在这种情况下,INDEX/MATCH 也同样可行。

下面我将举几个具体的例子来说明这两种方法的详细区别。


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

这可能是INDEX/MATCH 最明显的优势,也是VLOOKUP 最大的缺点之一。 VLOOKUP 只能向右查找,INDEX/MATCH 可以从任意范围查找,必要时包括不同的工作表。

下面的例子不能用VLOOKUP来完成。


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

考虑下面的例子。任何一种方法都可以完成。

这两个公式都可以正常工作。但是,由于VLOOKUP 公式包含的范围比INDEX/MATCH 公式更大,因此它具有不必要的波动性。

如果B1:G4 范围内的任何单元格发生变化,VLOOKUP 公式必须重新计算(因为B1:G4A1:H4 范围内),即使更改B1:G4 中的任何单元格不会影响结果公式。这对INDEX/MATCH 来说不是问题,因为它的公式不包含B1:G4 范围。


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

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

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

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

= VLOOKUP("s",A1:H4,COLUMN(H1)-COLUMN(A1)+1,FALSE)

现在H1 将在插入列时自动更新为I1,从而保留对同一列的引用。但是,这完全没有必要,因为INDEX/MATCH 可以使用下面的公式完成此操作而不会出现此问题。

= INDEX(H1:H4,MATCH("s",A1:A4,0))

我意识到这是一个不太可能发生的情况,但它总是困扰我VLOOKUP 默认情况下基于固定列索引进行查找,如果插入列则不会自动更新。对我来说,这似乎使VLOOKUP 函数更加脆弱。


INDEX/MATCH 也可以处理可变列索引,但公式较长

如果列索引号本身是动态的,这确实是我认为VLOOKUP 简化了一些事情的唯一情况,但INDEX/MATCH 替代方案同样好,只是稍微有点混乱。请参阅以下示例。


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

(感谢@jeffreyweir)

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

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

这种手动“拆分”匹配值和索引值不是VLOOKUP 的选项,因为匹配值是VLOOKUP 中的“内部”变量,无法访问。


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

假设您想根据列名在列中查找最大值。

您可以先使用MATCH 找到合适的列,然后INDEX 返回整个列的范围,然后使用MAX 找到该范围的最大值。

参见下面的示例,H4 中的公式查找单元格G4 中指定的列名的最大值。这不能单独使用VLOOKUP 来完成。


MATCH 不必匹配精确值

通常MATCH 与第三个参数一起使用0,意思是“找到一个完全匹配”。但视情况而定,使用-11 作为MATCH 的第三个参数可能非常有用。

例如,以下公式返回包含数字的列A 中最后一行的行号:

= MATCH(-1E+300,A:A,-1)

这是因为此公式从A 列的底部开始,一直向顶部运行,并返回A 列中值大于或等于-1E+ 的第一个行号300(基本上是任意数字)。

然后INDEX 可以与此结合使用以返回该单元格中的值。请参见下面的示例。


总结

VLOOKUP 充其量与INDEX/MATCH 一样好,并且在某些情况下确实不那么令人困惑。在最坏的情况下,VLOOKUPINDEX/MATCH 更加不安全和易变。

另外值得注意的是,如果您想查找一个范围而不是单个值,则必须使用INDEX/MATCHVLOOKUP 不能用于查找范围。

由于这些原因,我通常在几乎所有情况下都更喜欢INDEX/MATCH

【讨论】:

一旦我学会了Index/Match,我就再也没有回去过。您可以操作您的数据(尤其是移动列),Index/Match 仍然可以工作。与VLOOKUP() 不同,对我来说最好的事情是我的数据不必按“从左到右”的顺序排列。您还可以使用 multiple criteria Index/Match 比 VLOOKUP() 等效的 IMO 简单得多。 此外,VLOOKUP 函数指向整个数据表这一事实——即使它实际上只使用了其中的两列(最左边的关键列,第 n col_index_num 参数给出的列) - 意味着每当您更改该表中的任何单元格时,您的 VLOOKUP 都会重新计算。这些 VLOOKUPS 下游的所有公式也是如此。就好像 VLOOKUP 是一个 volatile 函数。而对于 INDEX/MATCH,只有在您更改 INDEX 和 MATCH 组合引用的特定列中的某些内容时,您的函数才会重新计算。 啊,是的……是的。顺便说一句,我在这个主题上看到的最全面的答案。 @jeffreyweir 谢谢。我经常看到VLOOKUP 在关于 SO 的答案中至少有一个在此答案中解决,因此我创建了这篇文章,以便我可以将这些用户推荐给此答案。 为了完整起见,这是使用 INDEX/MATCH 的另一个原因:MATCH 部分可以拆分到它自己的单元格中,并在您使用多个 VLOOKUPS 的情况下重复使用(也称为“缓存”)带来与特定记录相关的其他列。例如如果您正在查找客户 ID,并返回姓氏、名字和性别,比如说。拆分 MATCH 组件并使用它来驱动三个 INDEX 函数将比使用由 VLOOKUP 填充的三列效率高出三倍以上。

以上是关于Excel - VLOOKUP 与 INDEX/MATCH - 哪个更好?的主要内容,如果未能解决你的问题,请参考以下文章

[欢课] EXCEL怎样运用VLOOKUP函数,与INDEX-MATCH函数进行查找?

excel怎么一对多匹配

Excel(或WPS)使用vlookup匹配并合并表的方法与实例

excel中lookup用法?

如何在一个excel表格中查找与另一个表格对应的数据

vlookup函数基本使用--如何将两个Excel表中的数据匹配;excel表中vlookup函数使用方法将一表引到另一表