一、語(yǔ)法:
INDIRECT(ref_text,[a1]):
ref_text:對(duì)單元格的引用,此單元格可以包含A1-樣式的引用、R1C1-樣式的引用、定義為引用的名稱(chēng)或者對(duì)文本字符串單元格的引用。如果ref_text是對(duì)另外一個(gè)工作部的引用(外部引用),則那個(gè)工作簿必須被打開(kāi)。
[a1]:一邏輯值,指明包含在單元格ref_text中的引用類(lèi)型。如果[a1]為T(mén)RUE或者省略,ref_text被解釋為A1-樣式的引用;如果[a1]為FALSE,ref_text被解釋為R1C1-樣式的引用。
注:我們常用的為A1-樣式。
A1-樣式:
這里的A就是列號(hào),即A列;
這里的1表示行號(hào),即第1行;
所以在A1引用樣式下,第1行第1列,用A1來(lái)表示,就是我們通常說(shuō)的A1單元格。

R1C1-樣式:
這里的R就是Row的第一個(gè)字母,R1就是表示第1行;
這里的C就是Column的第一個(gè)字母,C1就是表示第1列;
所以在R1C1引用樣式下,第1行第1列就是用R1C1來(lái)表示。

二、用法
1、indirect函數(shù)對(duì)單元格引用的兩種方式。
看下圖,使用indirect函數(shù)在C2、C3引用A1單元格的內(nèi)容。

1——=INDIRECT("A1"),結(jié)果為C3。這種使用,簡(jiǎn)單的講,就是將這些引用地址套上雙引號(hào),然后再傳遞給INDIRECT函數(shù)。
2——=INDIRECT(C1),結(jié)果為C2。解釋?zhuān)阂驗(yàn)镃1的值就是"A1",在公式編輯欄,選中“C1”,然后按下F9鍵,計(jì)算值,可以看到變?yōu)椤?A1"”,本質(zhì)沒(méi)變,都是對(duì)單元格引用。

上面兩者的區(qū)別在于:前者是A1單元格內(nèi)文本的引用,后者是引用的C1單元格內(nèi)的地址引用的單元格的內(nèi)容。
2、indirect函數(shù)工作表名稱(chēng)的引用
如下圖所示:

如果需要在“二班”工作表,計(jì)算“一班”工作表B2:B5的成績(jī)總和??梢允褂眠@樣的 公式:=SUM(INDIRECT("一班!B2:B5"))?!窘忉?zhuān)篿ndirect("工作表名!單元格區(qū)域")】

注:另外一種情況是當(dāng)工作表名稱(chēng)直接是數(shù)字的,在工作表名稱(chēng)兩邊必須添加上一對(duì)單引號(hào)。

如果需要在“2”工作表,計(jì)算“1”工作表B2:B5的成績(jī)總和??梢允褂眠@樣的 公式:=SUM(INDIRECT("'1'!B2:B5"))。解釋?zhuān)篿ndirect(" '工作表名'!單元格區(qū)域")
總結(jié):如果工作表名為漢字,工作表名前后可以加上一對(duì)單引號(hào),也可以不加。但是數(shù)字和一些特殊字符時(shí),必須加單引號(hào),否則不能得到正確結(jié)果。
我們?cè)诠ぷ鞅砻麜r(shí)形成習(xí)慣盡量不要有空格和符號(hào),這樣可以不怕indirect引用忘記加單引號(hào)括起來(lái)。要么形成習(xí)慣所有indirect帶工作表名引用時(shí)都用單引號(hào)將代表工作表名的字符串括起來(lái)。

3、INDIRECT函數(shù)對(duì)工作簿引用的書(shū)寫(xiě)方式和細(xì)節(jié)正確寫(xiě)法
=INDIRECT("[工作簿名.xls]工作表表名!單元格地址")
INDIRECT函數(shù),如果是對(duì)另一個(gè)工作簿的引用(外部引用),則那個(gè)工作簿必須被打開(kāi)。如果源工作簿沒(méi)有打開(kāi),函數(shù) INDIRECT 返回錯(cuò)誤值 #REF!。


4、Indirect函數(shù)應(yīng)用實(shí)例一:制作多級(jí)下拉菜單
數(shù)據(jù)有效性課程提到過(guò),可查看課程回顧。

5、Indirect函數(shù)應(yīng)用實(shí)例二:簡(jiǎn)單多表合并






公式:=INDIRECT(B$1&"!B"&ROW())
公式說(shuō)明:
B$1&"!B"&ROW(),根據(jù)ROW函數(shù)產(chǎn)生的行號(hào),生成單元格地址。例公式在第2行時(shí),ROW()結(jié)果是2,B$1&"!B"&ROW()的結(jié)果就是:1號(hào)!B2
當(dāng)往下拖動(dòng)時(shí)是1號(hào)!B3、1號(hào)!B4、1號(hào)!B5…………
當(dāng)往右拖動(dòng)時(shí)是2號(hào)!B2、3號(hào)!B2、4號(hào)!B2、5號(hào)!B2…………
6、Indirect函數(shù)應(yīng)用實(shí)例三:多表查找
工資表模板中,每個(gè)部門(mén)一個(gè)表。在查詢(xún)表中,要求根據(jù)提供的姓名,從財(cái)務(wù)部、人事部、銷(xiāo)售部3個(gè)工作表中查詢(xún)?cè)搯T工的基本工資。
你可以去用vlookup函數(shù)結(jié)合if函數(shù)一個(gè)表一個(gè)表查找,但是你可以想象會(huì)繁瑣。這才三張表,更不用去想假如有30張了…………
==IFERROR(VLOOKUP(查詢(xún)!A2,財(cái)務(wù)部!A:B,2,0),IFERROR(VLOOKUP(查詢(xún)!A2,人事部!A:B,2,0),IFERROR(VLOOKUP(查詢(xún)!A2,銷(xiāo)售部!A:B,2,0),"查無(wú)此人")))




