今天和小伙伴們分享幾個(gè)查找不重復(fù)記錄的套路,這個(gè)不重復(fù)的記錄相當(dāng)于用刪除重復(fù)項(xiàng)這個(gè)功能,比如表中有2個(gè)相同的名字,只取第一次出現(xiàn)的記錄。也就是如果一條記錄重復(fù)出現(xiàn)多次,只取第一次出現(xiàn)的記錄。
-01-
offset多維引用
1.將A列中的部門去除重復(fù)項(xiàng)
如下圖所示,去除重復(fù)項(xiàng)的結(jié)果如E列所示,最簡(jiǎn)單的方法就是用數(shù)據(jù)中-刪除重復(fù)值這個(gè)命令?,F(xiàn)在我們說(shuō)的是用函數(shù)的方法來(lái)實(shí)現(xiàn),在E2單元格中輸入公式=IFERROR(INDEX(A:A,SMALL(IF(COUNTIF(OFFSET(A$2,,,ROW($2:$11)-1),A$2:A$11)=1,ROW($2:$11)),ROW(A1))),""),按三鍵結(jié)束,下拉填充。
上面那個(gè)公式主要用到offset的多維引用,現(xiàn)在不懂也沒(méi)有關(guān)系??梢杂幂o助列的方法來(lái)完成。先簡(jiǎn)單說(shuō)一下思路,主要是找到每個(gè)部門第一次出現(xiàn)的行號(hào),然后提取出每個(gè)行號(hào),最后返回A列的對(duì)應(yīng)的單元格。
在B列添加一個(gè)輔助列,在B2單元格中輸入公式=IF(COUNTIF(A$2:A2,A2)=1,ROW()),結(jié)果如上圖B列所示。COUNTIF(A$2:A2,A2)是動(dòng)態(tài)區(qū)域,下拉時(shí),區(qū)域會(huì)擴(kuò)展,返回的結(jié)果相當(dāng)于每個(gè)部門出現(xiàn)的次數(shù)。外面再用if函數(shù)判斷,如果countif返回的結(jié)果等于1,那么返回對(duì)應(yīng)的行號(hào),否則返回false。
在C2單元格中輸入公式=IFERROR(INDEX(A:A,SMALL(B$2:B$11,ROW(A1))),"")。SMALL(B$2:B$11,ROW(A1))是將輔助列的行號(hào)從小到大的提取出來(lái)。small是返回?cái)?shù)組中第k個(gè)最小值。第一個(gè)最小值是2,下拉第二個(gè)最小值是3......然后用index返回A列中對(duì)應(yīng)的位置。iferror是用來(lái)處理錯(cuò)誤,將small產(chǎn)生的錯(cuò)誤值轉(zhuǎn)為空文本""。
-02-
match( )=row( )
2.將A列中的部門去除重復(fù)項(xiàng)
第2種套路主要用的是match函數(shù)和row函數(shù)。在E15單元格輸入公式=IFERROR(INDEX(A:A,SMALL(IF(MATCH(A$15:A$24,A$15:A$24,)=ROW($15:$24)-14,ROW($15:$24)),ROW(A1))),""),按三鍵結(jié)束,下拉填充。
思路還是查找各部門第一次出現(xiàn)的行號(hào)。主要的方法就是用match查找到位置,然后和序列號(hào)比較,如果相等就是第一次出現(xiàn)的位置,那么返回它的行號(hào)。下面還是用輔助列說(shuō)明。
在B列添加輔助列,B15單元格輸入公式=IF(MATCH(A15,A$15:A$24,)=ROW(A1),ROW()),下拉。MATCH(A15,A$15:A$24,)是查找A15的值在A$15:A$24這個(gè)區(qū)域的位置。ROW(A1)下拉時(shí)構(gòu)建一個(gè)以1開始的序列號(hào)。如果match返回的位置和對(duì)應(yīng)的序列號(hào)相等,那么就是部門第一次出現(xiàn)的位置,要返回它的行號(hào)。
在輔助列中算出了各部門第一次出現(xiàn)的行號(hào),剩下的就一樣了。在C15單元格中輸入公式=IFERROR(INDEX(A:A,SMALL(B$15:B$24,ROW(A1))),""),下拉完成。
-03-
match+countif動(dòng)態(tài)區(qū)域
3.將A列中的部門去除重復(fù)項(xiàng)
第3種套路主要是用match和countif的動(dòng)態(tài)區(qū)域。在C28單元格輸入公式=IFNA(INDEX(A:A,MATCH(,COUNTIF(C$27:C27,A$28:A$37),)+27),""),按三鍵結(jié)束,下拉完成。這個(gè)公式還是有點(diǎn)難理解的,好處就是公式比上面2個(gè)短。它是把上一次的結(jié)果放入下一次的計(jì)算區(qū)域中。
countif函數(shù)的第一參數(shù)是動(dòng)態(tài)區(qū)域,第2參數(shù)是各部門的數(shù)據(jù)。查找各部門在第一參數(shù)中的個(gè)數(shù),沒(méi)有的返回0,有的返回對(duì)應(yīng)的個(gè)數(shù),構(gòu)成一個(gè)數(shù)組。然后用match查找第一個(gè)0的位置,再加上表頭的行號(hào)就是在A列中的行號(hào)。最后用index返回相應(yīng)的值。
這里的關(guān)鍵是countif的第一參數(shù)在第一次的時(shí)候肯定不會(huì)包含A28:A37,就相當(dāng)于countif的第一參數(shù)是一個(gè)空的數(shù)組,用A列的每個(gè)單元格和空的數(shù)組進(jìn)行比較,如果A28沒(méi)有在空數(shù)組中出現(xiàn),就把A28放到空數(shù)組中,然后A29和那個(gè)數(shù)組比較,如果A29也沒(méi)有出現(xiàn)在那個(gè)數(shù)組中,那么把A29也放到那個(gè)數(shù)組中;如果A29已經(jīng)出現(xiàn)在那個(gè)數(shù)組中,那么不管了,直接看A30有沒(méi)有出現(xiàn)在那個(gè)數(shù)組中......以此類推。
鏈接:
https://pan.baidu.com/s/1Q59brvhw4woFO0CfFMCkGg
提取碼:w6or
聯(lián)系客服