來自遠方的網友問到:在 Excel 中,如果要根據項目表中的內容,來判斷是否含有特的關鍵字,該如何處理?
參考下圖,在輸入的文字中,如何在項目表中找尋對應的類別。
【公式設計與解析】
儲存格B2:=IFERROR(INDEX($D$2:$D$5,SUMPRODUCT(ROW($E$2:$M$5)*
(SUBSTITUTE($A2,$E$2:$M$5,"")<>$A2))-1,0),"X")
複製儲存格B2,貼至儲存格B2:B8。
公式中使用 SUMPRODUCT 函數,所以公式運算可以使用「陣列」來運算。
(1) SUBSTITUTE($A2,$E$2:$M$5,"")
利用 SUBSTITUTE 函數,將儲存格A2的內容逐一用儲存格E2:M5中陣列中的每一個元素置換成空字串「""」。
(2) (SUBSTITUTE($A2,$E$2:$M$5,"")<>$A2)
將第(1)式的傳回值和儲存格A2內容比較是否為「不相等」,傳回TRUE/FALSE陣列。
若傳回 TRUE 值:表示儲存格A2的內容「有」包含儲存格E2:M5中的內容;
若傳回 FALSE 值:表示儲存格A2的內容「沒有」包含儲存格E2:M5中的內容。
(3) SUMPRODUCT(ROW($E$2:$M$5)*(第(2)式))
ROW 函數用以傳回列號。ROW($E$2:$M$5)表示陣列「{2;3;4;5}」。
將第(2)式的傳回值乘上ROW($E$2:$M$5),可以取得第(2)式中傳回 TRUE 者的列號。
(4) INDEX($D$2:$D$5,第(3)式-1,0)
利用 INDEX 函數,透過第(3)式的傳回值,查詢在陣列儲存格D2:D5中對應的內容。
其中「-1」乃因第(3)式的傳回值是 2~5,而 INDEX 函數中的陣列是 1~4項。
(5) IFERROR(第(4)式,"X")
因為公式可能因為第(3)式查詢不到任何內容而傳回錯誤訊息,所以利用 IFERROR 函數將錯誤訊息以「X」顯示。
若將儲存格D2:D3定義名稱「類別」,將儲存格E2:M5定義名稱「項目」,則公式改為:
儲存格B2:=IFERROR(INDEX(類別,SUMPRODUCT(ROW(項目)*(SUBSTITUTE
($A2,項目,"")<>$A2))-1,0),"X")
【延伸閱讀】
參考:本部落格中其他關於 Excel SUMPRODUCT 函數的應用

真的感謝您啊,您的EXCEL真的獨步江湖
言身寸言身寸你大老遠的光臨我的教學部落格。
海內存知己,天涯若比鄰 您那裡疫情緊張嗎? 這裡早時搶日用品
準備些防疫用品是對的,以免到要用時方恨少。 就像這些資料處理技術,平常多練習,突然要用時,就可以上手。 (您發問的問題相對於一般人是很難的,希望解答能造福一些人。)
同意啊 ,但是也要好像你那麼聰明, 利用substitute 這一個功能 ,再比較 原本那一個句子。 我只從search或者find一類功能, 甚至考慮用vba,但是 我的vba水平太低,寫不來 , 呵呵
多練習,即可靈活應用。 古人云:士人要有百折不回之真心,才會有萬變無窮的妙用。
您好,常看您的教學部落格,受益良多, 想請教您,如果想用2個以上個關鍵字去做判斷是否有相關的教學文章?
可先參考: https://isvincent.pixnet.net/blog/post/42752116 https://isvincent.pixnet.net/blog/post/44001814
您好,在請教您, 字串"ASSY KBDPM CP BL SR FR/AR SK14",關鍵字"FR/AR", 依據您此篇教學,回傳值為0,請問是什麼原因?
感謝您 真的很強><
謝謝你光臨我的教學網站。
使用這個公式有兩個問題想請教,我的文具類別裡面有文具、九乘九項目。當我輸入九乘九文具的時候,無法帶出文具類別。另一個是英文字母大小寫問題。請問這兩個問題能夠解決嗎? 謝謝