Excel公式與函數之美07:公式中的王者——數組公式

2021-02-15 完美Excel

Excel中有一類稱作數組公式的公式,相對比較複雜,有點難以理解,很多人望而卻步,然而數組公式很強大,能夠完成很多不可思議的任務,絕對值得學習。

 

使用數組公式,可以判斷數據是否與指定區域中的數據相匹配,可以統計單元格區域中不重複值的數量,可以提取單元格區域中的不重複數據,將列數據轉換為行數據,…,等等。本文只是簡單地介紹數組公式,讓感興趣的朋友對其有所了解,為進一步的研究和應用打下基礎。

 

為什麼要學習和使用數組公式

使用數組公式,可以使Excel完成我們認為不可能的任務,或者說要使用VBA才能完成的任務,並且在有些情形下,數組公式可能是一個非常有效的解決方案。當然,好奇心也會驅使我們想要學習進階去創建更高級的公式,並且在學會數組公式的基本使用後想要創建更有效的數組公式。在掌握數組公式後,在面對創建Excel解決方案時又多了一份新的武器。我想,這可能是想要學習數組公式的一些原因。

 

在某些情形下,除非使用VBA,使用數組公式可能是實現目的的唯一辦法。在使用普通的公式時,我們可能需要輔助列或一些中間步驟,然而,數組公式可以提供一次性的解決方案,省掉中間步驟。當然,高級篩選、數據透視表、以及新增的一些數組函數能夠解決使用數組公式實現的任務,但是當輸入發生變化時它們不能自動更新或者存在某些局限,然而數組公式能夠立即更新,這是其一大優勢。

 

什麼是數組公式

在認識數組公式之前,先看看通常對於下圖1所示的工作表求總銷售額的過程。

圖1

 

正如圖1中所看到的,要求這四種水果的總銷售額,先使用公式求出每種水果的銷售額,然後相加即可。總共使用了4個公式。其實,我們可以只使用一個公式來求總銷售額,如圖2所示。

圖2

 

在單元格C7中輸入公式:

=SUM(B2:B5*C2:C5)

然後同時按下Ctrl+Shift+Enter鍵完成公式輸入。

 

這個公式就是數組公式,即有操作運算符,運算一組數據而不是單個數據,傳遞的結果也是一組數組,而最終的結果可能是單個的數據,也可能是一組數據。

 

注意,當我們按下Ctrl+Shift+Enter鍵完成輸入後,Excel會自動在公式兩側添加上花括號{},無須手工輸入它們。

 

數組公式原理

仍以上文所示的工作表為例,看看數組公式的計算過程,從而了解其運算原理。

首先,公式中的B2:B5與C2:C5分別被單元格數據替換成數組:

=SUM({5.8;1.2;1.1;3.5}*C2:C5)

=SUM({5.8;1.2;1.1;3.5}*{100;350;200;300})

然後,兩個數組對應元素相乘得到:

=SUM({580;420;220;300})

最後,數組作為SUM函數的參數求和,得到最後的結果2270。

 

可以看到,數組公式是處理一組或一系列數據而不是單個數據的公式。它能夠返回單個的值,如本例所示,也能夠返回一組數據,如下面的例子。

選擇一列中任意9個單元格,輸入下面的數組公式:

=ROW(1:9)

結果如下圖3所示。

圖3

該公式產生一個數組{1;2;3;4;5;6;7;8;9},並將它們依次輸入到單元格。

 

注意,輸入完公式後,一定要記得按下Ctrl+Shift+Enter鍵。

本文中,凡是要求輸入數組公式的,都是指在輸入完公式內容後再按Ctrl+Shift+Enter鍵,這才完成了數組公式的輸入。

 

再看一個例子,了解數組公式的邏輯運算。

如下圖4所示的工作表,記錄著各種產品由不同的銷售人所售賣的數量。

圖4

想要計算張三或者李四所銷售的手機數量,可以使用數組公式:

=SUM((A2:A10="手機")*((B2:B10="張三")+(B2:B10="李四"))*(C2:C10))

結果如下圖5所示。

圖5

這個公式創建了3個數組:

