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為遞增的值。