Excel的動態陣列參照(Dynamic array formulas)
為了介紹Excel的動態陣列參照(Dynamic array formulas),我們就再淺談並回顧一下傳統的儲存格公式與陣列公式的差異。
傳統的公式建立與填滿
傳統的儲存格公式,在輸入完後直接按下Enter按鍵即可。若有將該公式填滿到相鄰儲存格的需求,則拖曳填滿控點來擴充範圍,便可以順利完成。如下圖所示,在儲存格H2輸入費用公式,公式裡參照了三個單一儲存格位址D2、E2、F2,完成算式並顯示結果後,再拖曳填滿控點至儲存格H9。
然後,透過傳統的加總函數SUM,即可在儲存格F11輸入參照範圍H2:H9的加總運算。
另一種值得介紹的操作方式是「範圍填滿」的操作,也就是說,若明知要建立相關公式的資料範圍,則可以事先選取要輸入公式的範圍後,再輸入公式並按下Ctrl+Enter按鍵(不是只按Enter按鍵喔)。例如下圖範例為例:事先選取儲存格範圍H2:H9。
然後直接輸入公式(此時的公式會建立在選取範圍的首格),然後按下Ctrl+Enter鍵,這個操作模式即稱之為「範圍填滿」。
陣列公式
想想,既然是一堆相鄰的儲存格要進行運算,公式裡所參照的單一儲存格位址,可不可以直接改成參照至整個範圍而不是單一儲存格呢?例如:原本的
=(D2+2*E2)*F2
寫成:
=(D2:D9+2*E2:E9)*F2:F9
當然沒問題囉!既然此範例公式裡的參照僅是進行簡單的加減乘除運算,所以,參照儲存格若改以參照範圍,這便是一個典型的陣列運算,執行的結果也應該會傳回多組結果。如此,這個範例的公式輸入,並不適合僅輸入在單一儲存格裡,也不適合完成公式輸入後按下Enter按鍵。
正確的操作程序應該是事先選取範圍,例如:H2:H9,然後在輸入完陣列公式後,按下Ctrl+Shift+Enter,一次完成9個儲存格的公式建立。
基本上,若要使用陣列公式,並且將陣列裡的每一個結果都一一存放在相鄰的儲存格裡,在Excel 2019及更早以前的Excel版本,在輸入陣列公式之前,就應該先考量該陣列公式會傳回多少個值,然後,在輸入陣列公式之前,就事先選取多少個連續儲存格範圍,然後才輸入陣列公式,並按下Ctrl+Shift+Enter按鍵,這就是陣列參照的運用方式與規範。
當然,若不需要將陣列裡的每一個結果輸出在各個相鄰的儲存格裡,而是想要再針對這些結果進行其他運算,例如:查詢、加總、平均、…便可以將函數加入其中。就以上述的實作範例為例,您並不需要事先計算每一筆資料的費用,也能夠直接以陣列的概念,完成總費用的參照運算。例如在前例所介紹的陣列公式:
=(D2:D9+2*E2:E9)*F2:F9
含括的參照範圍有9筆資料,所以會傳回9個結果,因此,可以透過SUM函數將這9個結果加總起來,寫成:
=SUM((D2:D9+2*E2:E9)*F2:F9)
記得,也是以Chtl+Shift+Enter按鍵結束公式的建立。此時,工作表上方的公式編輯列上,可以看到完成的公式兩側會有一對大括號標示,代表這正是陣列公式。
{=SUM((D2:D9+2*E2:E9)*F2:F9)}
如果運用了儲存格範圍的命名技巧或資料表結構,在公式的參照裡能夠多加運用名稱而不是實質的儲存格位址、範圍,這將會讓公式的編輯更加便利,可讀性也更高,參照的目標也更靈活。當參照的來源內容有異動時,參照公式也可以不需要再修改。
還有一點蠻特別的便是陣列公式具有保護特性,也就是說同一個陣列裡的內容,並不能輕易刪除。例如:您若僅選取了含有陣列公式的局部儲存格,而不是選取包含陣列公式的整個儲存格範圍,在按下刪除按鍵嘗試清除這些儲存格內容時,會有不能只改變陣列部分成員的警示對話。
(註:此Excel動態陣列參照與動態陣列公式的實作檔案下載)