瞭解與實作Excel動態陣列公式
2018年9月,微軟引進了動態陣列公式。動態陣列公式可以自動填入或 "溢位" 到連續的空白儲存格,從此以後就不再需要舊版的 Ctrl + Shift + Enter (CSE)陣列公式操作方式與鍵盤按鍵的特別按法了。例如:前述的範例若是在Microsoft 365的Excel版本環境裡執行,僅需要在儲存格H9輸入陣列公式:
=(D2:D9+2*E2:E9)*F2:F9
或者:
=(工作時數 + 2*加班時數) * 鐘點費
完成公式輸入後只要按下Enter按鍵,便會將此公式也自動往下填入到連續的空白儲存格,在外觀上亦會有藍色細線框的標示。雖然工作表上方的公式編輯列上您所看到的公式並沒有一對大括號的標示,但這的的確確是一個陣列公式。
如果有使用過FREQUENCY函數的讀者,應該知道此函數的運用特性,因為這是一個陣列形式的函數,必須是以(CSE)陣列公式操作的方式與鍵盤按法來完成。例如,在一百個數字當中,想要了解這些數字的分布區間為何,例如:少於10的數字有幾個?10-30、30-50、50-60、60-80、80-90以及90以上等不同級距的數字各有幾個?此時便是FREQUENCY最典型的使用時機了!除了必須在工作表的儲存格範圍裡,將各級距數字表示出來,例如:此例的儲存格範圍L3:L8,在函數的建立上,就必須以陣列公式的建立規範來完成,因此,必須事先選取儲存格範圍M3:M9後再輸入公式:
=FREUQENCY(A1:J10,L3:L8)
記得,輸入完要按下Ctrl + Shift + Enter按鍵。
完成後,也可以在公式編輯列上看到=FREUQENCY(A1:J10,L3:L8)函數兩側外圍自動添增了一對大括號,表示這是一個陣列公式的形式與架構。
然而,若是具備動態陣列參照能力的Microsoft 365 Excel版本,只需在想要顯示結果的首格儲存格M1輸入FREQUENCY陣列公式,然後,直接按下Enter按鍵,便可自動識別、擴展適當的範圍,以儲存整組陣列公式所傳回的結果值。
這種可以傳回一組值的Excel公式,也就是陣列公式,會將這些值傳回至連續的相鄰儲存格內。而這個傳回結果值的行為即稱之為「溢位」(spilling)。在Excel 2019及更早以前的Excel版本,在輸入陣列公式之前,就應該先考量該陣列公式會傳回多少個值,在輸入陣列公式之前,就必須事先選取多少個連續儲存格範圍,然後才輸入陣列公式,並按下Ctrl+Shift+Enter按鍵。有了動態陣列參照的技術後,陣列公式的建立就更方便、夠有效率了。
發生溢位的狀況與解決
以下圖所示為例,如同前述的實作範例,在新版本的Excel 365中輸入了陣列公式後,按下Enter按鍵,這次卻不若前述實作順利。
畫面上沒有傳回並顯示正確的結果,反而顯示了「#溢位!」的錯誤訊息,這又代表什麼呢?原來動態陣列參照的特性是會根據輸入的陣列公式,自動判別參照的內容應該往下填入到連續空白儲存格範圍大小,若是沒有足夠的空間,便會顯示「#溢位!」錯誤訊息。因此,只要移除發生錯誤的原因,便會自動改善動態參照的失敗。例如:此例在於下方的M9儲存格已經含文字內容,而動態參照陣列所需的範圍不敷使用,因此發生「溢位」。此時,您若將作用儲存格移至剛剛輸入動態參照陣列公式的儲存格M3,便可以看到畫面上的藍色虛線大小,正標示出此動態參照陣列公式的結果所需的範圍大小(M3:M9)。原先既有的說明文字正巧就在M9,因此,陣列公式的參照並未完成。這時候只要您將儲存格M9清空,或者將其內含文字搬移至他處,原本的「溢位」訊息便會自動消失,並完成動態參照陣列公式的執行。
(註:此Excel動態陣列參照與動態陣列公式的實作檔案下載)