在 Excel 中,OFFSET 函數能根據起始參照,向上/下/左/右偏移指定的行列數,並可設定回傳範圍的高度與寬度。它不會移動儲存格,而是回傳一個新的參照,適合用於 動態報表、滾動平均、資料自動擴展 等情境。
🔹快速摘要(語法、用途、常見場景)
用途:回傳相對於起始點偏移的儲存格或範圍參照
語法:=OFFSET(reference, rows, cols, [height], [width])常見場景:動態範圍、滾動平均、報表自動更新、圖表資料來源、彈性查表
一、OFFSET 函數語法與用途
=OFFSET(reference, rows, cols, [height], [width])
- reference:起始參照(單一儲存格或相鄰範圍)
- rows:向上(負數)或向下(正數)偏移的行數
- cols:向左(負數)或向右(正數)偏移的列數
- height(選填):回傳範圍的列數
- width(選填):回傳範圍的欄數
回傳結果為一個新的參照,可搭配其他函數使用。
二、範例教學:五個基礎 + 五個進階範例
🔸基礎範例
範例一:單一儲存格偏移
=OFFSET(B2,3,1)
說明:以 B2 為起點,向下 3 列、向右 1 欄,回傳 C5 的值。
範例二:回傳範圍
=OFFSET(B2,2,0,3,2)
說明:以 B2 為起點,向下 2 列,回傳 3×2 的範圍。
範例三:搭配 SUM 計算
=SUM(OFFSET(A1,0,0,5,1))
說明:加總 A1 開始往下 5 列的數值。
範例四:建立動態圖表範圍
=OFFSET(A1,0,0,COUNTA(A:A),1)
說明:自動擴展圖表資料範圍。
範例五:滾動平均
=AVERAGE(OFFSET(B2,ROW(A1)-1,0,3,1))
說明:計算隨列數變動的 3 筆平均。
🔸進階範例
範例六:搭配 MATCH 定位範圍
=OFFSET(A1,MATCH("產品B",A2:A10,0),1)
說明:找到「產品B」所在列,並回傳右側欄位的值。
範例七:動態報表區塊
=SUM(OFFSET(A1,0,0,ROWS(B2:B100),1))
說明:依資料筆數自動調整加總範圍。
範例八:搭配 INDIRECT 建立靈活引用
=SUM(OFFSET(INDIRECT("A1"),0,0,C1,1))
說明:由 C1 控制加總範圍的高度。
範例九:滾動視窗分析
=SUM(OFFSET(B2,ROW(A1)-1,0,5,1))
說明:建立隨列數變動的 5 筆加總。
範例十:批次處理(Excel 365)
=MAP(SEQUENCE(5),LAMBDA(x,SUM(OFFSET(A1,x,0,3,1))))
說明:批次計算多個滾動加總。
三、常見問題解答(FAQ)
Q1:OFFSET 會改變原始資料嗎?
不會,它只回傳新的參照,不會移動或修改資料。
Q2:OFFSET 可以回傳多列多欄嗎?
可以,透過 height 與 width 參數設定。
Q3:OFFSET 可以用於圖表嗎?
可以,常用於建立動態圖表範圍。
Q4:OFFSET 是否需要搭配其他函數?
通常需要,常與 SUM、AVERAGE、MATCH、COUNTA 搭配。
Q5:OFFSET 是否會影響效能?
會,它是 volatile 函數,每次重新計算都會更新,過度使用可能降低效能。
四、注意事項與錯誤排除
- 若偏移超出工作表邊界,會回傳 #REF!。
- 若 reference 不是連續範圍,會回傳 #VALUE!。
- height 與 width 必須為正數,否則會錯誤。
- OFFSET 本身不會顯示範圍,需搭配其他函數使用。
- 在大型報表中大量使用 OFFSET,可能導致計算速度變慢。
五、延伸技巧與相關函數
- MATCH:搭配 OFFSET 動態定位範圍。
- INDEX:可取代部分 OFFSET 用法,效能更佳。
- INDIRECT:與 OFFSET 結合,建立靈活的動態引用。
- COUNTA/ROWS/COLUMNS:自動計算範圍大小,與 OFFSET 搭配。
- SEQUENCE/LAMBDA:建立批次運算與動態分析。
六、結語與延伸閱讀推薦
OFFSET 是 Excel 中的動態範圍工具,能讓報表自動更新、圖表自動擴展,並支援滾動分析。若需要更高效能或精確控制,建議搭配 INDEX、MATCH、INDIRECT 等函數使用。















