请问该公式的解释INDEX(A:A,SMALL(IF(MATCH(A$1:A$1000&"",A$1:A$1000&"",)=ROW($1:$1000),ROW($1:$1000),

2024-12-02 08:20:16
推荐回答(2个)
回答1:

公式没写完吧?
=INDEX(A:A,SMALL(IF(MATCH(A$1:A$1000&"",A$1:A$1000&"",)=ROW($1:$1000),ROW($1:$1000)),row(1:1)))

第一步:
IF(MATCH(A$1:A$1000&"",A$1:A$1000&"",)=ROW($1:$1000),ROW($1:$1000))的意思:
MATCH(A$1:A$1000&"",A$1:A$1000&"",)这是一个数组的用法。用MATCH函数判断A$1:A$1000中的每一个在这个区域中首次出现的位置(行号),再和ROW($1:$1000)相对比。这样就能判断数据是否是首次出现。如果是首次出现,IF(...,ROW($1:$1000))就得到对应的行号,否则为FALSE(也可以写成4^8,道理类似。),这样得到一个数组。
A$1:A$1000&""是为了避免空单元在MATCH对比时得到错误值。

第二步:
SMALL(第一步,row(1:1))
在第一步得到的数组中,提取最小的一个行号。下拉填充时,依次得到第2、第3、第n小。

第三步:
INDEX(A:A,第二步)
用INDEX在A列查找上一步的行号对应的值。

所以,整个公式的意思,是将A列不重复的数据依次提取出来。
有点小复杂,请慢慢体会。

回答2:

公式没写完,应该是:=INDEX(A:A,SMALL(IF(MATCH(A$1:A$1000&"",A$1:A$1000&"",)=ROW($1:$1000),ROW($1:$1000)),row(A1))),数组公式,ctrl+shift+enter结束.
意思就是在A1:A1000这个区域精确查找A1至A1000返回的值,如果返回的值等于它的行号就显示行号,如果有重复值就返回FALSE,然后利用SMALL函数,把A1:A1000中有重复的项剔除掉,留下所有不重复的项。