掃碼申請(qǐng)加Excel微信群(免費(fèi)) 交流心得 解決問題 驗(yàn)證信息:Excel 按動(dòng)態(tài)區(qū)域求和是日常工作中經(jīng)常會(huì)遇到的一類問題(制作動(dòng)態(tài)圖表也經(jīng)常會(huì)遇到),具體演示如動(dòng)畫所示: 簡(jiǎn)單來說,就是根據(jù)選擇的開始日期和結(jié)束日期,對(duì)數(shù)據(jù)源里符合條件的數(shù)據(jù)進(jìn)行匯總。 案例選自【老菜鳥的班】一道課后作業(yè),數(shù)據(jù)源下載地址: https://pan.baidu.com/s/1BkW5y0WkIIkvg5sdXPcHfA 第一個(gè)公式是: =SUMPRODUCT(($A$2:$A$29>=$J$1)*($A$2:$A$29<=$J$2)*B2:B29) 這是最為常用的條件求和公式的套路了:SUMPRODUCT(第一組條件*第二組條件*求和數(shù)據(jù)) 其中第一組條件為:$A$2:$A$29>=$J$1,表示日期列中大于等于開始日期的數(shù)據(jù); 其中第二組條件為:$A$2:$A$29<=$J$2,表示日期列中小于等于結(jié)束日期的數(shù)據(jù); 求和數(shù)據(jù)就是B2:B29這個(gè)區(qū)域。 第二個(gè)公式是: =SUM(($A$2:$A$29>=$J$1)*($A$2:$A$29<=$J$2)*B2:B29) 沿用公式一的思路,通常都可以將SUMPRODUCT函數(shù)替換為SUM函數(shù),不過要以數(shù)組公式的輸入方式來完成,也就是同時(shí)按著Ctrl、shift和回車鍵完成輸入,公式兩端自動(dòng)添加大括號(hào)。 第三個(gè)公式是: =SUMIFS(B2:B29,$A$2:$A$29,'>='&$J$1,$A$2:$A$29,'<='&$J$2) >='&$J$1是條件1,也就是大于等于開始日期,注意這種條件的寫法,符號(hào)要加引號(hào),同時(shí)使用&連接單元格;<='&$J$2是條件2,表示小于等于結(jié)束日期。 第四個(gè)公式是: =SUM(OFFSET($A$1,MATCH($J$1,$A$2:$A$29,0),COLUMN(A1),$J$2-$J$1+1,1)) 之前的三個(gè)公式其實(shí)都是利用了條件求和的套路,并不是按照動(dòng)態(tài)區(qū)域的思路來處理的,通常遇到有關(guān)于動(dòng)態(tài)區(qū)域,少不了OFFSET這個(gè)引用函數(shù),對(duì)于大多數(shù)朋友來說,OFFSET函數(shù)顯得難以理解,簡(jiǎn)單來說一下OFFSET吧。 OFFSET(起始位置,行偏移量,列偏移量,區(qū)域高度,區(qū)域?qū)挾龋@個(gè)函數(shù)一共五個(gè)參數(shù),每個(gè)參數(shù)用起來都是非常靈活多變,這也是OFFSET函數(shù)難于掌握的一個(gè)原因。 就本例而言,我們需要使用OFFSET函數(shù)來確定一個(gè)動(dòng)態(tài)區(qū)域,首先確定這個(gè)區(qū)域的起點(diǎn),用$A$1來作為起點(diǎn)的話,實(shí)際要求和的位置需要根據(jù)開始日期進(jìn)行調(diào)整,也就是行偏移量,這時(shí)就用到了MATCH這個(gè)專門定位的函數(shù),MATCH($J$1,$A$2:$A$29,0)這部分就是用MATCH函數(shù)來確定開始日期在A列當(dāng)中的第幾個(gè)位置,例如,開始日期是3月13日時(shí),就位于日期中的第六個(gè)位置,那么行偏移量就是6,表示A1向下6行。 列偏移量用的是COLUMN(A1)來確定,因?yàn)閿?shù)據(jù)源中各區(qū)域的位置與結(jié)果中的位置一樣,只需要隨著公式右拉發(fā)生變化即可。 (注:實(shí)際上將基點(diǎn)$A$1改為A$1的話,列偏移這個(gè)參數(shù)是可以省略的,這是利用把基點(diǎn)混合引用實(shí)現(xiàn)了調(diào)整列的位置。不過這樣寫的話,公式對(duì)于新手來說更加難以理解。) 最后是區(qū)域的高度和寬度,$J$2-$J$1+1用這個(gè)作為高度,也就是結(jié)束日期-開始日期+1,具體的天數(shù)作為高度。 寬度當(dāng)然就是1了。 用OFFSET指定了一個(gè)區(qū)域之后,再外面加個(gè)SUM完成求和,就是這個(gè)公式的來龍去脈。 第五個(gè)公式是: =SUM(INDEX(B2:B29,MATCH($J$1,$A2:$A29,0)):INDEX(B2:B29,MATCH($J$2,$A2:$A29,0))) 這個(gè)公式的用法就比較稀罕了,利用了INDEX的一個(gè)鮮為人知的特性: 稀罕在何處呢? 只能引用這個(gè)函數(shù)說明中的一句話來解釋: ![]() ![]() 函數(shù) INDEX 的結(jié)果為一個(gè)引用,且在其他公式中也被解釋為引用。根據(jù)公式的需要,函數(shù) INDEX 的返回值可以作為引用或是數(shù)值。 例如,公式 CELL('width',INDEX(A1:B2,1,2)) 等價(jià)于公式 CELL('width',B1) CELL 函數(shù)將函數(shù) INDEX 的返回值作為單元格引用。 而在另一方面,公式 2*INDEX(A1:B2,1,2) 將函數(shù) INDEX 的返回值解釋為 B1 單元格中的數(shù)字。 ![]() ![]() ![]() 就這個(gè)問題本身來說,使用條件求和的思路無疑是最佳解決方案,不過這個(gè)例子也是動(dòng)態(tài)區(qū)域的典型案例,OFFSET函數(shù)和INDIRECT函數(shù)做構(gòu)造動(dòng)態(tài)區(qū)域方面有無可取代的地位(使用INDIRECT函數(shù)解決本例也是可以的),另外一個(gè)亮點(diǎn)就是INDEX的出現(xiàn),本例中并沒有顯示出INDEX的優(yōu)勢(shì),不過如果將問題再進(jìn)一步復(fù)雜化,求和區(qū)域的確定增加兩個(gè)條件的話: 其他幾個(gè)公式都要做很大的改動(dòng)才行,公式的復(fù)雜性也會(huì)增加,而INDXE依然如舊,有興趣的朋友可以自己去測(cè)試一下。 最后這個(gè)復(fù)雜的區(qū)域求和問題,也是INDEX函數(shù)高級(jí)應(yīng)用這節(jié)課的一個(gè)內(nèi)容,就不在本文羅嗦了。 |
|