分析:
如果,我們知道A3是財(cái)務(wù)部的,那么公式可以寫(xiě)為:
=VLOOKUP(查詢(xún)!A2,財(cái)務(wù)部!A:B,2,0)
如果,我們知道A3可能在財(cái)務(wù)部或人事部這2個(gè)表中,公式可以寫(xiě)為:
=IFERROR(VLOOKUP(查詢(xún)!A2,財(cái)務(wù)部!A:B,2,0), VLOOKUP(查詢(xún)!A2,人事部!A:B,2,0))
意思是,如果在財(cái)務(wù)部表中查找不到(用iferror函數(shù)判斷),查詢(xún)不到則去人事部表中再查找。
如果,我們知道A3只能能在財(cái)務(wù)部、人事部或銷(xiāo)售部中,否則“查無(wú)此人”,公式可以再次改為:
=IFERROR(VLOOKUP(查詢(xún)!A2,財(cái)務(wù)部!A:B,2,0),IFERROR(VLOOKUP(查詢(xún)!A2,人事部!A:B,2,0),IFERROR(VLOOKUP(查詢(xún)!A2,銷(xiāo)售部!A:B,2,0),"查無(wú)此人")))
意思是,如果在財(cái)務(wù)部表中查找不到(用iferror函數(shù)判斷),查詢(xún)不到則依次去人事部、銷(xiāo)售部表中再查找,三張表都沒(méi)有那就是“查無(wú)此人”。
如果,有更多的表,本例中僅有3個(gè)表,那就一層層的套用下去。假設(shè)有20-30張表你能想想么?【實(shí)際上如果看不明白建議直接通過(guò)方方格子、哈德門(mén)工具箱等外部插件直接合并工作表到一起,缺陷就是數(shù)據(jù)更新時(shí)都需要重新合并查找一次】

我們結(jié)合indirect函數(shù)和vlookup配合其他來(lái)一步實(shí)現(xiàn),簡(jiǎn)化公式,以適合在更多的表中查詢(xún)【學(xué)會(huì)修改公式嵌套使用】:

=VLOOKUP(A2,INDIRECT(LOOKUP(1,0/COUNTIF(INDIRECT({"財(cái)務(wù)部","人事部","銷(xiāo)售部"}&"!a:a"),A2),{"財(cái)務(wù)部","人事部","銷(xiāo)售部"})&"!A:B"),2,0)
注:
COUNTIF(INDIRECT({"財(cái)務(wù)部","人事部","銷(xiāo)售部"}&"!a:a"),A2)
1——確定員工是在哪個(gè)表中。這里利用countif函數(shù)可以多表統(tǒng)計(jì)計(jì)算各個(gè)表中該員工存在的個(gè)數(shù);
2——利用lookup(1,0/(數(shù)組),數(shù)組) 結(jié)構(gòu)取得工作表的名稱(chēng);
3——利用indirec函數(shù)把字符串轉(zhuǎn)換成單元格引用;
4——利用vlookup查找即可。
關(guān)鍵部分:
A2:查找的內(nèi)容
{""}:大括號(hào)內(nèi)是要查找的多個(gè)工作表名稱(chēng),用英文狀態(tài)下逗號(hào)分隔;
a:a :本例是姓名在各個(gè)表中的A列,如果在B列則為b:b;
A:B :vlookup查找的區(qū)域
2:是vlookup第3個(gè)參數(shù),相對(duì)應(yīng)的列數(shù)。你懂的!【找什么;在哪兒找;查找區(qū)域第幾列;精確還是模糊查找】
7、Indirect函數(shù)應(yīng)用實(shí)例四:多表求和
如下圖所示,有1日~5日這5個(gè)列相同、行數(shù)不同的明細(xì)表,要求匯總出每個(gè)產(chǎn)品的銷(xiāo)量之和。






匯總求和公式:
=SUMPRODUCT(SUMIF(INDIRECT(ROW($1:$5)&"日!b:b"),A2,INDIRECT(ROW($1:$5)&"日!c:c")))
注:
如果只有一個(gè)表,我們只需要用sumif函數(shù)直接求和:
=SUMIF('1日'!B:B,合計(jì)!A2,'1日'!C:C)
對(duì)于多個(gè)表,除了用sumif()+sumif+sumif()...外【和上例iferror和vlookup結(jié)合一個(gè)個(gè)查找相似】,Sumif函數(shù)支持多表同時(shí)求和,但必須用indirect函數(shù)生成對(duì)多個(gè)表的引用,即:
INDIRECT(ROW($1:$5)&"日!B:B")和INDIRECT(ROW($1:$5)&"日!C:C")
用sumif組合起來(lái),即:
=SUMIF(INDIRECT(ROW($1:$5)&"日!b:b"),A2,INDIRECT(ROW($1:$5)&"日!c:c"))
但是上述的公式返回的每個(gè)表的求和結(jié)果,是一組數(shù),我們需要把他們匯總起來(lái),最后還需要用sumrpoduct函數(shù)進(jìn)行求和,即:
=SUMPRODUCT(SUMIF(INDIRECT(ROW($1:$5)&"日!b:b"),A2,INDIRECT(ROW($1:$5)&"日!c:c")))
或者最后用sum函數(shù)進(jìn)行求和,注意這時(shí)候需要使用數(shù)組公式哦,按ctrl+shift+enter運(yùn)行【{}】,即:
{=SUM(SUMIF(INDIRECT(ROW($1:$5)&"日!b:b"),A2,INDIRECT(ROW($1:$5)&"日!c:c")))}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?by:wehfouh
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2018-10-7 ? ?18:06