根據上一篇文章:
Excel-查詢指定字串所在的儲存格位址(MATCH,ADDRESS,IFERROR)
如果指定的文字位於多個儲存格時,如何列出標示位址和其內容的清單?
【公式設計與解析】
儲存格E2:
{=IFERROR(ADDRESS(SMALL(IF(IFERROR(FIND($D$2,$A$2:$A$23),0)>0,
ROW($A$2:$A$23),""),ROW(1:1)),1,4),"")}
這是陣列公式,輸入完成要按 Ctrl+Shift+Enter 鍵,Excel 會自動加「{}」。
(1) FIND($D$2,$A$2:$A$23)
在陣列公式中,利用 FIND 函數找出在儲存格A2:A23範圍中的每個儲存格是否含有儲存格D2的內容。若有,會傳回一個數值(位置);若否,傳回錯誤訊息。
(2) IFERROR(FIND($D$2,$A$2:$A$23),0)
若第(1)式傳回錯誤訊息,則利用 IFERROR 函數將錯誤訊息轉換為『0』。
(3) IF(第(2)式>0,ROW($A$2:$A$23),"")
在陣列公式中,若第(2)式傳回數值並且大於 0,表示該儲存格含有儲存格D2的內容,則該式會傳回在ROW($A$2:$A$23)所對應的列號,否則傳回空字串。
(4) SMALL(第(3)式,ROW(1:1))
利用 SMALL 函數將第(3)式傳回的列號,由小至大依序取出。ROW(1:1)向下複製公式時,ROW(1:1)=1→ROW(2:2)=2→ROW(3:3)=3→……。
(5) ADDRESS(第(4)式,1,4)
將第(4)式代入 ADDRESS 函數中,即可傳回對應的儲存格位址。(參數 4 乃指定傳回相對位址)
(3) IFERROR(ADDRESS(第(4)式,1,4),"")
若儲存格A2:A23的資料內容不存在儲存格D2的內容,則以 IFERROR 函數使其傳回空字串。
同理,儲存格F2:
{=IFERROR(OFFSET($A$1,SMALL(IF(IFERROR(FIND($D$2,$A$2:$A$23),0)>0,
ROW($A$2:$A$23),""),ROW(1:1))-1,0),"")}
在此特別改用 OFFSET 函數來取得儲存格內容,你可以自行練習看看。
請參閱上一篇文章:
Excel-查詢指定字串所在的儲存格位址(MATCH,ADDRESS,IFERROR)
【延伸閱讀】
* Excel-查詢資料常用指令MATCH、INDEX、VLOOKUP、OFFSET
* Excel-表格轉換(MATCH,INDIRECT,OFFSET)
* Excel-取出一個儲存格裡的英文字和中文字(MID,MATCH)
留言列表