細說結構化參照的語法與規則 - 從參照到結構化參照系列(4/5)

系列文章名稱:從「參照」到「結構化參照」系列分享
細說結構化參照的語法與規則以及實作使用範例(4/5)

看完前幾篇文章後,接著我們就深入了解結構化參照的語法與規則囉!我們也延續使用先前文章的實作範例。不同版本的Excel在結構化參照的預設參照略有不同,例如:Excel 2007時,若在表格以外的儲存格(例如:H2),輸入或點選了參照表格裡與此公式同一列的某欄位內容時(例如:銷售金額D2),則結構化參照的公式的語法為:

=資料表名稱[[#這個列],[欄位名稱]]

此例即為:

=銷售統計[[#這個列],[銷售金額]]

而Excel 2010以後的操作,有一點點小差異,那就是在輸入或點選了參照表格裡與此公式同一列的某欄位內容時(例如:銷售金額D2),則結構化參照的公式的語法為:

=資料表名稱[@欄位名稱]

此例即為:

=銷售統計[@銷售金額]

若您是輸入:

=銷售統計[[#這個列],[銷售金額]]

也會自動轉譯成:

=銷售統計[@銷售金額]

由於所參照的是表格裡與公式所在位址同一列的某欄位內容,因此,參照結果可以傳回該欄位內容的值就理所當然囉!

至於,如果要參照整個資料表的標題列,則結構化參照的公式的語法為:

=資料表名稱[#標題]

若是英文版的Excel,則是:

=資料表名稱[#headers]

此例為例,若在儲存格H4輸入:

=銷售統計[#標題]

則顯示的結果卻傳回 #VALUE!
這是為什麼呢?

不論是Excel 2007、2010、2013、2016甚至2019,都是這樣的情況,那是因為資料表的標題理應是橫向多個儲存格,例如此例的標題列內容為「商品編號」、「商品」、「類別」、「銷售金額」、「成本」、「費用」等五項文字內容,若在H4儲存格裡輸入參照公式,所回傳的結果會是五個值,這是一個陣列概念,五項文字內容的值,又怎麼能夠塞在一個H4儲存格裡呢?
因此,在Excel 2019以前的版本,正確的做法是以陣列公式參照的概念來處理這個回傳結果的公式建構。也就是說,完成公式的輸入後並不是直接按下Enter按鍵,而是必須按下Ctrl + Shift + Enter按鍵(陣列公式的按法)。不過,若仍只是選取單一儲存格H4而已,輸入了公式並按下Ctrl + Shift + Enter按鍵後,也只能傳回第一結果值而已。

如果事先取選橫向的5個空白儲存格(與此例所要參照的表格標題列A5:F5相同儲存格數量),例如:H4:L4(也是橫向的5個儲存格),然後再輸入上述的結構化參照公式(目前為止,不論是Excel 2007或是直至Excel 2019的版本皆是如此操作):

=銷售統計[#標題]

按下Ctrl + Shift + Enter按鍵後,傳回的陣列內容便順利的呈現在每一個儲存格中。在公式列上,您也可以看到公式的兩側會自動加上一對大括號「{」及「}」表示這正是一個陣列形式的運算公式。


 不過,上述這些情境,在Microsoft 365裡的Excel上可就有些許不同的表現了!在Excel的365版本上,只要在單一的儲存格內輸入資料表的結構化參照公式,例如:儲存格H4,輸入公式:

=銷售統計[#標題]

或是按下等於「=」按鍵後,再以滑鼠選取資料表列所在處的儲存格範圍A1:F1,亦會自動完成上述公式。只要按下Enter按鍵(不需要按下Ctrl + Shift + Enter組合按鍵喔!),就可以立即完成整個標題列的參照,所取得的參照內容也自儲存格H4往右自動延關於Microsoft 365的Excel版本其動態陣列參照功能(Dynamic array formulas),請參酌筆者另一篇文章的詳細介紹。在此我們就先來回顧一下從頭到尾我們碰到的結構化參照語法規則與相關符號吧!伸至儲存格M4。這便是目前Microsoft 365的Excel版本才特有的動態陣列參照功能(Dynamic array formulas)。

關於Microsoft 365的Excel版本其動態陣列參照功能(Dynamic array formulas),請參酌筆者另一篇文章(Excel的動態陣列參照)的詳細介紹。在此我們就先來回顧一下從頭到尾我們碰到的結構化參照語法規則與相關符號吧!

(註:此Excel陣列函數系列文章的實作範例下載)