一、課程回憶
什么是數(shù)組公式呢?顧名思義就是公式中包含數(shù)組的了,詳細(xì)含義請(qǐng)參看前文。但這里重點(diǎn)提醒的一點(diǎn)就是,如果要使用數(shù)組公式,在編輯欄輸入完公式以后一定要按下“Ctrl+Shift+Enter”組合鍵,使編輯欄的公式處在“{}”之中。
二、數(shù)組公式繼續(xù)深入
印象中是好幾年前了,當(dāng)時(shí)看過的一篇掃盲貼中,作者舉的例子真是太實(shí)用了。具體細(xì)節(jié)記不太清楚了,大致意思就是使用函數(shù)計(jì)算1到100的和。這里同樣以此為例。
1.求1到100的和
在往下看之前,大家想一下,如果讓你來處理該如何來處理呢?只用一個(gè)函數(shù)解決1到100的和,當(dāng)然也可以是1000、10000甚至更多。討論具體的數(shù)值沒有太大意義,此處只是希望通過此例讓大家更進(jìn)一步的了解數(shù)組公式的用法。
解答:{=SUM(ROW(1:100))}
問題分析:求1到100的和,答案是5050(小學(xué)生都知道^-^),但Excel必須是你告訴了它正確的方法,它才能知道。計(jì)算從1到100的和,實(shí)際上就是計(jì)算1+2+3+4+……+98+99+100,好了,答案出來了,在編輯欄中輸入 “=sum(1+2+3+4+……+98+99+100)”。相信聰明的一定對(duì)此答案不滿意,雖然能得到正確的結(jié)果,但很明顯是“錯(cuò)誤”的方法。
要得到1到100的正確數(shù)列,最簡(jiǎn)單的方法就是使用Row()或是Column()函數(shù),由于個(gè)人習(xí)慣,我比較習(xí)慣于Row(),所以這里以Row()函數(shù)為例。
熟悉Row()函數(shù):在A1單元格中輸入“=Row()”,使用填充柄填充至A5,看到什么結(jié)果?是不是每一個(gè)單元格中值就是其對(duì)應(yīng)的行數(shù)。
驚喜:Row()表示單前行,如果使用Row(1:100)就表示一個(gè)數(shù)組,其中包含的便是第一到第一百行的行號(hào),即1、2、3、……、98、99、100這些數(shù)值,現(xiàn)在我們就把這個(gè)數(shù)組應(yīng)用到公式中。
在工作表的任意一個(gè)單元格中輸入“=sum(Row(1:100))”,然后按Ctrl+Shift+Enter組合鍵,你會(huì)驚喜的發(fā)現(xiàn),我們要的結(jié)果出現(xiàn)了。
2.在Excel2003中享受“SUMIFS”
SUMIF函數(shù)應(yīng)該很多人都用過,非常好用。但如果遇到多條件判斷的怎么辦呢?從Office 2007開始,引入了SUMIFS函數(shù),可以解決這種多條件求和問題。但如果仍然使用Office 2003怎么辦呢?其實(shí)使用SUM、IF再結(jié)合數(shù)組公式即可實(shí)現(xiàn)SUMIFS的效果。
如下圖所示,某教師有一張任教的幾個(gè)班級(jí)的學(xué)生成績(jī)表。
任務(wù):統(tǒng)計(jì)出“一班”、“二班”共計(jì)多少人?
此題要如何解決?SUMIF用兩次?或是COUNT用兩次?這里還是演示數(shù)組公式的用法,所以先用SUM和IF組合的形式。
在任一單元格中輸入“=SUM(IF((A2:A12="一班")+(A2:A12="二班"),1,0))”公式按下回車鍵,是不是發(fā)現(xiàn)結(jié)果是 “#VALUE!”,再次進(jìn)入編輯欄然后按下“Ctrl+Shift+Enter”快捷鍵,是不是發(fā)現(xiàn)正確的結(jié)果出來了?
這里再次解釋一下這個(gè)公式“{=SUM(IF((A2:A12="一班")+(A2:A12="二班"),1,0))}”,外側(cè)SUM沒什么好用的了,就是求()內(nèi)各數(shù)的和。中間的“IF((A2:A12="一班")+(A2:A12="二班"),1,0))”的運(yùn)算過程是這樣的,判斷A2:A12區(qū)域內(nèi)單元格的值是否是“一班”,如果是則結(jié)果為1,則此公式計(jì)算的結(jié)果依次是“1、0、0、1、0、0、1、0、0、1、0”,因?yàn)榈谝粋€(gè)條件為真,第二個(gè)條件肯定就不為真了,因?yàn)橐粋€(gè)單元格不可能同時(shí)等于“一班”和“二班”,所以第一個(gè)數(shù)組就是“1、0、0、1、0、0、1、0、0、1、0”。這時(shí)再判斷 A2:A12區(qū)域內(nèi)單元格的值是否是“二班”,如果是結(jié)果則為1,否則為0,所以這個(gè)數(shù)組條件計(jì)算的結(jié)果就是“0、1、0、0、0、1、0、1、0、0、 0”,中間的加號(hào)就是將這兩個(gè)數(shù)組相加,也就是說最終的數(shù)組為“1、1、0、1、0、1、1、1、0、1、0”,然后使用SUM求和,結(jié)果就為7了。
從上面的圖中標(biāo)注可以看出,所以的公式我全部使用了數(shù)組(A2:A12這就是一個(gè)數(shù)組),并且上圖上的沒有使用數(shù)組公式的公式中的數(shù)組全部可以使用單個(gè)單元格替代,之所以全部列出,還是希望大家更好的理解一下數(shù)組。
三、數(shù)組公式精通
這里是一個(gè)實(shí)際工作中的例子,只是我稍微變化了一下,還是SUM應(yīng)用的例子。
需求:如下圖所示,現(xiàn)在要統(tǒng)計(jì)員工張三在1號(hào)加工所有機(jī)器的“實(shí)績(jī)”,也就是說在右側(cè)的數(shù)據(jù)中先過濾日期為1,然后再過濾人員為張三的數(shù)據(jù),最后統(tǒng)計(jì)實(shí)績(jī)的結(jié)果。如果使用一個(gè)公式完成這一需求,你能想到嗎?當(dāng)然SUMIFS是除外的,因?yàn)?SUMIFS是Office 2007以后的產(chǎn)物。
答案:在上圖所示的C2單元格中輸入“=SUM((E2:E21=A2)*(G2:G21=B2)*(H2:H21))”公式,然后按下“Ctrl+Shift+Enter”組合鍵,你會(huì)發(fā)現(xiàn)想要的結(jié)果已經(jīng)出現(xiàn)了。數(shù)組公式就是這么簡(jiǎn)單,解決問題也是這么簡(jiǎn)單。
這次用的公式可以看出,比之前用的公式還要簡(jiǎn)單,連IF都不要了,實(shí)際上這里的“=”符號(hào)就是起到了一個(gè)類似IF的效果。
這里再說明一下公式的執(zhí)行過程,公式中E2:E21表示數(shù)組區(qū)域,這個(gè)相信已經(jīng)不需要再說明了,放到數(shù)組公式中就是依次取數(shù)組中的各個(gè)數(shù)值,也就是依次取日期中的值。E2:E21=A2,實(shí)際上就是拿日期中的每一個(gè)值依次與A2中的日期進(jìn)行比對(duì),如果相等則結(jié)果為True,即1,如果不相等則為False 即為0。到了這里也許你有一點(diǎn)明白了,如果第一不相等,則后面的無需再繼續(xù)下去了,因?yàn)楣嚼镉玫娜渴?#8220;*”乘積符號(hào),任何數(shù)乘0等于0。如果此項(xiàng)符合再繼續(xù)判斷G2:G21區(qū)域,也就是用姓名依次比對(duì),如果和B2中的姓名相同,則為Ture,即1,如果為False,即0,繼續(xù)下一個(gè)回合。如果此項(xiàng)也為Ture,很明顯前面兩項(xiàng)的結(jié)果為1*1=1,再乘以H2:H21數(shù)組中對(duì)應(yīng)的數(shù)字,即符合條件的“實(shí)績(jī)”,以第一個(gè)符合條件的第一條記錄為例,在數(shù)組公式運(yùn)行的第一個(gè)回合為SUM(1*1*234),結(jié)果當(dāng)然為234了,然后再依次完成整個(gè)數(shù)組的運(yùn)算,我們最終的目的就達(dá)到了。
數(shù)組公式非常有用,效率也高,但真正的理解、熟練掌握也不是一件很容易的事。但大家記住數(shù)組中的數(shù)據(jù)是一一對(duì)應(yīng)的,放到數(shù)組公式中使用時(shí),數(shù)組中的數(shù)據(jù)會(huì)按順序依次參與相應(yīng)的運(yùn)算。
希望大家能夠慢慢的理解、貫通。
出處http://windyli.blog.51cto.com/1300305/313744
聯(lián)系客服