當(dāng)在工作中采集了大量數(shù)據(jù)后,出于某種需要,我們會(huì)想辦法將符合某種條件的數(shù)據(jù)提取出來,有時(shí)是一個(gè)匯總數(shù),有時(shí)是所有符合條件的數(shù)據(jù)本身。
一、通過一定條件查找,返回匯總結(jié)果
在這個(gè)銷量表中,如果我們想統(tǒng)計(jì)出姓名為“張三”的全部銷量,可以用一個(gè)函數(shù)來做公式:
=SUMIF(銷量表!B:B,"張三",銷量表!C:C)
這個(gè)SUMIF函數(shù)是一個(gè)條件匯總函數(shù),它有三個(gè)參數(shù),第一個(gè)參數(shù)是要查找的區(qū)域,在本例中是B列,第二個(gè)參數(shù)是要查找的條件,在本例中是“張三”這個(gè)姓名,第三個(gè)參數(shù)是需要匯總的區(qū)域。
這個(gè)公式的含義是:在“銷量表”的B列查找“張三”這個(gè)內(nèi)容,在B列找到后,把找到的同一行中的C列值相加。
我們還可以用下面這個(gè)公式達(dá)到同樣的效果:
=SUM(IF(銷量表!B1:B100="張三",銷量表!C1:C100))
這是一個(gè)數(shù)組公式,在輸入完成后要按CTRL+SHIFT+ENTER組合鍵確認(rèn),此時(shí)會(huì)自動(dòng)在公式的兩端加上一對(duì)花括號(hào)(手工輸入花括號(hào)無效)。
在這個(gè)公式中用了兩個(gè)函數(shù)SUM與IF,先由IF對(duì)它右邊的條件“銷量表!B1:B100="張三"”做判斷,這個(gè)條件同樣是在銷量表的B列查找“張三”,當(dāng)條件成立時(shí),就執(zhí)行“銷量表!C1:C100”這個(gè)部份,即返回C列同一行中的數(shù)值,最后由SUM函數(shù)將返回的所有相符的數(shù)值相加,得到正確結(jié)果。
第二個(gè)公式看似比第一個(gè)公式復(fù)雜,但它有一個(gè)“特殊”的作用,就是可以“多條件”查找。
再看一個(gè)例子,還是在“銷量表”中,把六七月份的“張三”的銷量統(tǒng)計(jì)出來(不要五月份的)
=SUM(IF((MONTH(銷量表!A2:A100)>5)*(銷量表!B2:B100="張三"),銷量表!C2:C100))
這個(gè)數(shù)組公式用了兩個(gè)條件,一個(gè)是A列的月份要大于5(即只要6、7月份的),另一個(gè)條件是B列等于“張三”,只有這兩條件都成立,才執(zhí)行同一行中的C列匯總求和。
在這個(gè)公式中,由于要對(duì)“月份”進(jìn)行計(jì)算,所以用一了個(gè)MONTH函數(shù),它的作用是提取日期中的“月份”。
要注意一點(diǎn),在SUMIF函數(shù)中可以用“整列”(即:銷量表!B:B),而在SUM與IF組合的數(shù)組公式中,不能用“整列”這個(gè)方式,只能用一個(gè)具體的區(qū)域(如:銷量表!A2:A100)。
提示1:在上面幾個(gè)公式中,為了方便使用,可以把“條件”放在一個(gè)固定的單元格中,然后在公式中只引用這個(gè)單元格。比如把要查找的“張三”輸入到K1格中,然后把公式改成: =SUMIF(銷量表!B:B,k1,銷量表!C:C)
提示2:如果公式不在“銷量表”中,那么公式中必須加上表格名字用以指定數(shù)據(jù)位置(如:“銷量表!B1:B100”前面的“銷量表!”),如果公式就在“銷量表”工作表中,則公式中不必加工作表的名字。
提示3:想達(dá)到上面的結(jié)果,還有很多其他方法,大家可根據(jù)自己的喜好選擇。
二、通過條件查找,返回符合條件的內(nèi)容。
在上圖的表格中,每個(gè)姓名是唯一的,希望通過一個(gè)姓名查找到所需的電話號(hào)碼
比如查找李四的電話號(hào)碼
在F1單元格中輸入一個(gè)要查找的姓名“李四”,然后在F2單元格中用公式 =VLOOKUP(F1,A:B,2,0)
只要按需要改變F1格中的姓名,就可在F2單元格中得到對(duì)應(yīng)的號(hào)碼。
這個(gè)公式使用了VLOOKUP函數(shù),它有四個(gè)參數(shù),第一個(gè)參數(shù)是要查找的值,第二個(gè)參數(shù)是要查找的范圍,第三個(gè)參數(shù)表示返回范圍中的第幾列內(nèi)容,第四個(gè)參數(shù)如果為0,就表示“精確查找”,如果為1就表示“模糊查找”,一般用0值居多。
公式的含意是:在A:B兩列范圍的第一列A列中,查找F1單元格中的值,執(zhí)行精確查找,找到后返回A:B兩列中第二列B列的內(nèi)容。
還可以用另一個(gè)公式來達(dá)到這個(gè)效果:
=INDEX(B:B,MATCH(F1,A:A,0))
這個(gè)公式用了兩個(gè)函數(shù),MATCH函數(shù)返回F1單元格的值在A列的位置,第三個(gè)參數(shù)0表示只返回查找到的第一個(gè)值;INDEX函數(shù)通過前一個(gè)函數(shù)返回的位置,在B列中取出對(duì)應(yīng)的內(nèi)容。
這兩個(gè)公式各有特點(diǎn),當(dāng)查找區(qū)域是連續(xù)時(shí),用VLOOKUP比較省事;當(dāng)區(qū)域不在同一個(gè)位置時(shí),就只能用第二個(gè)公式了。
三、通過指定條件,把所有符合的內(nèi)容都顯示出來
還是以最上面的“銷量表”為例,通過一個(gè)公式把所有姓名等于“張三”的內(nèi)容都顯示出來。
先在F1格輸入一個(gè)姓名“張三”,然后在H、I、J列使用公式:
H2單元格輸入公式 =INDEX($A$1:$A$10,SMALL(IF($B$1:$B$10=$F$1,ROW($B$1:$B$10),1000),ROW(A1)))
I2單元格輸入公式 =INDEX($B$1:$B$10,SMALL(IF($B$1:$B$10=$F$1,ROW($B$1:$B$10),1000),ROW(A1)))
J2單元格輸入公式 =INDEX($C$1:$C$10,SMALL(IF($B$1:$B$10=$F$1,ROW($B$1:$B$10),1000),ROW(A1)))
這三個(gè)數(shù)組公式中,只有INDEX的第一個(gè)參數(shù)不同,其他都是一樣的,公式完成后,把這三個(gè)單元格同時(shí)選中,用鼠標(biāo)向下拖動(dòng)復(fù)制到下面的其他格中。
這個(gè)公式對(duì)初學(xué)者來說,就比較難理解了,其實(shí)不論多復(fù)雜的公式,你可以把它分成多個(gè)部份,一部份一部份的來分析理解,就能知道它的作用了。
以I2格公式為例進(jìn)行分析:
1、先看“IF($B$1:$B$10=$F$1,ROW($B$1:$B$10),1000)”
它的意思是在B1:B10區(qū)域內(nèi)查找F1單元格的值(一個(gè)要查找的姓名),如果區(qū)域內(nèi)有這個(gè)值,就返回它的行號(hào)(ROW是返回行號(hào)的函數(shù)),如果沒有就返回一個(gè)比較大的數(shù)值(任意,只要大于數(shù)據(jù)的個(gè)數(shù)就行)。如果有多個(gè)符合的內(nèi)容,就返回多個(gè)行號(hào)。
用本例數(shù)據(jù)查找“張三”來說明,通過這部份運(yùn)算,會(huì)得到一串?dāng)?shù)值{1000;2;1000;4;5;1000;1000;1000;9;1000}
它表示在區(qū)域的第2、4、5、9行中找到了與“張三”相符的內(nèi)容。為了方便說明,我給這串?dāng)?shù)值取個(gè)名字叫“行”
2、再看“SMALL(IF($B$1:$B$10=$F$1,ROW($B$1:$B$10),1000),ROW(A1))”這部份,它等價(jià)于“SMALL(行,ROW(A1))”
這部份用SMALL函數(shù)返回一個(gè)“第幾小值”,由于I2單元格最后用的是ROW(A1),它是A1格的行號(hào),即1,表示返回第一個(gè)最小的值,所以從上面“行”數(shù)值串中返回“2”。為了說明方便,我給它取名為“位置”。
提示:之所以在上面部份用ROW(A1)來代表1,是為了向下拖動(dòng)復(fù)制公式時(shí),它會(huì)自動(dòng)遞增,每復(fù)制一行就自動(dòng)增加1,例如把I2公式復(fù)制到I3格時(shí),在I3格會(huì)變成ROW(A2)。這時(shí)在SMALL函數(shù)的第二個(gè)參數(shù)變成2,表示返回第二小值,即“行”字串中的“4”,依次類推。
3、最后看“INDEX($B$1:$B$10,SMALL(IF($B$1:$B$10=$F$1,ROW($B$1:$B$10),1000),ROW(A1)))”,它等價(jià)于“INDEX($B$1:$B$10,位置)”
這就好理解了,通過“位置”的數(shù)值,從B1:B10中取出相應(yīng)位置的一個(gè)內(nèi)容。
每個(gè)公式都可用這種“分解”的方法去理解和分析。
四、對(duì)多個(gè)重復(fù)數(shù)據(jù),只顯示最后一個(gè)
還是以“銷量表”為例,這個(gè)表中的數(shù)據(jù)會(huì)不斷向下追加,如果我們希望在某一個(gè)單元格中只反映最新追加的數(shù)據(jù),就需要用下面的公式了:
先在G1單元格中輸入一個(gè)姓名“張三”,然后在G2單元格中輸入數(shù)組公式 =INDEX(C1:C100,MAX(IF(B1:B100=G1,ROW(B1:B100),0)))
這個(gè)公式的含義與上面的差不多,只是把SMALL函數(shù)換成了MAX函數(shù),MAX是求“最大值”的函數(shù)。
由于數(shù)據(jù)不斷追加,最新輸入的數(shù)據(jù)的行號(hào)肯定是最大的,通過MAX就能確定它的位置,然后用INDEX函數(shù)取出這個(gè)數(shù)據(jù)。
在上面介紹了一些常用的數(shù)據(jù)查找公式,尤其是后面的公式都使用了數(shù)組公式。數(shù)組公式在輸入后一定要通過按三個(gè)組合鍵來確認(rèn),否則無效。
數(shù)組公式的功能是強(qiáng)大的,但要注意,如果一個(gè)工作簿中使用了過多的數(shù)組公式,或數(shù)據(jù)區(qū)域非常龐大,會(huì)造成運(yùn)算緩慢,效率變低。