offset从指定区域获取数据(自动计算数据)

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为递增的值。












原文地址:https://www.cnblogs.com/smartmsl/p/12187347.html