问题描述
为什么这个公式不起作用:
我希望得到 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
:
- 如果您需要使用
-1
或1
作为可选的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)
但是对于 Excel365 和 Google-Sheets
,您可以省略此参数,Excel 将使用默认参数。