對很多Excel的初學者來說,“數組”是個令人望而生畏的概念。但是,隻要稍微花一點時間,就會發現數組并不難理解。尤其是,在新版本的Excel中,已經支持動态數組了,就更加有必要了解數組的來龍去脈和它們的使用了。
當然,在Excel中,我們說到數組,一般是指在公式中引用的數組或者返回的數組,而不是VBA中的數組。
數據其實跟區域中的數值沒有“區别”簡單地說,數組就是一組數據的集合。其中的每個數據一般被稱為數組元素,簡稱元素。
例如:
1,2,3,5,8,11,19
就可以看做一個“數組”。
1,3,5,7,9,11,13
2,4,6,8,10,12,14
也可以看作是一個“數組”。
而下面的數據:
1
3
5
7
9
當然也可以看做一個“數組”。
從中可以看出,數組其實天生就跟Excel的表格比較相配。上面的三種數組實際上跟下圖中的表格區域中的值沒有區别:
所以,我們在理解數組時,在直觀上就可以“當成”Excel中的表格區域來想象。(當然,具體到公式中,兩者還是有一定區别的)。
實際上,如果值存放在單元格區域中,那麼我們就是用:
A1:A5
來引用這些數值。
如果單元格中沒有存放這些數值,就可以使用數組:
1
3
5
7
9
來引用這些數值。
當然,數組中的元素不一定是數字,也可以指文本,日期,邏輯值等數據類型。
數組的維數數組有一個很重要的概念:維數。
在Excel的公式中,我們接觸到的數組都是一維的或者二維的。
一維數組
所謂一維數組,就是隻有一行的數組或者隻有一列的數組:
隻有一行的數組:
1,2,3,5,8,11,19
隻有一列的數組:
1
3
5
7
9
二維數組
二維數組就是有多行多列的數組。下面就是一個2行7列的二維數組:
1,3,5,7,9,11,13
2,4,6,8,10,12,14
Excel公式中的數組上面例子中的數組不能直接放在Excel公式中,必須加上一個符号,這樣Excel的計算引擎一眼就能看出後面的内容是數組,就可以進行數組對應的處理了。
這個符号就是:
{}
所有的數組元素都必須在一對大括号中
例如:
{1,3,5,7,9,11,13}
在某些公式中可以直接使用數組:
=SUM({1,3,5,7,9,11,13})
數組中如果有多列,列之間要用英文的逗号:,隔開。
如果數組中有多行,行之間需要使用英文的分号:;隔開。
=SUM({1;3;5;7;9;11;13})
結果跟上面是一樣的:
如果多行多列,就需要同時使用逗号和分号來區分不同的行和不同的列:
{1,2,3;4,5,6;7,8,9}
使用數組(如果Excel版本不支持動态數組)在不支持動态數組的Excel中使用數組,分為兩種情況:
參數是數組,結果是一個值(非數組)
參數是數組,結果是數組。
先來看第一種情況:
參數是數組,結果是一個值(非數組)
嚴格地說,這種情況不屬于大家經常聽說的“數組公式”,
比如,我們前面的例子:
=SUM({1,3,5,7,9,11,13})
盡管使用了數組,對使用者來說就好像是使用區域一樣,不需要額外的操作。(不用CTRL+SHIFT+ENTER)。
這種情況比較簡單。
2. 參數是數組,結果是數組
這才是真正的數組公式。
例如:
{=IF({0,1},"A","B")}
這就是一個數組公式,輸入的時候,要輸入公式本身(不要輸入大括号):
=IF({0,1},"A","B")
然後按CTRL+SHIFT+ENTER來完成公式的輸入。輸入之後的公式在編輯欄中就自動加上了大括号:
因為輸入的是一個數組(1行兩列),返回的一個跟輸入數組相同維數的數組(1行兩列)。所以,一般應該在Excel中選擇好放置結果的區域:兩個相鄰的單元格,
然後輸入公式:
然後按CTRL+SHIFT+ENTER,完成公式輸入,得到完整的公式結果:
需要再次提醒的是,結果數組跟參數數組一定是相同的維數,上面的例子中,參數數組是
{0,1},
是一行兩列的數組,所以結果也是一行兩列的數組,你隻能選擇同一行上相鄰的兩個單元格來接收數組。
如果公式改一下:
=IF({0;1},"A","B")
參數變成了:
{0;1},
是一個兩行一列的數組,返回結果也是兩行一列的數組,你隻能選擇同一列上相鄰的兩個單元格接收數組:
有的時候數組公式的結果并不一定是個數組。
例如,在這篇文章(原來,VLOOKUP也可以反向查找)中,我們提到了一個VLOOKUP公式:
用這個公式進行反向查找。這個公式的結果隻返回一個值,但是中間過程中的IF公式卻需要返回多個值,因此,仍然是數組公式,需要CTRL+SHIFT+ENTER來完成公式輸入。
還有一個經常遇到的例子就是條件求和(在沒有SUMIF函數之前經常用):
這裡,我們需要求所有>0的數據的合計,可以使用公式:
{=SUM(IF(A2:A9>0,A2:A9,0))}
這裡可以理解為IF函數針對A2:A9做了一個循環,得到了一個中間數組,然後對中間數組進行求和:
用ROW/COLUMN生成數組當ROW和COLUMN函數中的參數是一個多行或多列的區域時,返回的實際是一個數組。
ROW函數實際返回的是多行1列的數組:
這個結果實際上:
{1;2;3;4;5;6;7;8;9}
COLUMN函數返回的是1行多列的數組:
這個結果實際上:
{1,2,3,4,5,6,7,8,9}
利用這兩個函數,我們可以簡化很多數組公式的寫法。
比如,公式:
{=CHOOSE({1,2,3,4,5,6,7,8,9},"a","b","c","d","e","f","g","h","i")}
可以簡化為:
{=CHOOSE(COLUMN(A:I),"a","b","c","d","e","f","g","h","i")}
提醒一下,這麼使用的時候一定要注意需要的是單行數組還是單列數組。
Excel+Power Query+Power Pivot+Power BI
自定義函數底部菜單:知識庫->自定義函數
Excel如何做底部菜單:知識庫->Excel如何做面授培訓底部菜單:培訓學習->面授培訓
也可以在曆史文章中學習Excel,Power Query,Power Pivot,Power BI,Power Automate各種技巧。
有話要說...