可以使用indirect函式來返回引用。如果表名有規律,如sheet1、sheet2……sheetn,可以直接引用,如果表名沒規律,得先用宏表函式取出表名,再引用。
以下圖為例,假設工作表分別為sheet1-sheet5,各表的a1單元格分別為1-5,彙總表在後面,要把各分表的a1單元格取到彙總表。
方法一:表名有規律的方法。
b1?=iferror(indirect("sheet"&row()&"!a1"),"")
公式下拉複製,就可以了,如上圖。
方法二:表名沒有規律的方法。
步驟1:定義名稱x如下
=replace(get.workbook(1),1,find("]",get.workbook(1)),"")
步驟2:a1輸入公式
=if(row()>columns(x)-1,"",index(x,row()))
公式下拉到足夠容納所有工作表名
步驟3:c1輸入公式
=iferror(indirect(a1&"!a1"),"")
公式下拉,結果如下圖
知識擴充套件:
1、get.workbook(1)是4.0宏表函式,以“[工作簿1.xlsm]sheet1”的形式返回所有工作表名的水平陣列,再用replace函式把工作簿名去掉,只保留所有工作表名,再用index函式逐個取出。
2、由於使用了4.0宏表函式,因此,工作簿必須儲存為啟用宏的工作簿(*.xlsm),不能儲存為不啟用宏的工作簿格式(*.xlsx)。
3、indierect函式的用途就是,返回由文字字串指定的引用,如=indirect("sheet1!a1"),就是返回sheet1工作表的a1單元格的值,工作表名用“!”表示。
可以使用indirect函式來返回引用。如果表名有規律,如sheet1、sheet2……sheetn,可以直接引用,如果表名沒規律,得先用宏表函式取出表名,再引用。
以下圖為例,假設工作表分別為sheet1-sheet5,各表的a1單元格分別為1-5,彙總表在後面,要把各分表的a1單元格取到彙總表。
方法一:表名有規律的方法。
b1?=iferror(indirect("sheet"&row()&"!a1"),"")
公式下拉複製,就可以了,如上圖。
方法二:表名沒有規律的方法。
步驟1:定義名稱x如下
=replace(get.workbook(1),1,find("]",get.workbook(1)),"")
步驟2:a1輸入公式
=if(row()>columns(x)-1,"",index(x,row()))
公式下拉到足夠容納所有工作表名
步驟3:c1輸入公式
=iferror(indirect(a1&"!a1"),"")
公式下拉,結果如下圖
知識擴充套件:
1、get.workbook(1)是4.0宏表函式,以“[工作簿1.xlsm]sheet1”的形式返回所有工作表名的水平陣列,再用replace函式把工作簿名去掉,只保留所有工作表名,再用index函式逐個取出。
2、由於使用了4.0宏表函式,因此,工作簿必須儲存為啟用宏的工作簿(*.xlsm),不能儲存為不啟用宏的工作簿格式(*.xlsx)。
3、indierect函式的用途就是,返回由文字字串指定的引用,如=indirect("sheet1!a1"),就是返回sheet1工作表的a1單元格的值,工作表名用“!”表示。