OFFSET函数在Microsoft说明中的描述为:
返回对单元格或单元格区域中指定行数和列数的区域的引用。 返回的引用可以是单个单元格或单元格区域。 可以指定要返回的行数和列数。
我在有需求把下图左侧这样统一格式,同一纵列的数据,按照下图右侧这样输出,可以方便比对同一科目的数据,通过搜索我发现了如下函数可以实现这一目的。
1 | =OFFSET($B$2,(ROW()-1)*5+COLUMN(A:A)-1,) |
这个函数可以这样理解:
从B2单元格开始,ROW()返回当前行数,COLUMN(A:A)返回1,那么在第1行任意单元格键入该函数,ROW()返回1,相当于OFFSET($B$2,0,0)返回B2自身,向右拖动单元格时,A:A变成B:B,COLUMN(B):B)返回2,相当于OFFSET($B$2,1,0)返回B3,向下拖动单元格时,ROW()返回2,相当于OFFSET($B$2,5,0)返回B7,依次类推。
至此我的目的是实现了,但函数实际语法还是不清楚,为了方便使用,需要了解一下这个OFFSET函数。
OFFSET函数的语法是:OFFSET(reference, rows, cols, [height], [width])
Reference:要基于偏移量的引用。 引用必须引用单元格或相邻单元格区域;否则,OFFSET返回#VALUE!错误值。
Rows:需要左上角单元格引用的向上或向下行数。使用5作为rows参数,可指定引用中的左上角单元格为引用下方的5行。
Rows 可为正数(这意味着在起始引用的下方)或负数(这意味着在起始引用的上方)。
Cols:需要结果的左上角单元格引用的从左到右的列数。
高度:需要返回的引用的行高。Height必须为正数。
宽度:需要返回的引用的列宽。Width必须为正数。
示例1:
1 | =OFFSET($B$2,2,0) |
如下图示例,G4单元格的函数“=OFFSET($B$2,2,0)”指的是取从B2单元格开始,向下2行,向右0列的单元格的值。
示例2:
1 | =OFFSET(B2,0,0,3,2) |
加上后面两个可选参数的话,需要更改一下原始数据,如下图,E2单元格键入的函数“=OFFSET(B2,0,0,3,2)”指的是从B2单元格开始,向下0行,向右0列,取3行2列的值,会发现只是在E2单元格输入函数,但E2:F5单元格都出现了对应的值。
示例3:
1 | =OFFSET($A$2,COLUMN(A1)-1,ROW(A1)-1) |
回到一开始的问题,如下图,在E2单元格键入函数“=OFFSET($A$2,COLUMN(A1)-1,ROW(A1)-1)”中,$A$2相当于固定起始位置,COLUMN(A1)返回1,ROW(A1)返回1,E2单元格返回A2单元格开始,0行0列的值,即“=OFFSET($A$2,0,0)”。
随着拖拽,右边F2单元格中A1变为A2,即“=OFFSET($A$2,1,0)”,右边E3单元格中A1变为B1,即=OFFSET($A$2,0,1),以此类推。
以上,关于OFFSET的记录。