谈恋爱不香吗?非要来学excel,佩服!
函数说明
OFFSET(reference, rows, cols, [height], [width])
第1参数Reference: 必需。作为偏移量参考的起始引用区域。 该参数必须是对单元格或相邻单元格区域的引用。否则, OFFSET返回#VALUE! 。
第2参数Rows:必需。相对于起始引用区域的左上角单元格,向上或向下偏移的行数。如果是正数,向下偏移;如果是负数,向上偏移。如果省略,必须用半角逗号占位,默认为0,也就是不偏移。
注意:
示例解释
下图的公式中,第1参数是多行多列的区域A1:B2,第4,5参数省略,也就是height和width省略。那么height和width就是第1参数的高度与宽度,也就是2行2列。
下图的公式中,第2到第5参数都是负数。以E8为基点,向上偏移3行,到E5;然后从E5向左偏移2列,到C5;最后以C5为右下单元格,向上扩展3行,向左扩展2列,得到B3:C5的区域。
1.动态汇总销售额
=SUM(OFFSET(A11,MATCH(A21,A12:A18,),B21,,D21-B21+1))
MATCH(A21,A12:A18,)查询A21的姓名在A12:A18的位置,结果为4。
offset以A11为基点,向下偏移4行到A15。向右偏移的列数为起始月份值2,也就是从A15向右偏移2列到C15。扩展的行数省略,与A11的行数一样,还是1。扩展的列数为终止月份减起始月份再加1,也就是3。最后得到的区域是C15:E15。用sum求和计算出结果。
这个公式的起始月份不能超过终止月份,否则会出错。如果想要起始月份大于终止月份也能得到正确的结果,公式该怎么写?
2.统计新入职员工前三个月培训时间
下图是某公司1~6月新入职员工的培训记录,新员工从入职第1个月开始,每月需要进行培训。计算各员工前三个月的培训共时长。
在H26单元格输入下面的公式,按ctrl+shift+enter三键结束。
=SUM(OFFSET(A26,,MATCH(,0/B26:G26,),,3) B26:G26)
MATCH(,0/B26:G26,)查询第一个非空单元格的位置,得到5。
offset以A26为基点,rows参数省略就是行不偏移,列向右偏移5列到F26。height参数省略,就是A26的高度,扩展1行。扩展的列数为3列。得到的区域是F26:H26。此区域超出了B26:G26的范围,如果直接用sum求和,会在H26产生循环引用而无法正常计算。
所以用offset返回的区域F26:H26和B26:G26使用交叉引用的方式(两个区域中间用空格相连),得到它们的交集F26:G26,最后用sum求和。
此题还可以用公式=SUM(OFFSET(E26:G26,,-COUNTA(B26:D26)))来完成。
做这种题目用的是倒推法,根据结果往回推。D37的结果引用的是A37,D38的结果引用的是B37,···,D45的结果引用的是A41,D46的结果引用的是B41。如F列所示。
F列的单元格是怎么来的呢?可以用offset从A37偏移而来,A37是从A37偏移0行0列,B37是从A37偏移0行1列等等。如G列所示。
最后我们发现要偏移的行的数字是有规律的,0,0,1,1,2,2,3,3,4,4。可以用int函数得到。要偏移的列的数字也是有规律的,0,1,0,1,0,1,0,1,0,1。可以用mod函数得到。最后组合起来就ok了。
https://pan.baidu.com/s/1XiQl2q_Pm0Rl2xNaWPppMw