根據上一篇文章:
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)

練習了一下,發現E2的位址有點跑掉~例如本來應該A1卻變成A2了~ IFERROR(FIND($D$2,$A$2:$A$23),0)>0,ROW($A$2:$A$23),"") 我修改了一下在條件為TRUE的狀況下,"ROW($A$2:$A$23)-1"就正確了.. 若有錯請不吝指正..謝謝
如果是以我的範例圖中所列的位置,原先公式應該沒錯(E2),如果你的儲存格位置和我有所不同(注意:我有標題列),可能公式會不一樣。 另ROW($A$2:$A$23)-1=ROW($A$1:$A$22) 感謝你認真的檢視相關公式,若發現有錯,可再告知。
*****
*****
*****
*****
我明白問題點了...因為我是從A1(B2儲存格)開始...感謝您^^
謝謝你光臨我的網站。
請問如果要 "ADDRESS" 查出的欄位值 (例如查出為 G7 ),當作其他函數的欄位參數 ( 例如=COUNTIFS ( G7:G,"國文") 的G7用address查出 ) 發現會不行~ 不知道有其他方式嗎,謝謝
緊急!!! 我用了您教導的 OFFSET+SMALL+FIND那條語法, 也很順利在同一個EXCEL檔裡找到多筆資料; 可是我要跨檔案找多筆資料就不行了! 一定要先打開該檔案才可以! 可是因為檔案很大, 一次打開多個檔案, 整個變慢. 所以, 我想再請您幫忙, 在連結外部檔案的情況下, 可以跨檔案找尋符合指定字串(該字串在儲存格裡的一堆文字中)的多筆資料, 感恩不盡!