OFFSET函數不會用?四個典型用法幫到你


OFFSET函數不會用?四個典型用法幫到你

表親們好啊,今天老祝和大家分享關於OFFSET函數的知識。

說起OFFSET函數,真的是像霧像雨又像風,從複雜的數據彙總、到數據透視表再到高級動態圖表,都離不開OFFSET函數的默默付出。

通過OFFSET函數,可以生成數據區域的動態引用,這個引用再作為半成品,通過後續的處理加工,就可以為圖表和透視表提供動態的數據源、為其他函數生成特定的引用了。

首先,咱們說說這個函數的作用,微軟的幫助文件是這樣描述的:

以指定的引用為參照系,通過給定偏移量返回新的引用。

瞧瞧,這麼簡單的幾句話,讓人家怎麼能猜透你的心思嘛。

這個函數有5個參數:

第一個參數是基點

第二個參數是要偏移幾行,正數向下,負數向上。

第三個參數是要偏移幾列,正數向右,負數向左。

第四個參數是新引用幾行。

第五個參數是新引用幾列。

如果不使用第四個和第五個參數,新引用的區域就是和基點一樣的大小。

如果使用下面這個公式:

=OFFSET(C3,4,2,4,3)

就是以C3為基點,向下偏移4行,向右偏移2列,新引用的行數是4行,新引用的列數是3列,最終得到對E7:G10單元格區域的引用。

OFFSET函數不會用?四個典型用法幫到你

當然,僅僅得到引用是沒啥用處的,咱們的目的是把OFFSET函數得到的引用作為一個半成品,再通過其他方法進行再加工。

這麼說還是有點抽象啊,再來一個形象一點的:

OFFSET函數就像是一個敵人的小分隊,從據點(C3)出動,順著大路向南走4裡(C7)

OFFSET函數不會用?四個典型用法幫到你

拐彎兒再向東2裡,這時候就到馬家河子(E7)了

OFFSET函數不會用?四個典型用法幫到你

敵人隊長說了,我要以馬家河子(E7)這個地方開始,再佔領一片地盤。

有多大呢?向南4裡,向東3裡。結果就是E7:G10單元格區域了。

OFFSET函數不會用?四個典型用法幫到你

簡單認識了OFFSET函數,咱們再看看這個函數的一些典型應用。


1)行列轉置

如下圖,要將A2:D7單元格中多行多列的姓名,轉換到一列中。

F2單元格公式為:

=OFFSET($A$2,(ROW(A1)-1)/4,MOD(ROW(A1)-1,4))&""

OFFSET函數不會用?四個典型用法幫到你

OFFSET函數的基點為A2。

向下偏移的行數為(ROW(A1)-1)/4,這部分公式下拉時,可以得到從0開始,按0.25遞增的序號,即0,0.25,0.5,0.75,1,1.25,1.5……OFFSET函數對帶有小數的參數自動向下取整,向下偏移的行數依次為0 0 0 0 1 1 1 1 2 2 2 2……也就是公式每下拉四行,就從數據源中向下偏移一行。

向右偏移的列數為MOD(ROW(A1)-1,4),這部分公式下拉時,可以得到0 1 2 3 0 1 2 3……的循環序列序列,也就是公式每下拉一個行,就從數據源向右偏移一列,下拉到第五行時,偏移的列數又會從0開始。

偏移行數和偏移列數二者結合,最終形成1 2 3 4 2 2 3 4 3 2 3 4 ……這樣的偏移方式。


2)計算指定區間的銷售額

如下圖所示,要計算從1月份到指定月份的累計銷售額。

F4單元格公式為:

=SUM(OFFSET(B2,0,0,MATCH(F2,A2:A13,0)))

OFFSET函數不會用?四個典型用法幫到你

MATCH(F2,A2:A13,0)部分,先使用MATCH函數計算出F2單元格中的月份在A2:A13中的位置,結果為9.

OFFSET函數以B2單元格為基點,向下偏移0行,向右偏移0列,以MATCH函數的計算結果作為新引用的行數,最終得到B2:B10單元格區域的引用,再使用SUM函數計算這個區域中的總和,得到從1月份到指定月份的銷售總額。


3)計算最近7天的平均銷量

如下圖所示,A列和B列是銷售流水記錄,要計算出最近7天的平均銷量。

F4單元格公式為:

=AVERAGE(OFFSET(B1,COUNT(B:B),0,-7))

OFFSET函數不會用?四個典型用法幫到你

先使用COUNT函數,統計出B列的數值個數。

OFFSET函數以B1為基點,以COUNT的結果作為向下偏移的行數,也就是B列有多少個數值,就向下偏移多少行。

這時候就相當於到了B列數值的最後一行,給定的偏移列數是0,新引用的行數是-7,得到從B列數值的最後一行開始,再向上7行這樣一個動態的區域。

如果B列的數值增加了,COUNT函數的計數結果就增加了,OFFSET函數的行偏移參數也就隨之變化。

就相當於一竿子捅到底,然後來個燒雞大窩脖兒,向上引用7行,所以得到的始終是最後7行的引用。

最後使用AVERAGE函數計算出這個引用區域中的平均值。


4)計算篩選後的商品總價

如下圖,是各食堂的採購記錄,需要計算篩選後的商品總價。

G1單元格公式為:

=SUMPRODUCT(SUBTOTAL(3,OFFSET(A1,ROW(1:9),0))*C2:C10*D2:D10)

OFFSET函數不會用?四個典型用法幫到你

要計算篩選後的內容,首先需要判斷單元格是不是處於顯示狀態。

先來看OFFSET(A1,ROW(1:9),0)部分,OFFSET函數以A1單元格為基點,向下偏移的行數是ROW(1:9)的計算結果,表示依次向下偏移1~9行,最終得到9個引用區域,每個單元格區域由一個單元格構成。

這裡涉及到多維引用的知識點了,小夥伴們如果犯迷糊,可以先收藏一下。

接下來使用SUBTOTAL函數對OFFSET函數得到的多個引用區域進行處理,第一參數使用3,表示使用COUNTA函數的計算規則,即依次統計A2~A9這九個單元格區域中的不為空的單元格個數。

如果單元格處於顯示狀態,則對這個單元格的統計結果為1,否則統計結果為0。

這部分公式得到類似下面的效果:

{0;0;0;0;0;1;1;1;1}

再用SUBTOTAL函數的結果乘以C列的單價和D列的數量,如果單元格處於顯示狀態,則相當於1*數量*單價,否則相當於0*數量*單價。

最後使用SUMPRODUCT函數對乘積進行求和,這樣就得到篩選後的商品總價了。

除了以上常規的用法,OFFSET函數還經常用於動態圖表的製作,這些內容咱們以後繼續分享。

好了,今天的內容就是這些吧,後半部分對於很多小夥伴來說可能有點難了,不過不用擔心,咱們可以先收藏,然後慢慢消化,積少成多循序漸進。

祝各位小夥伴一天好心情!

圖文製作:祝洪忠


分享到:


相關文章: