本文的標題是《Excel 2016︱多維引用的工作原理》來源于:由作者:陳宣玄采編而成,主要講述了認識引用的維度和維數
引用的維度是指引用中單元格區域的排列方向。維數是引用中不同維度的個數。單個單元格
認識引用的維度和維數
引用的維度是指引用中單元格區域的排列方向。維數是引用中不同維度的個數。單個單元格引用可視作一個無方向的點,沒有維度和維數;一行或一列的連續單元格區域引用可視作一條直線,擁有一個維度,稱為一維橫向引用或一維縱向引用;多行多列的連續單元格區域引用可視作一個平面,擁有縱橫兩個維度,稱為二維引用,如圖 22-1 所示。
將多個單元格或多個單元格區域分別放在不同的二維平面上,就構成**引用。若各平面在單一方向上擴展(橫向或縱向),呈線狀排列,就是三維引用。若各平面同時在縱橫兩個方向上擴展,呈面狀排列,則是四維引用,如圖 22-2 和圖 22-3 所示。
三維、四維引用可看作是以單元格“引用”或單元格區域“引用”為元素的一維、二維“數組”。各“引用”作為數組的元素,是以一個整體參與運算的。
引用函數生成的**引用OFFSET 和 INDIRECT 這兩個函數通常用來生成**引用。當它們對單元格或單元格區域進行引用時,在其部分或全部參數中使用數組(常量數組、內存數組或命名數組),所返回的引用即為**引用。I 使用一維數組生成三維引用以圖 22-1 中左側的數據表為引用數據源,以下數組公式可以返回縱向三維引用。
結果如22-2左圖所示。公式表示在數據源表格中以D1單元格為基點,單元格區域的高度分別為2、3、4 行的三個單元格區域引用。由于其中的 {2;3;4} 為一維縱向數組,因此最終取得對 D1:D2、D1:D3、D1:D4 呈縱向排列的單元格區域引用。該縱向三維引用是由 OFFSET 函數在 height 參數中使用一維縱向數組產生的。同理,在 OFFSET函數的 rows、cols、width 參數中使用一維縱向數組,也將返回縱向三維引用。仍以圖 22-1 中左側的數據表為引用數據源,以下數組公式可以返回橫向三維引用。
結果如圖22-4所示。公式表示在數據源表格中以A1單元格為基點,分別偏移 0、1、2 列,同時單元格區域高度分別為 2、3、4 行的單元格區域引用。由于其中 {0,1,2} 和 {2,3,4} 是對應的一維橫向數組,因此最終取得對 A1:A2、B1:B3、C1:C4 呈橫向排列的單元格區域引用。在 OFFSET 函數的 rows、cols、height、width 參數中,一個或多個參數同時使用等尺寸的一維橫向數組,將返回橫向三維引用。
II 使用不同維度的一維數組生成四維引用在 OFFSET 函數的 rows、cols、height、width 參數中,兩個或多個參數分別使用一維橫向數組和一維縱向數組,將返回四維引用。以下數組公式將返回四維引用。
公式表示在數據源表格中以 A2 單元格為基點,分別偏移 0 行 2 列、0 行 3 列、1 行 2 列、1 行 3 列、2 行 2 列、2 行 3 列的單元格引用。由于 {0;1;2} 是一維縱向數組,{2,3} 是一維橫向數組,因此最終取得對“{C2,D2;C3,D3;C4,D4}”共 6 個單元格的引用,并呈 3 行 2 列二維排列。
III 使用二維數組生成四維引用在 OFFSET 函數的 rows、cols、height、width 參數和 INDIRECT 函數的 ref_text 參數中,如果任意一個參數使用二維數組,都將返回四維引用。以下數組公式也將返回四維引用。
公式表示在數據源表格中以 B1 單元格為基點,按照 B1:C1 單元格區域的尺寸大小,分別偏移“{1行 ,2 行 ,3 行 ;4 行 ,5 行 ,6 行 }”的單元格區域引用。由于其中 {1,2,3;4,5,6} 是二維數組,因此最終取得“{B2:C2,B3:C3,B4:C4;B5:C5,B6:C6,B7:C7}”共 6 個單元格區域的引用,并呈 2 行 3 列二維排列。
IV 跨多表區域的**引用
示例 跨多表匯總工資
圖 22-5 展示了某公司 8~10 月份的部分員工工資明細表,需要在“工資匯總”工作表中匯總各位員工的工資。
在“工資匯總”工作表的 D2 單元格輸入以下數組公式,按 <Ctrl+Shift+Enter> 組合鍵,并將公式**到 D2:D9 單元格區域。{=SUM(SUMIF(INDIRECT({8,9,10}&"月 !A:A"),A2,INDIRECT({8,9,10}&" 月 !D:D")))}該公式首先利用 INDIRECT 函數返回對 8 月、9 月、10 月工作表的 A 列和 D 列的三維引用,然后利用支持**引用的 SUMIF 函數分別統計各工作表中對應員工號的工資,最終利用 SUM 函數匯總三個工作表中對應員工的工資,結果如圖 22-6 所示。
函數生成的**引用和“跨多表區域引用”的區別
除了 OFFSET 函數和 INDIRECT 函數產生的**引用以外,還有一種“跨多表區域引用”。例如,公式“=SUM(1 學期 :4 學期 !A1:A6)”可以對 1 學期、2 學期、3 學期和 4 學期這 4 張工作表的 A1:A6單元格區域進行求和,返回一個結果。
實際上,“跨多表區域引用”并非真正的引用,而是一個連續多表區域的引用組合。函數生成的**引用與“跨多表區域引用”的主要區別如下。
函數生成的**引用將不同工作表上的各單元格區域引用作為多個結果返回給 Excel,而“跨多表區域引用”作為一個結果返回給 Excel。
兩者支持的參數類型不相同。函數生成的**引用可以在 reference、range 和 ref 類型的參數中使用,而“跨多表區域引用”由于不是真正的引用,故一般不能在這三類參數中使用。函數生成的**引用將對每個單元格區域引用分別計算,同時返回多個結果值?!翱缍啾韰^域引用”將作為一個整體返回一個結果值。
函數生成的**引用中每個被引用區域的大小和行列位置可以不同,工作表順序可以是任意的?!翱缍啾韰^域引用”的各工作表必須相鄰,且被引用區域的大小和行列位置也必須相同。
本文原作者為陳宣玄,轉載請注明:出處!如該文有不妥之處,請聯系站長刪除,謝謝合作~
原創文章,作者:陳宣玄,如若轉載,請注明出處:http://www.uuuxu.com/20220514323475.html