Indirect函數範例:學5種用法與跨工作表失敗
Indirect函數範例是很適合的進階技巧,它能將文字字串轉換為儲存格參照,在很多複雜公式常常用到。本文帶你學會5種用法,補充跨工作表失敗的解決方式。

📝 什麼是 INDIRECT 函數?
INDIRECT 的核心精神只有一個:「把文字轉換成真實的儲存格位置」。
一般公式(如 =A1)是寫死的,但 INDIRECT 允許你「延後決定」要抓取哪個儲存格,直到公式計算的那一刻,才根據文字內容動態解析。
✨ 5 大實戰應用情境
把儲存格當「遙控器」。A1 輸入 “B5”,公式寫 =INDIRECT(A1),它就會跑去 B5 把資料抓回來。改 A1 的字,目標就跟著變!
彙整各月報表必備!A1 輸入工作表名稱,用 =INDIRECT(“‘” & A1 & “‘!B5”) 就能無縫切換抓取不同分頁的資料。
第二層選單選項跟著第一層變!將資料驗證來源設為 =INDIRECT($A$1),搭配命名範圍輕鬆完成。
讓加總範圍隨時變動,不用重選。例如 =SUM(INDIRECT(“B” & D1 & “:B” & D2)),透過 D1 和 D2 靈活控制上下界。
第二個參數設為 FALSE,直接用列號與欄號定位。例如 =INDIRECT(“R2C3”, FALSE),在程式碼串接時比 A1 樣式更直觀。
⚠️ 效能地雷與常見錯誤排除
INDIRECT 是易失性函數,只要工作表有任何風吹草動(如輸入資料),它就會全部重新計算。在大型檔案中大量使用會讓 Excel 卡頓喔!
• #REF!:最常見!檢查工作表名稱是否拼錯?名稱有空格但沒加單引號?來源檔案沒打開?
• #VALUE!:來源儲存格放的是純數字(如 5)而不是文字(如 “A5″),記得轉成文字格式!
一、INDIRECT函數的語法結構
INDIRECT是Excel的查閱與參照函數,語法為INDIRECT(ref_text, [a1]),共有兩個參數。第一個參數ref_text是必要的,必須是代表有效儲存格位址的文字字串,例如"A1"或"Sheet2!B5",也可以是已定義的命名範圍名稱。第二個參數[a1]是選擇性的邏輯值,TRUE或省略代表A1樣式,FALSE則切換為R1C1樣式。
最簡單的範例是在A1輸入文字"B5",公式=INDIRECT(A1)就會追蹤到B5並傳回其值。結果看起來與直接寫=B5相同,但差別在於參照目標是動態決定的,而不是寫死在公式裡。
INDIRECT的核心精神其實很簡單,就是「執行時才解析參照」。一般公式在輸入時就已經確定參照位置,而INDIRECT會把這個決定延後到公式實際計算的那一刻,因此才能根據儲存格內容靈活調整,這也是後面各種進階用法的共同基礎。
二、最基本的文字轉參照
INDIRECT最直觀的入門用法,就是把某個儲存格的文字內容當作位址來使用。
假設A1輸入的是文字"B5",而B5存放的數值是100,公式=INDIRECT(A1)會先讀取A1的值"B5",再將它解析成對B5的真實參照,最終傳回100。
實際操作時,只要把A1改為"C3",公式就會自動改追蹤C3的值;再改成"D10",立刻又會追蹤到D10。整個過程完全不需要修改公式本身,只需要改變A1這個「控制格」的內容。
需要注意的是,ref_text來源儲存格必須是文字格式的有效位址字串。若A1存放的是純數字5而不是字串"B5",INDIRECT無法解析為有效參照,就會傳回#REF!錯誤。因此確認來源儲存格格式與內容是否正確,通常是這個用法最常見的除錯起點。
三、跨工作表的儲存格參照
INDIRECT也可以透過文字拼接,參照到其他工作表的儲存格。
語法上只需在ref_text中加入工作表名稱與驚嘆號,例如=INDIRECT("Sheet2!A1"),就能從目前工作表取得Sheet2的A1值,不需要手動切換工作表。
如果工作表名稱包含空格或特殊字元,就必須用單引號括住名稱,例如=INDIRECT("'Sales Report'!A1"),否則Excel無法正確解析,會傳回#REF!錯誤。
這個用法在整合多張格式相同的工作表時特別方便。例如每個月一張工作表,只要在公式中切換工作表名稱,就能快速提取對應月份的資料。後面第七節會進一步說明如何把工作表名稱存放在儲存格中,實現完全動態的跨表參照。
四、搭配R1C1樣式的參照方式
當INDIRECT的第二個參數設為FALSE時,ref_text會改用R1C1樣式解析。
R1C1樣式是用列號與欄號直接定位儲存格,例如R2C3代表第2列第3欄,換算成A1樣式就是C2。完整公式寫法為=INDIRECT("R2C3", FALSE),傳回C2的值。
如果列號存放在D1、欄號存放在D2,可以寫成=INDIRECT("R" & D1 & "C" & D2, FALSE)
動態組合出目標位址,不需要額外進行欄名轉換。
R1C1樣式在一般Excel使用情境中比較少見,但在VBA程式碼裡其實非常常用。理解這個參數的切換方式,對於日後閱讀或撰寫VBA中的儲存格參照邏輯,會有很大的幫助。
五、建立動態範圍加總
INDIRECT也很適合用來建立可切換的動態加總範圍。
假設A1輸入文字"B1:B10",公式=SUM(INDIRECT(A1))就會對B1:B10進行加總;只要把A1改為"C1:C10",公式就會自動切換加總對象,完全不需要修改公式本身。
搭配MATCH函數還可以進一步控制範圍的起訖列號。例如:
=MATCH(99, INDIRECT("B" & D1 & ":B" & D2), 0)
其中D1與D2分別存放起始與結束列號,就能動態設定查詢範圍的上下界。
不過在效能上,有一個值得注意的替代方案:
=SUM(A1:INDEX(A:A, C1))
C1存放結束列號,這個INDEX寫法與INDIRECT版本計算結果相同,但INDEX不是易失性函數,在大型檔案中效能通常會明顯較好。如果工作表已經出現計算速度變慢的情況,可以優先考慮改用這個寫法。
六、與資料驗證連動下拉選單
INDIRECT在資料驗證中最經典的應用,就是製作兩層連動下拉選單。
例如先定義兩個命名範圍:水果(蘋果、芒果等)與蔬菜(菠菜、高麗菜等)。第一層下拉讓使用者在A1選擇類別,第二層下拉的來源設定為=INDIRECT($A$1),Excel就會依照A1的選擇,自動切換對應的命名範圍清單。
實務上常見的一個地雷是:如果第一層選單的項目包含空格(例如顯示為Apple Phone),但Excel定義名稱不允許空格,通常會命名為Apple_Phone。
這時若直接使用=INDIRECT(A1)就會找不到名稱而報錯,需要改用:
=INDIRECT(SUBSTITUTE(A1, " ", "_"))
讓空格自動轉換為底線再進行參照。
為了避免日後維護困擾,建議在規劃命名範圍時統一使用底線命名,並在文件中記錄選單顯示名稱與命名範圍之間的對應關係,未來修改時會比較不容易出錯。
七、動態指向不同工作表
當工作表名稱存放在儲存格中時,INDIRECT就能實現完全動態的跨表參照。
假設A1的值是"Sheet3",公式
=INDIRECT(A1 & "!B5")
就可以取得Sheet3的B5內容。只要修改A1的工作表名稱,公式就會立刻追蹤到新的工作表,不需要逐一修改公式。
不過這裡有一個常見陷阱:如果工作表名稱含有空格(例如改名為Sheet 3),公式就會傳回#REF!錯誤。
因此最佳實務寫法通常會直接加上單引號:
=INDIRECT("'" & A1 & "'!B5")
無論工作表名稱是否包含空格,公式都能正常運作。
在整合各分店、各月份各自一張工作表的情境中,這個用法非常實用。匯總表只需切換A1的名稱,就能提取不同工作表的指定資料,大幅降低後續維護成本。
八、易失性函數的效能考量
INDIRECT屬於Excel的易失性函數。這代表只要工作表發生任何變動,所有包含INDIRECT的公式都會強制重新計算,即使公式的輸入值其實沒有改變。
在大型檔案,或同時存在其他易失性函數(如NOW、TODAY、OFFSET)的情況下,大量使用INDIRECT可能會明顯拖慢計算速度。每一次輸入資料,都可能感受到計算時的停頓。
在動態範圍加總的情境中,可以考慮改用非易失性的INDEX函數替代。例如:
INDIRECT寫法:=SUM(INDIRECT("A1:A" & C1))
INDEX替代寫法:=SUM(A1:INDEX(A:A, C1))
兩者計算結果相同,但INDEX不具易失性,因此在效能上會更穩定。
此外INDEX寫法還有一個優點:插入新列時,A:A涵蓋整欄,INDEX仍能依C1數值定位終點列,行為比INDIRECT的文字拼接更穩健。如果工作表效能已經出現瓶頸,通常可以先從INDIRECT的用法著手優化。
九、常見錯誤與排除方式
INDIRECT最常見的錯誤主要有兩種:#REF!與#VALUE!。
#REF!代表ref_text無法解析為有效參照,常見原因包括:工作表名稱拼錯、名稱包含空格但沒有加單引號、參照的外部活頁簿未開啟,或命名範圍名稱不存在。
#VALUE!則通常發生在ref_text根本不是文字,或第二個參數輸入了錯誤的資料類型。
排除#REF!時,可以先從最基本的地方開始檢查:確認工作表名稱是否完全正確、名稱是否含空格、是否已加單引號,以及來源活頁簿是否已開啟。
排除#VALUE!時,可以用=ISNUMBER(A1)檢查ref_text來源是否為數字。如果是,就需要先轉換為文字格式再使用。
另外還有一個很容易忽略的問題:INDIRECT所參照的位址是由文字產生,因此插入或刪除列欄時不會自動調整。例如公式=INDIRECT("A1")永遠指向A1,即使插入新列後原本資料移到A2,公式仍然會指向A1。這種「位移後內容悄悄改變」的情況,在需要動態插入列欄的工作表中要特別留意。
Indirect函數範例
Indirect函數範例重點於可以把「文字」直接當作「參照」使用,這個特性讓它在動態報表、連動選單、跨表彙整等情境中幾乎無可取代。
很多人在實務工作中第一次接觸INDIRECT,往往是因為要製作兩層連動下拉選單,或是要從多張格式相同的工作表自動彙集資料。一旦理解它的邏輯,就會發現許多原本需要手動維護的公式,都可以改寫成更有彈性的動態版本。
當然,易失性函數的特性也是INDIRECT最大的代價。檔案小的時候感受不明顯,但當工作表變大、公式變多時,計算速度的差異就會很明顯地出現。遇到這種情況,可以評估哪些INDIRECT能改用INDEX替代,或把部分計算放到輔助欄中處理。靈活性與效能之間如何取得平衡,往往才是熟練使用INDIRECT的真正關鍵。
部落格文章分享
贊贊小屋關於INDIRECT函數文章:
載入中...
