本次的练习是:在一个单元格区域中含有重复值,使用公式来获取该区域中的不重复值。 例如,下图所示的工作表单元格区域A1:A13,将其命名为Data。在该区域中,含有很多重复值。现在要获取该区域中的不重复值。 先不看答案,动手试一试。
公式思路 首先求出单元格区域Data中每个值在区域中第1次出现的行号,然后根据行号取出这些值。
公式解析 在单元格区域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组合键,即可得到区域Data中不重复值,如下图所示: 公式中,MATCH(Data,Data,0)得到数组{1;1;1;4;4;4;7;7;7;10;10;7;1},即区域Data中每个值在该区域中出现的行号。ROW(INDIRECT('1:'&ROWS(Data)))得到数组{1;2;3;4;5;6;7;8;9;10;11;12;13},INDIRECT函数将“1:13”转换成行区域$1:$13。 MATCH(Data,Data,0)=ROW(INDIRECT('1:'&ROWS(Data)))即上述两个数组相比较,得到数组{TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;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(INDIRECT('1:'& ROWS(Data))),MATCH(Data,Data,0),''),ROW(INDIRECT('1:'& ROWS(Data))))),'') IFERROR函数在错误值时输入空。
小结
下期预告: Excel公式练习9: 获取当前单元格所在列的列字符 使用一个公式来获取当前单元格所在列的列字符,例如当前单元格为B2,其所在列为列B。 转载本文请联系我(xhdsxfjy@163.com)或者注明出处。 欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。 |
|