1、OFFSET用于从指定区域获取一个视图。
OFFSET(reference, rows, cols, [height], [width]) 必选: eference:获取被参考单元格 rows:相对于被参考单元格的行偏移量
cols:相对于被参考单元格的列偏移量
可选:
[height]:返回视图的高
[width]:返回试图的宽
eference:获取被参考的单元格
a:从本工作簿获取单元格。例如,获取当前文档->值班表->D3 => 值班表!D3
b:从其他工作簿获取单元格。例如,获取1月份值班表->值班表->D3 =>[1月份值班表]值班表!D3
要求被引用的文档必须打开,否则无法获取引用。b中《1月份值班表》必须打开,否则公式报错。
rows:相对于被参考单元格的行偏移量
a:当数字为正数时,表示相对于eference选择的单元格下移。例如:1表示下移一个单元格
b:当数字为负数时,表示相对于eference选择的单元格上移。例如:-1表示上移一个单元格
c:集合的表示形式,{1,17,21,25},表示eference选择的单元格向下移动1、17、21、25个单元格,组成一个视图(虚拟表)。
cols:相对于被参考单元格的列偏移量
a:当数字为正数时,表示相对于eference选择的单元格右移。例如:1表示右移一个单元格
b:当数字为负数时,表示相对于eference选择的单元格左移。例如:-1表示左移一个单元格
c:集合的表示形式,{1,17,21,25},表示eference选择的单元格向右移动1、17、21、25个单元格,组成一个视图(虚拟表)。
如果不想让选择的单元格移动,使用再D3改成$D$3
综合:
OFFSET(值班表!$D$3,{4,20,24,28},0)
上述语句表示,被参考的单元格时当前工作簿,名称为"值班表"的工作表,D3单元格为被参考的单元格。以D3为基础向下移动4、20、24、28单元格。不左右移动。返回一列4行的视图。
2、获取offset中重复的值,从offset中获取重复的值。使用countif函数。参考countif章节。
countif意为从指定的区域获取重复值,一旦找到重复值,将返回重复值个数。
=SUM(COUNTIF(OFFSET(值班表!$D$3,{2,3,18,19,22,23,26,27},0),B20))*4.5
使用sum求出使用的从视图中获取到含有B20单元格的数量,单位是4.5,计算得到实际所需值。
=SUM(COUNTIF(OFFSET(值班表!$D$3,{1,17,21,25},0),B21))*8+ SUM(COUNTIF(OFFSET(值班表!$D$3,{4,20,24,28},0),B21))*7
每次只需要合理设置偏移量,修改第一行的公式即可。这里限制$D$3为固定值,B21为递增的值。