如何在excel中用函数公式提取不重复值?

在excel中提取不重复值是经常遇到的需求。

提取不重复值可以用函数公式,也可以用数据透视表,甚至可以用vba实现。

本文重点介绍用函数公式提取不重复值的方法。

一、提取单列不重复值

如下图所示

要提取A列的不重复值,可以使用如下的经典公式:

=IFERROR(INDEX(A:A,SMALL(IF(MATCH($A$2:$A$10,$A$2:$A$10,0)=ROW($A$2:$A$10)-1,ROW($A$2:$A$10),65536),ROW(A1)))&"","")

公式解析:

1.MATCH($A$2:$A$10,$A$2:$A$10,0)把要提取不重复值的数据用Match函数求出它们各自第一次出现的位置序号,上图中是{1;2;3;4;5;4;2;8;9}

2.然后用=ROW($A$2:$A$10)-1跟顺序的位置号匹配,相等的即为第一次出现的数据,不相等的即为重复出现的数据,上图中的结果是{TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;FALSE;TRUE;TRUE}

3.用IF(MATCH($A$2:$A$10,$A$2:$A$10,0)=ROW($A$2:$A$10)-1,ROW($A$2:$A$10),65536)把第一次出现的数据列出它在A列对应的行号,不是第一次出现的数据,统一把行号设定为A列的65536行(因为那行一般没有数据)

4.然后用INDEX+SMALL函数按照从小到大的顺序返回相应的内容,对于不是第一此出现的数据,返回65536行的内容,即为空数据。

5.最后用IFERROR对于超出范围的内容导致的错误留空处理。

为了使得公式更具有通用性,可以先把要提取不重复值的数据所在的单元格区域定义为名称,比如上图的单元格区域可以定义名称为

oRng:=OFFSET(Sheet1!$A$1,1,,9)

其中1,表示数据所在的单元格距离A1单元格的行数,9表示数据所在的单元格的总数

然后使用如下的通用公式

=IFERROR(INDEX(A:A,SMALL(IF(MATCH(oRng,oRng,0)=ROW(oRng)-MIN(ROW(oRng))+1,ROW(oRng),65536),ROW(A1)))&"","")

 

 

 

 

 

       

发表评论