OFFSET函數返回從指定引用偏移后的引用。從一個引用開始,通過偏移一組行號和列號,返回指定大小的另一個引用。
什么情況下使用OFFSET函數?
OFFSET函數可以返回對單元格區域的引用,并且可以與其它函數結合使用。使用該函數可以:
· ? ? ? ?找到所選月份的銷售數量
· ? ? ? ?匯總所選月份的銷售
· ? ? ? ?基于計數創建動態單元格區域
· ? ? ? ?匯總最近n個月的銷售
OFFSET函數的語法
OFFSET函數的語法如下:
OFFSET(reference,rows,cols,height,width)
l reference是相鄰單元格的單元格或單元格區域
l rows可以是正數(在起始引用下面)或負數(在起始引用上方)
l cols可以是正數(在起始引用右側)或負數(在起始引用左側)
l height必須是正數,返回引用的行數
l width必須是正數,返回引用的列數
l 如果忽略height或width,那么使用起始引用的大小
OFFSET函數陷阱
OFFSET函數是易失的,因此如果在太多的單元格中使用的話會使工作簿變慢。相反,可以使用另一個函數,例如INDEX函數,來返回引用。
示例 1: 找到所選月份的銷售數量
使用OFFSET函數,可以基于起始引用返回對單元格區域的引用。本例中,想要得到單元格G2中的銷售數量:
起始單元格是單元格C1
在單元格F2中輸入偏移的行數
列C中是銷售數量,因此偏移的列數是0
高度是1行
寬度是1列
=OFFSET(C1,F2,0,1,1)
在單元格H2中有一個相似的OFFSET公式,用來返回月名。唯一的區別是列偏移量——使用1代替0。
=OFFSET(C1,F2,1,1,1)
注意:忽略參數height和width,因為我們希望的引用與起始引用有相同的大小。本例中我使用它們來展示所有參數如何工作。
示例2: 匯總所選月份的銷售
本例中,OFFSET函數返回所選月份銷售數量的引用,SUM函數返回該區域的總計。在單元格B10中,所選月份是3,因此結果是3月份的銷售總額。
起始引用是A3:A6
行偏移量是0(可以忽略0,結果相同)
在單元格B10中輸入列偏移量
忽略高度和寬度,因為最終引用的大小與起始引用相同
=SUM(OFFSET(A3:A6,0,B10))
示例3: 基于計數創建動態單元格區域
也可以使用OFFSET函數創建動態單元格區域。本例中,已經使用下面的公式創建了一個名稱MonthsList:
=OFFSET(‘Ex03′!$C$1,0,0,COUNTA(‘Ex03′!$C:$C),1)
如果添加另一個月份到在列C的列表中,那么它將自動出現在單元格F2的數據有效性下拉列表中,該數據有效性列表使用MonthsList作為其數據源。
示例 4: 匯總最近n個月的銷售
在最后的示例中,OFFSET函數與SUM函數和COUNT函數結合使用來顯示最近n個月的合計。當添加新的數量時,公式將自動調整來包括最近的月份。在單元格E2中,月數是2,因此匯總August和September的銷售額。
起始引用是單元格C2
通過統計列C中的數字來計算行偏移數,減去單元格E3中的數字,然后加1
列C中是數量,因此列偏移數是0
在單元格E3中輸入高度
寬度是1列
=SUM(OFFSET(C2,COUNT(C:C)-E3+1,0,E3,1))