在Excel中,offset函数是一个引用函数,表示引用某一个单元格或者区域。其也是我们日常做一些组合函数中的一种,需要熟练掌握。
1.offset函数的含义
以指定的(单元格或相连单元格区域的引用)为参照系,通过给定偏移量得到新的引用。
返回的引用可以是一个单元格也可以是一个区域(可以指定行列数)。
注意事项
第一,如果行数和列数偏移量超出工作表边缘,函数 OFFSET 返回错误值 #REF!。
第二,如果省略 height 或 width,则假设其高度或宽度与 reference 相同。
第三,函数 OFFSET 实际上并不移动任何单元格或更改选定区域,它只是返回一个引用。
第四,函数 OFFSET 可用于任何需要将引用作为参数的函数。
二、语法
= OFFSET(reference,rows,cols,height,width),
=Offset(参照单元格,行偏移量,列偏移量,返回几行,返回几列)
参数:
Reference——参照单元格(单元格或相连单元格区域的引用)。否则,offset函数返回错误值#VALUE!。
Rows——行偏移量。正数(代表在参照单元格的下方),负数(代表在参照单元格的上方)。
Cols——列偏移量。正数(代表在参照单元格的右边)或负数(代表在参照单元格的左边)。
Height——返回几行(必须为正数),即所要返回的引用区域的行数。
Width——返回几列(必须为正数),即所要返回的引用区域的列数。
下面就以一个实例应用做解释 。以A1单元格作为参考系,向下移动2行,向右移动2列,我们可以直接找到引用的单元格是 C3,结果是6。
在D3单元格输入公式=OFFSET(A1,2,2,1,1),其中A1是参考系,接着的2,2分别表示下,右移动的行数和列数,同样向上,左则是负数。最后面的1,1表示引用的区域大小是一行一列,也就是一个单元格。
结果和我们肉眼看到的一样,函数公式中最后面的1,1可以省略,如下图,其就表示直接引用一个单元格。
如果省略 height 或 width,则默认其高度或宽度与 reference 相同。
以区域做参考系:
1.还是这个例子,我们以A1到B2的区域作为参考系,来引用下移2行,右移动1列的2行2列的区域。
2.在D3输入公式=OFFSET(B1:C2,2,1,2,2),其表示的意思与上文中以单元格为参考系的基本一致,然后同时按下CTRL、SHIFT和ENTER三个键(因引用的是数组区域)。
3.D3单元格中显示的是引用到区域中第一行第一列的单元格,此时将鼠标放在该单元格右下角出现十字的时候点住,右拉到2列,再接着点住下拉到2行,那么此时所有引用的区域就出现了。如下图所示。
例1:求B,C 2组2月和3月的销售额汇总
=SUM(OFFSET(B2,2,1,2,2))
可以看出向下2,向右1,返回2行2列,返回的是区域,返回的是数组{97,179;87,167}。最后使用sum进行求和。
例2:快速返回各年合计
=OFFSET($B$1,ROW(A1)*5,0)
例3:这个销售流水记录中,每天都要不断的添加数据。现在要制作一个图表,仅展示最近7天的销售状况。
首先,在【公式】选项卡下,单击【定义名称】,分别定义两个名称:
日期=OFFSET($A$1,COUNT($A:$A),0,-7)
销售额=OFFSET($B$1,COUNT($B:$B),0,-7)
说说定义名称日期这个公式的意思:
COUNT函数对A列数值计数,结果作为OFFSET函数的行偏移参数。
OFFSET函数以A1为基点,向下偏移的行数是COUNT的结果,也就是A列有多少个数值,就向下偏移多少行。
这时候就相当于到了A列数值的最后一行,给定的偏移列数是0,新引用的行数是-7,得到从A列数值的最后一行开始,向上7行这样一个动态的区域。
如果A列的数值增加了,COUNT函数的计数结果就增加了,OFFSET函数的行偏移参数也就随之变化。
就相当于一竿子捅到底,然后向上引用7行,所以得到的始终是最后7行的引用。
接下来,按下图步骤插入一个柱形图。
右键单击数据系列,选择数据源
①点击图例项(系列)下方的“编辑”
②系列名称:点击我们的“B1”(销售额)单元格;系列值:输入“=Sheet8!销售额”,表示引用我们刚才定义的区域。然后点击确定。
③点击水平(分类)轴标签下方的“编辑”
④轴标签区域:输入"Sheet8!日期",点击确定
⑤返回选择数据源的界面,点击确定
OK了,以后我们只要不断的在数据源表格中添加数据,这个图表就始终显示的是最近7天的数据变化了。
最后别忘了,再对图表进行简单的美化,收工了——
例4:结合名称管理器求各统计项
“A2:C14”区域为源数据,通过源数据,使用OFFSET函数定义一个叫“A”的名称,然后完成下图1、2、3个班级的实考人数、总分、最高分、优秀数、平均分的统计。
单击菜单“插入”——“名称”——“定义”,在“名称”框中输入名称“成绩汇总”,然后在下面的引用位置输入:
=OFFSET(Sheet10!$A$1,MATCH(Sheet10!$E2, Sheet10!$A$2:$A$14,),2,COUNTIF(Sheet10!$A$2:$A$14, Sheet10!$E2))
这里我们的数据在Sheet10标签页,大家可以根据自己的页名称自行更改
引用位置输入公式的含义,解释如下。把上面这个公式分成两部分来查看,就很容易了。
第一部分:MATCH(Sheet10!$E2, Sheet10!$A$2:$A$14,),这个值是OFFSET的第二个参数,使用MATCH来精确查找位置。代表偏移的行数就由MATCH部分的值来控制。这个公式的意思就是查找E2单元格的值在A2:A14区域中的位置。
MATCH函数也是一个查找函数。MATCH 函数会返回中匹配值的位置而不是匹配值本身。在使用时,输入单值它就返回单值,输入多值就返回多值。MATCH函数在众多的数字中只查找第一次出现的,后来出现的它返回的也是第一次出现的位置。MATCH函数一般都和别的函数嵌套使用。
第二部分:COUNTIF(Sheet10!$A$2:$A$14, Sheet10!$E2),这个值是OFFSET的第四个参数,高度就由COUNTIF的值来控制。
定义完名称之后,在F2单元格输入公式:=COUNTA(成绩汇总),然后下拉,就可以求出各个班级的参考人数。
在G2单元格套用COUNTIF函数的公式:countif(区域,条件),输入公式:=COUNTIF(成绩汇总,">=60"),然后下拉,就可以求出各个班级的优秀人数。在这个公式中,我们假定合格人数的分数为大于等于60分。
在H2单元格输入公式:=MAX(成绩汇总),然后下拉,就可以求出各个班级的最高分。
在I2单元格输入公式:=AVERAGE(成绩汇总),然后下拉,就可以求出各个班级的平均分。
,