手机版

获取Excel单元格区域中的不同值

时间:2021-09-17 来源:互联网 编辑:宝哥软件园 浏览:

单元格区域中有重复值,公式用于获取区域中的非重复值。

例如,下图中显示的工作表单元格区域A1:A13被命名为“数据”。在这个区域中,有许多重复的值。现在你想得到这个区域的不同值。

先不看答案,试试看。

公式思维

首先找出单元格区域Data中每个值的第一个行号,然后根据行号取出这些值。

公式分析

在单元格区域C1:C13中输入以下数组公式:

=INDEX(Data,SMALL(IF(MATCH(Data,Data,0)=ROW(INDIRECT("1:"ROWS(Data)))))、MATCH(Data,Data,0)、"")、ROW(INDIRECT(" 1: " ROWS(Data))))

按Ctrl+Shift+Enter键,获取数据区域中不重复的值,如下图所示:

在公式中,MATCH(Data,Data,0)获取数组{ 1;1;1;4;4;4;7;7;7;10;10;7;1},即该区域中“数据”区域中每个值的行号。行(间接(“1:”行(数据))获取数组{ 1;2;3;4;5;6;7;8;9;10;11;12;13},间接函数将“1: 13”转换为$1:$13的行区域。

Match (data,data,0)=row(间接(“1:”row(data)),即以上两个数组进行比较,得到一个数组{ TRUE假;假;真;假;假;真;假;假;真;假;假;FALSE},IF函数根据数组获取MATCH(Data,Data,0)得到的数组中的值,即{ 1;"";"";4;"";"";7;"";"";10;"";"";" },SMALL函数分别取该数组的第1、2、3、…、13个最小值,即{ 1;4;7;10; ""; ""; ""; ""; ""; ""; ""; ""; "},将此数组作为INDEX函数的参数,分别取Data区域对应行的值。

从上面显示的工作表可以看出,#NUM!将为数组公式中的额外单元格显示。使用以下数组公式避免显示#NUM!

=IFERROR(INDEX(Data,SMALL)(IF(MATCH(Data,Data,0)=ROW(internal(" 1: " ROWS(Data))))、MATCH(Data,Data,0)、"")、ROW(internal(" 1: " ROWS(Data))))、"")

当值错误时,IFERROR函数输入null。

总结

ROW函数不能包含其他求值的函数,所以间接引用使用间接函数。

IFERROR函数是Excel 2007及更高版本中的一个函数。当第一个参数为错误值时,另一个参数作为返回值。为了在Excel 2013中得到相同的结果,应该同时使用IF函数和ISERR函数。

该公式包含了一些一般性的思想,可供其他类似情况参考。

版权声明:获取Excel单元格区域中的不同值是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。