我了解如何使用每种方法:VLOOKUP
(或HLOOKUP
)与INDEX
/ MATCH
。
我正在寻找他们之间的差异而不是个人偏好,但主要是在以下方面:
是否有一种方法可以做到另一种方法无法做到?
哪一个更有效率(或者取决于具体情况)?
使用一种方法与其他方法相比的任何其他优点/缺点
注意:我在这里回答了我自己的问题,但是想看看是否有其他人有其他我没有想过的见解。
答案 0 :(得分:12)
我更喜欢在几乎所有情况下都使用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
中的任何单元格也是如此1}}不会影响公式的结果。这不是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
无法完成此操作。
摘要
VLOOKUP
充其量只能与INDEX
/ MATCH
一样好,并且在某些情况下可能稍微有点混乱。在最坏的情况下,VLOOKUP
比INDEX
/ MATCH
更不安全和易变。
另外值得注意的是,如果您想查找范围而不是单个值,则必须使用INDEX
/ MATCH
。 VLOOKUP
不能用于查找范围。
出于这些原因,我几乎在所有情况下都更喜欢INDEX
/ MATCH
。