對(duì)很多Excel的初學(xué)者來(lái)說(shuō),“數(shù)組”是個(gè)令人望而生畏的概念。但是,只要稍微花一點(diǎn)時(shí)間,就會(huì)發(fā)現(xiàn)數(shù)組并不難理解。尤其是,在新版本的Excel中,已經(jīng)支持動(dòng)態(tài)數(shù)組了,就更加有必要了解數(shù)組的來(lái)龍去脈和它們的使用了。
當(dāng)然,在Excel中,我們說(shuō)到數(shù)組,一般是指在公式中引用的數(shù)組或者返回的數(shù)組,而不是VBA中的數(shù)組。
簡(jiǎn)單地說(shuō),數(shù)組就是一組數(shù)據(jù)的集合。其中的每個(gè)數(shù)據(jù)一般被稱為數(shù)組元素,簡(jiǎn)稱元素。
例如:
1,2,3,5,8,11,19
就可以看做一個(gè)“數(shù)組”。
1,3,5,7,9,11,13
2,4,6,8,10,12,14
也可以看作是一個(gè)“數(shù)組”。
而下面的數(shù)據(jù):
1
3
5
7
9
當(dāng)然也可以看做一個(gè)“數(shù)組”。
從中可以看出,數(shù)組其實(shí)天生就跟Excel的表格比較相配。上面的三種數(shù)組實(shí)際上跟下圖中的表格區(qū)域中的值沒有區(qū)別:
所以,我們?cè)诶斫鈹?shù)組時(shí),在直觀上就可以“當(dāng)成”Excel中的表格區(qū)域來(lái)想象。(當(dāng)然,具體到公式中,兩者還是有一定區(qū)別的)。
實(shí)際上,如果值存放在單元格區(qū)域中,那么我們就是用:
A1:A5
來(lái)引用這些數(shù)值。
如果單元格中沒有存放這些數(shù)值,就可以使用數(shù)組:
1
3
5
7
9
來(lái)引用這些數(shù)值。
當(dāng)然,數(shù)組中的元素不一定是數(shù)字,也可以指文本,日期,邏輯值等數(shù)據(jù)類型。
數(shù)組有一個(gè)很重要的概念:維數(shù)。
在Excel的公式中,我們接觸到的數(shù)組都是一維的或者二維的。
一維數(shù)組
所謂一維數(shù)組,就是只有一行的數(shù)組或者只有一列的數(shù)組:
只有一行的數(shù)組:
1,2,3,5,8,11,19
只有一列的數(shù)組:
1
3
5
7
9
二維數(shù)組
二維數(shù)組就是有多行多列的數(shù)組。下面就是一個(gè)2行7列的二維數(shù)組:
1,3,5,7,9,11,13
2,4,6,8,10,12,14
上面例子中的數(shù)組不能直接放在Excel公式中,必須加上一個(gè)符號(hào),這樣Excel的計(jì)算引擎一眼就能看出后面的內(nèi)容是數(shù)組,就可以進(jìn)行數(shù)組對(duì)應(yīng)的處理了。
這個(gè)符號(hào)就是:
{}
所有的數(shù)組元素都必須在一對(duì)大括號(hào)中
例如:
{1,3,5,7,9,11,13}
在某些公式中可以直接使用數(shù)組:
=SUM({1,3,5,7,9,11,13})
數(shù)組中如果有多列,列之間要用英文的逗號(hào):,隔開。
如果數(shù)組中有多行,行之間需要使用英文的分號(hào):;隔開。
=SUM({1;3;5;7;9;11;13})
結(jié)果跟上面是一樣的:
如果多行多列,就需要同時(shí)使用逗號(hào)和分號(hào)來(lái)區(qū)分不同的行和不同的列:
{1,2,3;4,5,6;7,8,9}
在不支持動(dòng)態(tài)數(shù)組的Excel中使用數(shù)組,分為兩種情況:
參數(shù)是數(shù)組,結(jié)果是一個(gè)值(非數(shù)組)
參數(shù)是數(shù)組,結(jié)果是數(shù)組。
先來(lái)看第一種情況:
參數(shù)是數(shù)組,結(jié)果是一個(gè)值(非數(shù)組)
嚴(yán)格地說(shuō),這種情況不屬于大家經(jīng)常聽說(shuō)的“數(shù)組公式”,
比如,我們前面的例子:
=SUM({1,3,5,7,9,11,13})
盡管使用了數(shù)組,對(duì)使用者來(lái)說(shuō)就好像是使用區(qū)域一樣,不需要額外的操作。(不用CTRL+SHIFT+ENTER)。
這種情況比較簡(jiǎn)單。
2. 參數(shù)是數(shù)組,結(jié)果是數(shù)組
這才是真正的數(shù)組公式。
例如:
{=IF({0,1},"A","B")}
這就是一個(gè)數(shù)組公式,輸入的時(shí)候,要輸入公式本身(不要輸入大括號(hào)):
=IF({0,1},"A","B")
然后按CTRL+SHIFT+ENTER來(lái)完成公式的輸入。輸入之后的公式在編輯欄中就自動(dòng)加上了大括號(hào):
因?yàn)檩斎氲氖且粋€(gè)數(shù)組(1行兩列),返回的一個(gè)跟輸入數(shù)組相同維數(shù)的數(shù)組(1行兩列)。所以,一般應(yīng)該在Excel中選擇好放置結(jié)果的區(qū)域:兩個(gè)相鄰的單元格,
然后輸入公式:
然后按CTRL+SHIFT+ENTER,完成公式輸入,得到完整的公式結(jié)果:
需要再次提醒的是,結(jié)果數(shù)組跟參數(shù)數(shù)組一定是相同的維數(shù),上面的例子中,參數(shù)數(shù)組是
{0,1},
是一行兩列的數(shù)組,所以結(jié)果也是一行兩列的數(shù)組,你只能選擇同一行上相鄰的兩個(gè)單元格來(lái)接收數(shù)組。
如果公式改一下:
=IF({0;1},"A","B")
參數(shù)變成了:
{0;1},
是一個(gè)兩行一列的數(shù)組,返回結(jié)果也是兩行一列的數(shù)組,你只能選擇同一列上相鄰的兩個(gè)單元格接收數(shù)組:
有的時(shí)候數(shù)組公式的結(jié)果并不一定是個(gè)數(shù)組。
例如,在這篇文章(原來(lái),VLOOKUP也可以反向查找)中,我們提到了一個(gè)VLOOKUP公式:
用這個(gè)公式進(jìn)行反向查找。這個(gè)公式的結(jié)果只返回一個(gè)值,但是中間過(guò)程中的IF公式卻需要返回多個(gè)值,因此,仍然是數(shù)組公式,需要CTRL+SHIFT+ENTER來(lái)完成公式輸入。
還有一個(gè)經(jīng)常遇到的例子就是條件求和(在沒有SUMIF函數(shù)之前經(jīng)常用):
這里,我們需要求所有>0的數(shù)據(jù)的合計(jì),可以使用公式:
{=SUM(IF(A2:A9>0,A2:A9,0))}
這里可以理解為IF函數(shù)針對(duì)A2:A9做了一個(gè)循環(huán),得到了一個(gè)中間數(shù)組,然后對(duì)中間數(shù)組進(jìn)行求和:
當(dāng)ROW和COLUMN函數(shù)中的參數(shù)是一個(gè)多行或多列的區(qū)域時(shí),返回的實(shí)際是一個(gè)數(shù)組。
ROW函數(shù)實(shí)際返回的是多行1列的數(shù)組:
這個(gè)結(jié)果實(shí)際上:
{1;2;3;4;5;6;7;8;9}
COLUMN函數(shù)返回的是1行多列的數(shù)組:
這個(gè)結(jié)果實(shí)際上:
{1,2,3,4,5,6,7,8,9}
利用這兩個(gè)函數(shù),我們可以簡(jiǎn)化很多數(shù)組公式的寫法。
比如,公式:
{=CHOOSE({1,2,3,4,5,6,7,8,9},"a","b","c","d","e","f","g","h","i")}
可以簡(jiǎn)化為:
{=CHOOSE(COLUMN(A:I),"a","b","c","d","e","f","g","h","i")}
提醒一下,這么使用的時(shí)候一定要注意需要的是單行數(shù)組還是單列數(shù)組。
聯(lián)系客服