INDEX、MATCH、COUNTIF、IFERROR函數組合使用案例講解

2019-12-23     彩虹Excel

至近至遠東西,至深至淺清溪。至高至明日月,至親至疏夫妻。

-《八至》唐.李冶

首先有個問題問下小夥伴們,在Excel中當我們需要對一列數據進行統計不重複的內容時,你會怎麼操作呢?

如果沒猜錯的話,應該是以下這兩種方法

方法一:刪除重複項

點擊菜單欄中的【數據】-【刪除重複項】,刪除重複值

方法二:使用數據透視表

選中需篩選的數據,點擊【插入】-【數據透視表】,然後把對應數據列表頭拉入行中,實現篩選

今天給大家介紹的是使用公式實現數據刪除重複值,重點是可以跟隨原始數據,實時更新

先給大家演示下效果:

可以看出,篩選出的數據和其他方式得出的數據一致,且當我們對原始的人名進行修改的時候,可以看到不重複的人員這一列人名也跟著變動了

先給大家看下C2單元格的公式:

=IFERROR(INDEX($A$2:$A$15,MATCH(0,COUNTIF($C$1:C1,$A$2:$A$15),0),1),"")

公式詳解:

首先可以看出,這個公式主要用到了下面4個函數


IFERROR,INDEX,MATCH,COUNTIF

為了方便理解,下面逐個給大家分析下。

COUNTIF函數

我們知道COUNTIF函數是用來進行計數統計的,語法結構

COUNTIF(range,criteria)

Range: 要計算其中非空單元格數目的區域

Criteria: 以數字、表達式或文本形式定義的條件

我們經常用到的是查找一個內容,在目標區域出現的次數,就像下面這樣統計趙雲在A列出現的次數

看我們的公式:

COUNTIF($C$1:C1,$A$2:$A$15)

可以看出第一個參數C1是絕對引用的,第二個C1是相對引用,即隨著我們下拉單元格,Range區域是隨之變更,C1:C2,C1:C3...

又可以看出Range和Criteria都是一個數據區域,含義是什麼呢?

代表通過Countif函數依次統計A2:A15,每個單元格內容在C1:C1出現的次數

當我們的Range是一個區域或者一個值的時候,Criteria是區域的時候,查找的結果返回的是一組數組

就像上面Countif的Range是C1(趙雲),Criteria是A2:A15,即當Criteria是A2,A5,A9時,返回結果為1;當Criteria不是這幾個單元格內容時,返回的結果都是0,

其實我們的公式就是代表以下這些公式的結果合集:

Countif(C1,A2);Countif(C1,A3);Countif(C1,A4)...

D2輸入公式:

=countif(C1,A2:A15)

最終返回的結果是:

再演示下,如果C1和C2都是趙雲,會出現什麼結果

D3輸入公式:

=countif(C1:C2,A2:A15)

計算步驟同樣是公式的結果合集

Countif(C1:C2,A2);Countif(C1:C2,A3);Countif(C1:C2,A4)...

最終結果是:

所以我們使用的公式輸出的結果就是一列數組,比如我們在C2輸入:趙雲,再在C3使用公式:

=COUNTIF($C$1:C3,$A$2:$A$15)

返回的數組就是如下樣式的:

MATCH函數

接著我們看Match函數,Match函數語法為

MATCH(lookup_value, lookup_array, [match_type])

lookup_value:必需參數,需要在 lookup_array 中查找的值,比如可以是數字也可以是文本,比如"0","趙雲",或者是單元格

lookup_array:必需參數,要搜索的單元格區域。

match_type:可選參數,數字 -1、0 或 1。1代表會查找小於或等於lookup_value 的最大值,0代表等於 lookup_value 的第一個值,-1代表大於或等於 lookup_value 的最小值

我們看公式:

MATCH(0,COUNTIF($C$1:C1,$A$2:$A$15),0)

能看出Lookup_value為0,lookup_array為

COUNTIF($C$1:C1,$A$2:$A$15),match_type為0,代表查找到的第一個值

為什麼lookup_vlaue為0呢, 我們再看上面介紹的Countif函數,當我們查找值的內容(A列的值)不在Range(C列提取值)範圍時,得到的結果是不是0,第一個0的出現是不是就代表的新出現一個不在查找區域的值,即我們需要篩選的數據內的不重複的值

此時我們用Match函數查找第一個0在數組的位置,即得到了新的不重複的值在原始數據第幾行了

INDEX函數

Index函數的語法結構是這樣的:

INDEX(array, row_num, [column_num]),通過行列的內容返回數組裡的具體內容

Array:必需。單元格區域或數組常量。

如果數組只包含一行或一列,則相對應的參數 row_num 或 column_num 為可選參數,我們現在只有一列,所以column_num是可選參數

Row_num:必需。選擇數組中的某行,函數從該行返回數值。如果省略 row_num,則必須有 column_num。

Column_num:可選。選擇數組中的某列,函數從該列返回數值。如果省略 column_num,則必須有 row_num。

看我們的公式:

INDEX($A$2:$A$15,MATCH(0,COUNTIF($C$1:C1,$A$2:$A$15),0),1)

其中Array為A2:A15,Row_num為Match函數輸出的結果,Column_num為1,即查第Match結果行,第1列,在數據區域A2:A15的值

最終即得到我們需要的結果

IFERROR

IFERROR函數是用來判斷計算公式是否正確的一個函數,如果公式正確返回公式的值,如果不正確返回設定的值,我們設定的結果是空值

IFERROR(value, value_if_error)

其中Value值是必需的,檢查是否存在錯誤的值

value_if_error也是必須的,當Vlaue公式的計算結果為錯誤時要返回的值。

錯誤類型有:#N/A、#VALUE!、#REF!、#DIV/0!、#NUM!、#NAME? 或 #NULL!。

總結

整個公式,比較難理解的是COUNTIF函數的那塊,大家可以多多練習下,多試驗幾次就能幫助我們更好的理解了,另外注意因為這是數組公式,輸入完成後,我們需要按CTR+Shift+Enter鍵結束公式。

如果覺得文章對你有幫助的話,希望大家幫忙點贊加分享哦~,謝謝

本文由彩虹Excel原創,歡迎關注,帶你一起長知識!

文章來源: https://twgreatdaily.com/zh-sg/q-DFM28BMH2_cNUgnwKq.html