推薦你用indirect 函式的第四種經典應用場景:跨資料表求和。
我用的版本是 Excel 2016,其他版本的介面可能略有不同。
案例:
沿用昨天的表,如果我們需要對每個人的獎金求和,即跨表呼叫並求和,怎麼實現?
解決方案:
方案 1. 也許有人抖機靈,說在昨天已經多表呼叫的結果上,橫向 sum 求和。嗯,不能說不對,但是如果表資料列特別多,sheet 特別多,且總表只需要顯示求和資料時,這顯然不是最優方法。
方案 2. 假如總表的人員排名跟所有月表的人員排名完全一致,可以用以下公式:
=SUM("*"!B2)
* 請注意:這個方法很簡單,但是對錶格要求比較高,但凡人員列稍有差異,結果就出錯。比如,郭德綱 2 月休假,沒有獎金,2 月的表裡就沒有放他的名字,本方案就不適用
方案 3. 輸入以下陣列公式,按 Ctrl +Shift + Enter 生效:
=SUM(SUMIF(INDIRECT(ROW($1:$3)&"月!A:A"),A2,INDIRECT(ROW($1:$3)&"月!b:b")))
公式翻譯:
推薦你用indirect 函式的第四種經典應用場景:跨資料表求和。
我用的版本是 Excel 2016,其他版本的介面可能略有不同。
案例:
沿用昨天的表,如果我們需要對每個人的獎金求和,即跨表呼叫並求和,怎麼實現?
解決方案:
方案 1. 也許有人抖機靈,說在昨天已經多表呼叫的結果上,橫向 sum 求和。嗯,不能說不對,但是如果表資料列特別多,sheet 特別多,且總表只需要顯示求和資料時,這顯然不是最優方法。
方案 2. 假如總表的人員排名跟所有月表的人員排名完全一致,可以用以下公式:
=SUM("*"!B2)
回車後,公式會自動變成 =SUM("1月:3月"!B2),即讀取所有 sheet 的 B2 單元格並求和* 請注意:這個方法很簡單,但是對錶格要求比較高,但凡人員列稍有差異,結果就出錯。比如,郭德綱 2 月休假,沒有獎金,2 月的表裡就沒有放他的名字,本方案就不適用
方案 3. 輸入以下陣列公式,按 Ctrl +Shift + Enter 生效:
=SUM(SUMIF(INDIRECT(ROW($1:$3)&"月!A:A"),A2,INDIRECT(ROW($1:$3)&"月!b:b")))
公式翻譯:
INDIRECT(ROW($1:$3)&"月!A:A"):讀取 sheet”1 月“到”3 月“的 A 列值,即姓名sumif(...,A2,INDIRECT(ROW($1:$3)&"月!b:b")):將上一步讀取的值與 A2 的值比較,如果相等(即姓名相同),則讀取 sheet”1 月“到”3 月“的 B 列值,即獎金最後用 Sum 對讀出的每個月獎金值求和