第一個數組是一系列的TRUE或FALSE值,是由單元格區域A2:A10中的數據與「手機」比較後的結果。注意,Excel會將「手機」的數量擴展到與所比較的單元格數量相同(下面的相同)。結果數組為:{TRUE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE;FALSE;TRUE}。

第二個數組由一系列的0或1組成,是由單元格B2:B10中的數據與「張三」和「李四」比較後的運算結果。其中,單元格區域B2:B10與「張三」比較生成一系列TRUE或FALSE值組成的數組:{TRUE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;FALSE},與「李四」比較也生成一系列TRUE或FALSE值組成的數組:{FALSE;FALSE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE}。將這兩個數組相加,此時Excel將TRUE轉換為1,FALSE轉換為0,得到數組{1;0;1;1;1;1;1;1;0}。

第三個數組由單元格C2:C10中的數值組成,即{1200;200;300;120;220;50;600;100;800}。

 

然後,將這3個數組對應的元素相乘。與前面數組相加相同,在數組相乘時,Excel將TRUE和FALSE分別轉換為1和0。因此,3個數組相乘的公式為:

{1;0;1;0;0;0;1;0;1}*{1;0;1;1;1;1;1;1;0}*{1200;200;300;120;220;50;600;100;800}

這3個數組相乘的結果也是一個數組,其每個元素為這3個數組對應元素相乘的結果,即:

{1200;0;300;0;0;0;600;0;0}

該數組作為SUM函數的參數得到最終的結果為2100(=1200+300+600),即張三和李四銷售的手機數量。

 

詳細的運算過程如下圖6所示。

圖6

可以看出:

 

數組公式示例

在完美Excel微信公眾號(公眾號名:excelperfect)中,有很多數組公式應用示例可供參考學習。下面列舉3個簡單的示例,幫助讀者進一步理解數組公式原理。

 

示例1:計算及格的學生成績的平均值

在圖7所示的工作表中,求及格的學生成績的平均值,使用數組公式:

=AVERAGE(IF(B2:B9>60,B2:B9,FALSE))

圖7

這個數組公式使用IF函數來測試多個單元格。比較單元格區域B2:B9中的數值是否大於60,返回一個包含布爾值的數組{TRUE;TRUE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE},然後IF函數根據該數組中的值,如果為TRUE則返回B2:B9中的值,為FALSE則返回FALSE。擴展後的公式如下:

=AVERAGE(IF({TRUE;TRUE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE},{89;92;78;56;88;58;95;55},{FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}))

注意,在原公式最後的FALSE被擴展成一個與前面數組相匹配的適合大小的數組。

在IF函數測試完成後,得到下面的中間結果:

=AVERAGE({89;92;78;FALSE;88;FALSE;95;FALSE})

AVERAGE函數忽略布爾值(TRUE或FALSE),僅對數值求平均值。

 

示例2:計算排名前3的學生成績之和

仍以圖7所示的工作表為例,要求前3名的學生成績之和。

可以使用數組公式:

=SUM(LARGE(B2:B9,ROW(1:3)))

其中,ROW(1:3)返回數組{1;2;3}。LARGE函數依次取單元格區域B2:B9中的最大值、第2大及第3大值,返回數組{95;92;89},然後將其作為SUM函數的參數求和。

 

示例3:計算數值單元格中各數字之和

在單元格A1中的數值為12345,要通過公式得出1+2+3+4+5的值。

可以使用數組公式:

=SUM(1*MID(A1,ROW(INDIRECT("1:"& LEN(A1))),1))

 

LEN函數計算單元格A1中字符的長度,因此上面的公式變為:

=SUM(1*MID(A1,ROW(INDIRECT("1:6")),1))

INDIRECT函數返回對第1至6行的引用:

=SUM(1*MID(A1,ROW(1:6),1))

然後擴展成為:

=SUM(1*MID(A1,{1;2;3;4;5;6},1))

MID函數依次取單元格A1中的字符,每次1個:

=SUM(1*{「1」;」2」;」3」;」4」;」5」;」6」})

將1與數字文本相乘將其轉換為數字:

=SUM({1;2;3;4;5;6})

最後,SUM函數對數字數組求和。

 

結語

數組公式大大擴展了公式的能力,為Excel的應用開闢了一片新天地。然而,要想精通並熟練運用數組公式,需要大量深入的練習,但絕對值得學習。

 

