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几乎在所有情况下.
| 归档时间: |
|
| 查看次数: |
1259 次 |
| 最近记录: |