OFFSET函数返回从指定引用偏移后的引用。从一个引用开始,通过偏移一组行号和列号,返回指定大小的另一个引用。
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))