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:G4
在A1: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
,意思是“找到一个完全匹配”。但视情况而定,使用-1
或1
作为MATCH
的第三个参数可能非常有用。
例如,以下公式返回包含数字的列A
中最后一行的行号:
= MATCH(-1E+300,A:A,-1)
这是因为此公式从A
列的底部开始,一直向顶部运行,并返回A
列中值大于或等于-1E+ 的第一个行号300(基本上是任意数字)。
然后INDEX
可以与此结合使用以返回该单元格中的值。请参见下面的示例。
总结
VLOOKUP
充其量与INDEX
/MATCH
一样好,并且在某些情况下确实不那么令人困惑。在最坏的情况下,VLOOKUP
比INDEX
/MATCH
更加不安全和易变。
另外值得注意的是,如果您想查找一个范围而不是单个值,则必须使用INDEX
/MATCH
。 VLOOKUP
不能用于查找范围。
由于这些原因,我通常在几乎所有情况下都更喜欢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(或WPS)使用vlookup匹配并合并表的方法与实例
vlookup函数基本使用--如何将两个Excel表中的数据匹配;excel表中vlookup函数使用方法将一表引到另一表