INDIRECT算是比較冷門的函數,先說明函數:
函數語法:INDIRECT(ref_text, [a1])
參數ref_text是以字串的形式顯示參照的儲存格位址,為必要的參數,例如:
INDIRECT("A1")表示參照儲存格A1的資料
在下圖範例1中,儲存格A6的內容是=INDIRECT("A1"),與儲存格A7(=A1)所得到的結果是一樣的,也就是儲存格A1的內容"消耗量"。
注意:不能寫成INDIRECT(A1),除非儲存格A1的資料是儲存格的表示法(如B2)或是被定義的名稱,例如儲存格A1的資料不是=消耗量,而是=B2,則INDIRECT(A1)會參照到B2的儲存格資料,回傳的數值是7;或是"消耗量"是在表單內定義的名稱且等於B2,那麼INDIRECT(A1)因(消耗量=B2)而參照到B2的數值傳回7。(名稱定義請參考應用2)
參數[a1]設定ref_text中儲存格表示的格式,只有兩個選擇:TRUE及FALSE,選擇TRUE表示儲存格表示的格式是以行列標頭的標示表示,如"A1",此時這個參數可省略,若選擇FALSE則表示方式為[R1C1],如"R1C1"表示位於第一列Row1且第一欄Column1的儲存格。
儲存格A8及A9分別為以上兩種。
應用1:每個月用一張工作頁如"2501", "2502", ...等記錄物品A、物品B及物品C的消耗量,並在工作頁"全年"內做總整。
若每月的工作頁內加總的數值分別在儲存格F2, F3及F4,最直接的方式是在工作頁"全年"的儲存格B2中輸入:='2501'!F2,如儲存格A10,但不論是用點選或是輸入的方式,以這個範例,三種物品12個月,總共要操作36次,若物品有上百種,會做到懷疑人生。
這時就可以使用INDIRECT函數來快速完成,首先將頁首各月的顯示與個月工作頁的名稱相同(2501, 2502, ...),
然後在工作頁"全年"的儲存格B2輸入:=INDIRECT(B$1&"!F2"),如A11
然後其他各月中物品A的統計值就能直接用拉的複製完成,這種方式可以減少作業量11/12,以範例1來說只要輸入3次後在一起向後拉複製即完成,若物品很多,作業次數也很可觀,可以改輸入=INDIRECT(B$1&"!F"&ROW(A2)),如範例1儲存格A12,則只要行列各拉一次複製即可完成,若每月工作頁的列號與工作頁"全年"不同,只要加上差值即可,如每月工作頁中物品A的統計值在儲存格F5,差值為+3,則輸入=INDIRECT(B$1&"!F"&ROW(A2)+3)
若每個月工作頁內的物品欄位可能位置有變動,甚至品項有增減,可以再使用一次INDIRECT函數並使用IFERROR及MATCH函數來處理,如儲存格A13:
=IFERROR(INDIRECT(B$1&"!F" & MATCH($A2,INDIRECT(B$1 & "!E:E"),0)))
IFERROR函數會在對應不到物品時將數值設為0,不至於產生錯誤資料
MATCH函數回傳每月工作頁內E欄中與儲存格A2相同資料的列號
同樣,在工作頁"全年"的儲存格B2中輸入後,以行列各拉一次複製即可完成。
應用2:雙層或多層下拉選單設定
在製作自動的紀錄或報告標單時,為避免填寫到錯誤的零件件號,常會使用下拉式表單,但每個件號都有數個個別合適的製程,這時就需要第二層的下拉選單,甚至有第三層的選單需求,範例2中有3個件號須執行相應的3至5個製程。
要在儲存格I1建立第一層選單,
而在儲存格I2建立第二層選單
第一層選單應該多數人都會,步驟簡述如下:
1.1 選擇儲存格I1
1.2 選擇EXCEL主選單中的"資料" -> "資料工具" ->"資料驗證",如下圖在跳出的視窗(如下圖)中:
1.2.1 儲存格內允許: 下拉選單中選擇"清單"。
1.2.2 來源: 選擇或填入=$A$2:$A$4,如左圖
設定件號選單中只有:
儲存格A2中的:1XXX
儲存格A3中的:2XXX
儲存格A4中的:3XXX
1.2.3 點選下方的確定鍵。
完成的第一層選單如左圖。
第二層選單步驟如下:
2.1 名稱定義:
2.1.1選擇儲存格A2:F4
2.1.2 EXCEL主選單點選:公式->從選取範圍建立,在跳出的畫面勾選 最左欄(L)後按確定鍵,如下圖。
2.1.3 點選 名稱管理員,跳出的視窗如下圖。
2.1.4 將空白選項移除:
2.1.4.1 在跳出的視窗中點選 名稱_1XXX,(註:由於EXCEL不允許名稱中第一個是數字,故名稱前會自動加一底線,若是字母就不會有前置的底線),將參照到中的資料改為=二層表單!$B$2:$E$2(註:二層表單是作業中表單工作頁的名稱);
2.1.4.2 點選 名稱_2XXX,將參照到中的資料改為=二層表單!$B$2:$D$2;
2.2 設定第二層表單
2.2.1 選擇儲存格I2
2.2.2 選擇EXCEL主選單中的"資料" -> "資料工具" ->"資料驗證",如下圖
2.2.3 跳出的視窗如下圖,在視窗中:
2.2.3.1 儲存格內允許: 下拉選單中選擇"清單"。
2.2.3.2 來源:
2.2.3.2.1 件號開頭全部是數字,填入=INDIRECT("_" &I1),如左圖。
2.2.3.2.2 件號開頭全部是字母,填入
=INDIRECT(I1)
2.2.3.2.3 件號開頭有些是數字,有些是字母,填入
=INDIRECT(IF(CODE(LEFT(I1))<58,"_","")&I1)
LEFT(I1):取儲存格I1字串中左邊第一個字元
CODE函數是將字元轉換成ASCII CODE,數字0~9對應的是ASCII CODE是 48~57,而字母中ASCII最小的是大寫A,ASCII CODE是65,因此ASCII CODE小於58,表示是數字,大於58而被EXCEL允許的名稱則可能是字母或是中文字。
注意:若件號有開頭是數字、英文字母或中文以外的符號,在名稱定義時可能被EXCEL視為無效字元,會被自動刪除,名稱定義後應檢查名稱是否與件號有差異,並進行處理。
2.2.3.3 按下確定鍵後即完成。
完成後的畫面如下圖。