獲取Excel單元格區(qū)域中的不重復(fù)值
獲取Excel單元格區(qū)域中的不重復(fù)值
在一個單元格區(qū)域中含有重復(fù)值,使用公式來獲取該區(qū)域中的不重復(fù)值。
例如,下圖所示的工作表單元格區(qū)域A1:A13,將其命名為Data。在該區(qū)域中,含有很多重復(fù)值。現(xiàn)在要獲取該區(qū)域中的不重復(fù)值。
先不看答案,動手試一試。
公式思路
首先求出單元格區(qū)域Data中每個值在區(qū)域中第1次出現(xiàn)的行號,然后根據(jù)行號取出這些值。
公式解析
在單元格區(qū)域C1:C13中輸入下面的數(shù)組公式:
=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組合鍵,即可得到區(qū)域Data中不重復(fù)值,如下圖所示:
公式中,MATCH(Data,Data,0)得到數(shù)組{1;1;1;4;4;4;7;7;7;10;10;7;1},即區(qū)域Data中每個值在該區(qū)域中出現(xiàn)的行號。ROW(INDIRECT(“1:”&ROWS(Data)))得到數(shù)組{1;2;3;4;5;6;7;8;9;10;11;12;13},INDIRECT函數(shù)將“1:13”轉(zhuǎn)換成行區(qū)域$1:$13。
MATCH(Data,Data,0)=ROW(INDIRECT(“1:”&ROWS(Data)))即上述兩個數(shù)組相比較,得到數(shù)組{TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE},IF函數(shù)根據(jù)該數(shù)組獲取MATCH(Data,Data,0)所得數(shù)組中的值,即{1;””;””;4;””;””;7;””;””;10;””;””;””},SMALL函數(shù)分別取這個數(shù)組的第1、2、3、…、13最小值,即{1;4;7;10;””;””;””;””;””;””;””;””;””},將此數(shù)組作為INDEX 函數(shù)的參數(shù),分別取區(qū)域Data中對應(yīng)行的值。
從上圖所示的工作表中可以看出,對于數(shù)組公式中多余的單元格會顯示#NUM!。使用下面的數(shù)組公式避免顯示#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函數(shù)在錯誤值時輸入空。
小結(jié)
ROW函數(shù)中不能再包括其它求值的函數(shù),此時使用INDIRECT函數(shù)來間接引用。
IFERROR函數(shù)是Excel 2007及其后的版本中的函數(shù),當(dāng)?shù)谝粋€參數(shù)為錯誤值時,將另一個參數(shù)作為返回值。若要在Excel 2013中得到同樣的結(jié)果,則要將IF函數(shù)和ISERR函數(shù)結(jié)合使用。
公式中蘊(yùn)含著一些通用思想,可以在其他類似情形中借鑒。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。