Excel 公式中 MATCH 的用法

usage of MATCH in Excel formula

我对如何使用 MATCH 有疑问。

这一切最初都是从我想了解"How many distinct/unique items are in my range of values"开始的。经过一些研究,这个公式显然做得很好:

=SUM(IF(FREQUENCY(MATCH(B2:B10,B2:B10,0),MATCH(B2:B10,B2:B10,0))>0,1)) 

哪个"Counts the number of unique text and number values in cells B2:B10 (which must not contain blank cells)"

我想更好地理解这个公式,所以我复制了这部分并粘贴到其他地方:

MATCH(B2:B10,B2:B10,0)

计算结果为“#Value!”。

在这种情况下,excel 首先是如何完成工作的?搜索 MATCH 的工作原理并没有告诉我太多,因为示例需要 "value" 而不是 "range" 放在第一个参数中...

任何对此的见解将不胜感激!

仅供参考 - 对于那些有兴趣的人,请在此处获得第一个公式: https://support.office.com/en-us/article/Count-unique-values-among-duplicates-8d9a69b3-b867-490e-82e0-a929fbc1e273?CorrelationId=4331e8f6-e4d5-4210-9b21-3ed53ee45a6d&ui=en-US&rs=en-US&ad=US

正确 - 但绝大多数函数都可以操作,不仅是一个,还可以操作一系列值。

在几乎所有情况下,这都涉及将公式提交为 数组公式(即使用 CTRL+SHIFT+ENTER),尽管某些函数(包括 FREQUENCY)具有先天能力在没有此击键组合的情况下强制 returns 数组。

这就解释了您的#VALUE!错误:MATCH 构造不会自己评估传递给它的数组中的所有元素:它需要一些外部函数来强制和处理一个结果returns的数组,这里是通过FREQUENCY函数实现的

实际上这种构造不是最有效的:bins_array 的 MATCH 子句的重复是没有必要的,这意味着构造是过度的资源-重的。比较器 (>0) 也不是绝对必要的。更好的是:

=SUM(IF(FREQUENCY(MATCH(B2:B10,B2:B10,0),ROW(B2:B10)-MIN(ROW(B2:B10))+1),1))

因为 - 特别是在更大的范围内 - 尽管有额外的函数调用,构造:

ROW(B2:B10)-MIN(ROW(B2:B10))+1

可能比涉及线性搜索的计算要快得多。

此致

P.S。如果您还想了解此构造的工作原理,请告诉我。