在Excel資料表中(如下圖),如果想要找出那一個內容重覆,該如何處理呢?例如:先建立一組流水號(公式中會用到),在內容的儲存格則顯示大寫英文字母,來檢驗與第幾個儲存格重覆。
C1儲存格中的公式為陣列公式(要按Ctrl+Alt+Enter):
{=IFERROR(SMALL(IF((($B$2:$B$21=$B2)*($A$2:$A$21<>$A2)),$A$2:$A$21),1),"")}
在IF函數中的「*」,代表AND運算。
$B$2:$B$21=$B2會產生B2在B2:B21中是否相同的邏輯值陣列
(True;False;False;…..;True;False;False)
$A$2:$A$21<>$A2會產生A2在A2:A21中是否不相同的邏輯陣列
(False;False;False;……;True;False;False)
此舉在找出是否為自己和自己重覆
($B$2:$B$21=$B2)*($A$2:$A$21<>$A2)會得到一個AND後的運算結果
(True;False;False;…..;True;False;False) AND (False;False;False;……;True;False;False)
=(Fasle;False;Fasle;False;……;True;Fasle;Fasle)
公式變為:
{=IFERROR(SMALL(IF(((Fasle;False;Fasle;False;……;True;Fasle;Fasle),$A$2:$A$21),1),"")}
因為第18個為True,所以公式結果為:
{=IFERROR(SMALL(18,1),"")}
=18
其中SMALL函數的用途為如果有多個重覆時,會顯示第一個重覆的位置。
而IFERROR函數的用途為如果都沒有重覆時,可以不顯示錯誤訊息。

這個方法,怎麼試都不行,不是VALUE就是NUM.... 我的內容,A列是用A-001,往下遞增,當然也會碰上B-001或C開頭的編號,內容的B列也是類似的,只是可能有數字與文字等不同內容,其中當然也會有重複內容。 不管我用這公式,或是將編號改成數字,或是其他修正方案,都不能呈現版主那樣的內容!這也太奇怪了!
以文中的例子來看,「18」乃是第18個,剛好對應到編號的18。所以你改以文字當編號,該公式就會出錯。 公式要改為: =IFERROR(OFFSET($A$1,SMALL(IF((($B$2:$B$21=$B2)*($A$2:$A$21<>$A2)),ROW($A$2:$A$21)),1)-1,0),"")
我是上一個COMMENT的同一個留言者,我是用了https://isvincent.pixnet.net/blog/post/47347224這篇的方式,加上INDIRECT這條函數,找出重複儲存格位置的內容.... 我還是很好奇,這篇文章的函數,為何不適用在我身上?????
以文中的例子來看,「18」乃是第18個,剛好對應到編號的18。所以你改以文字當編號,該公式就會出錯。 公式要改為: =IFERROR(OFFSET($A$1,SMALL(IF((($B$2:$B$21=$B2)*($A$2:$A$21<>$A2)),ROW($A$2:$A$21)),1)-1,0),"")
版主這個方法果然可行,我想應該是自己沒有真正理解,因為曾嘗試用ROW(),取代編號,但是現在一想,還是沒有告訴EXCEL,是哪個範圍要<>$A2。可能是一直以為,編號根本不可能重複,往錯誤的方向鑽牛角尖了! 感謝版主。
謝謝你光臨我的教學部落格。 也可以參考:https://isvincent.pixnet.net/blog/post/49464788