註:參考完美Excel微信公眾號2017年8月25日發表的文章《Excel揭秘11:強大而美妙的數組公式》。

 

本文屬原創文章,轉載請註明出處。

歡迎在下面留言,完善本文內容,讓更多的人學到更完美的知識。

歡迎關注[完美Excel]微信公眾號:

方法1—在微信「添加朋友」或者通訊錄中搜索「完美Excel」或者「excelperfect」後點擊關注。

方法2—掃一掃下面的二維碼

相關焦點

  • EXCEL中數組的應用之五:什麼是函數公式,什麼是數組公式
    今日講數組的應用之五,今日主要是再次和大家講解幾個概念,什麼是數組、什麼是公式、什麼是數組公式、什麼是函數等概念。我在文章中反覆的講解這些概念,但概念很抽象,是否掌握了概念的實質,可以從對概念的理解上得到確認。
  • Row函數在Excel數組公式中的應用
    絕大多數excel數組公式中,都可以看到row函數的身影,那麼row函數到底起到什麼作用呢?我們先從它的基本用法說起。
  • Excel公式與函數之美11:小而美的函數之SMALL函數
    圖1一鍵直達 >> Excel函數學習37:SMALL函數 SMALL函數之美SMALL函數的原理很簡單,但將其組合在公式中,能夠幫助我們按順序獲取數據,這可能就是SMALL函數的美妙之處。
  • Excel公式與函數之美09:小而美的函數之ROW函數和ROWS函數
    引子:從本文開始,進入《Excel公式與函數之美》系列的第2部分:探索與發現。
  • Excel公式與函數之美16:MATCH函數的幾個使用技巧
    圖1 下面講解MATCH函數的一些使用技巧,來展示MATCH函數之美。如下圖2所示,使用公式:=MATCH(9.99999999999999E+307,A:A)或公式:=MATCH(2,1/(A:A<>""))找到列A中最後一個數字所在的行為8,公式中所使用的查找值均大於所要查找的值。
  • Excel數據分析系列(四):Excel中的公式、函數及數組
    作者 | CDA數據分析師Excel 公式Excel 函數Excel 常用函數概覽數組的表示方式如下圖展示的是一個3行5列的數組:用Excel中的數組表達式表示就是:{ $1,2,3; 4,5,6; 7,8,9; 10,11,12; 13,14,15 $ }Excel中的數組運算Excel中的數組運算和Python中numpy的數組對象類似
  • excel函數公式應用:多列數據條件求和公式知多少?
    學習更多技巧,請收藏關注部落窩教育excel圖文教程。 先來看一下什麼是按條件求多列數據之和。 類似下圖這樣的數據,需要根據G列的產品名稱在H列匯總數據。條件區域在B列,而要求和的數據在C、D、E三列中。這種求和就是按條件求多列數據之和,簡稱多列條件求和。
  • excel數組公式進階:按列查找的時候,記得要使用這個函數!
    課程信息卡課程:《Excel天天訓練營》2.0圖文版章節:第2章-精通函數內容:數組公式(列查找)用excel數組公式,如果遇上按列查找的時候,你會發現公式會出問題。如圖中案例表格,數據雖然是一行一行的記錄,但要查詢的內容都在一行的不同列,屬於按列查找,這時候就要用行列轉換函數TRANSPOSE。如果你沒有學會這些函數,那麼就無法應對大量數據的表格。現在,我們就來用函數公式實現excel自動化辦公。
  • Excel函數公式大全之利用MMULT函數計算兩個數組矩陣的乘積
    各位Excel天天學的小夥伴們大家好,歡迎收看Excel天天學出品的excel2019函數公式大全課程。今天我們依舊要學習的是Excel函數中的數學函數MMULT函數,計算兩個數組的矩陣乘積。今天這個例子也是非常的簡單,就是利用MMULT函數計算兩個不等數組的矩陣乘積。
  • 帶你一步步精通EXCEL數組:普通公式與數組公式的本質區別
    今日我將講解數組應用專題的第十一講,內容是EXCEL中數組公式與普通公式的區別。這節中我們要充分認識EXCEL中普通的公式和數組公式。二:讓我們再回顧一下數組公式的概念:所謂數組公式,就是以數組為參數的公式,能通過這個單一的公式,執行多個輸入的操作並產生多個結果,每個結果顯示在一個單元中。數組公式是對一組或多組值執行多重計算,並返回一個或多個結果。三 數組公式的標誌: 在Excel中數組公式的顯示是用大括號對「{}」來括住以區分普通Excel公式。
  • EXCEL函數公式大全之利用SUM函數FREQUENCY函數統計不同區間數據
    EXCEL函數公式大全之利用FREQUENCY函數數組公式統計不同區間數據個數。EXCEL函數與公式在工作中使用非常的頻繁,會不會使用公式直接決定了我們的工作效率,今天我們來學習一下提高我們工作效率的函數FREQUENCY函數和數組公式。
  • excel函數公式大全之利用LARGE函數和SUM函數提取前五名銷售額
    excel函數公式大全之利用LARGE函數和SUM函數提取前五名銷售額,excel函數與公式在工作中使用非常的頻繁,會不會使用公式直接決定了我們的工作效率,今天我們來學習一下提高我們工作效率的函數LARGE函數和SUM函數。
  • Excel函數公式:工作中常用的16個函數公式
    注意:參數中的數字、邏輯值及數字的文本表達式可以參與計算,其中邏輯值被轉換為1,文本則被轉換為數字。如果參數為數組或引用,只有其中的數字參與計算,數組或引用中的空白單元格、邏輯值、文本或錯誤值則被忽略。
  • excel函數公式:萬金油篩選函數公式解讀
    今天就和大家一同破解這個看不懂但又很強悍的公式套路,耐心往下看哦……上面這個公式一共用了六個函數:IFERROR、INDEX、SMALL、IF、ROW和MATCH,其中的IFERROR和MATCH是本例中輔助性的兩個函數,其餘的四個INDEX-SMALL-IF-ROW就是萬金油公式啦。
  • EXCEL函數與公式深度剖析:AND
    函數名:AND格式:=AND(條件1,條件2,…)使用AND函數時,只有當每個條件都滿足時,結果才反回TRUE,否則返回FALSE。輸入公式:=AND(A2:C2=1)按ctrl+shift+回車鍵選擇中D2到D4,然後按ctrl+D然後表格結果會成這樣:此時結果是正確的,
  • Excel中最值得珍藏的16個函數公式
    今天蘭色分享的excel函數公式都不常用,但一旦遇到就會讓你感覺頭痛,只能到處提問和查找。今天蘭色把這些公式收集到一起。以備急時之需。 1、生成不重複隨機數公式 B2:(數組公式,按ctrl+shift+enter三鍵輸入) =SMALL(IF(COUNTIF(B$1:B1,ROW($1:$10)),"",ROW($1:$10)),RANDBETWEEN(1,10-COUNT(B$1:B1)))
  • 什麼是數組公式?你真的了解嗎?一起來認識Excel數組公式
    如果你經常使用Excel的人,相信你對函數公式這個概念並不陌生。可是,什麼是數組公式?你真的了解嗎?
  • EXCEL函數公式大全之利用VLOOKUP函數IF函數數據驗證自動獲取價格
    EXCEL函數公式大全之利用VLOOKUP函數、IF函數、數據驗證,通過下拉框自動獲取產品價格。excel函數與公式在工作中使用非常的頻繁,會不會使用公式直接決定了我們的工作效率,今天我們來學習一下提高我們工作效率的函數VLOOKUP函數、IF函數和數據驗證,選擇產品編碼自動獲取產品價格。
  • Excel 常用函數公式大全
    參數也可以是常量、公式或其他函數,還可以是數組、單元格引用等數組用於建立可產生多個結果或可對存放在行和列中的一組參數進行運算的單個公式。在 Excel中有兩類數組:區域數組和常量數組。區域數組是一個矩形的單元格區域,該區域中的單元格共用一個公式;常量數組將一組給定的常量用作某個公式中的參數。
  • Excel公式技巧47: MID函數的妙用
    學習Excel技術,關注微信公眾號:excelperfect 我們知道MID函數從文本字符串中指定的起始位置返回指定長度的字符串