为什么 Match("text", A:A) 函数不适用于 Excel 中的文本

问题描述

为什么这个公式不起作用:

enter image description here

我希望得到 1 而不是 2。

解决方法

小故事

使用 Match()Vlookup() 的正确方法始终是在最新的可选参数处写入 False,以获得您需要的 - 精确值位置或错误,如果它不在这里。因此:

=MATCH("s",A:A,False) 'or 0 instead of False

长话

什么是 False 默认行为?这个按照Match() documentation

MATCH 查找与 lookup_value 完全相等的第一个值。 lookup_array 参数中的值可以按任何顺序排列。

回到我们的问题 - 为什么它不起作用?因为默认参数 [match_type] 设置为 1,即 Less Than or Equal

enter image description here

  • 如果您需要使用 -11 作为可选的 match_type 参数,则必须对这些值进行排序以返回一些有意义的见解。

但是这个公式中的“小于或等于”(默认的 match_type 参数)是什么?如果你问 Excel,它是这样想的:

="a">"s" 'False
="a"<"s" 'True
="a"="s" 'False

但是,它仍然出错。为什么它开始评估并与第二个值 "a" 进行比较并返回其位置,好像从第一个单元格开始会满足“小于或等于”条件?这真的很有趣,因为这里还有 Excel 的其他“隐藏”功能 - 例如setting the first cell of a range to be the last to check,which is built-in in some functions

于是开始与"a"比较,发现小于等于返回位置。大功告成!

为了完全失去这个人,如果您将问题中的公式更改为=MATCH("s";A1:A2),它将返回您期望的内容,因此最后检查的第一个单元格取决于范围的类型。

,

由于@JvdV 建议您必须为旧版本的 excel 指定第三个参数 Match_Type

=MATCH("s",0)

但是对于 Excel365Google-Sheets,您可以省略此参数,Excel 将使用默认参数。