如下圖所示的工作表,使用公式來判斷單元格區域A1:A3與C1:C3中是否有重復值。
從工作表中可以明顯看出,這兩個區域中都含有“Excel”,因此有重復值。
如何使用公式來判斷呢?
先不看答案,自已動手試一試。
公式思路
將單元格區域A1:A3中的每個值與C1:C3中的每個值比較,若都不相同,則沒有重復值,否則就存在重復值。
公式解析
在單元格E1中輸入下面的數組公式:
=OR(TRANSPOSE(A1:A3)=C1:C3)
其值為TRUE,表明兩個區域中存在重復值。如下圖所示。
單元格區域A1:A3中的每個值逐一與單元格區域C1:G1中的每個值相比較,共進行15次比較,得到數組:
{FALSE,FALSE,FALSE,FALSE,FALSE;FALSE,FALSE,FALSE,FALSE,FALSE;FALSE,FALSE,FALSE,FALSE,FALSE}
作為OR函數的參數。由于數組中全為FALSE,因此結果為FALSE,表明兩個區域中沒有重復值。
擴展2:要比較的單元格區域具有更多的行列數
上述比較判斷兩個單元格區域是否具有重復值的方法,要求兩個區域的方向不同,一個是逐行,一個是逐列。然而,對于Excel 2003來說,工作表列數為256列,對于Excel 2007及以上版本來說,工作表列數為16384列,若數據量超過這些列數,就不能使用上面的方法了。
此時,可以使用MATCH函數與COUNT函數組合來判斷兩個單元格區域是否有重復值。
例如,對于前面的例子,可以使用數組公式:
=COUNT(MATCH(A1:A3,C1:G1,0))
如果結果為0,那么表明兩個單元格區域沒有重復值。如果結果為數字,那么該數字就表示這兩個區域具有的重復值個數。
注:可以給要比較的兩個區域命名,例如Data1和Data2,然后使用名稱代稱公式里的區域,例如=COUNT(MATCH(Data1,Data2,0)),這樣更靈活。
MATCH函數在區域Data2中查找區域Data1中的值,若沒有找到則產生錯誤值#N/A,若找到則獲取該值所在的列號。這樣,生成由#N/A或數字組成的數組。將該數組作為COUNT函數的參數,統計數組中的數字。若沒有數字,表明沒有重復值,則為0。若有數字,則返回數字的個數,也即重復值的個數。
小結
要比較兩個區域中的數據,這兩個區域的方向應不同。若兩個區域的方向相同,應使用TRANSPOSE函數將其中一個區域轉置。TRANSPOSE函數的用法詳情參見《Excel函數學習23:TRANSPOSE函數》。
上述方法比較的次數,也就是說產生的數組中元素個數取決于兩個區域所占的行列數,例如第1個例子比較的次數為3×3=9次,第2個例子比較的次數為3×5=15次。
Excel工作表中列的數據代表數組中的每行,即每個數據后都是分號;而工作表中的行數據代表數組中的每列,即每個數據后都是逗號,最后才是分號。
COUNT函數不會統計#N/A值,只返回非#N/A值的數量。