若要計算巢狀創意素材套件中的所有基礎素材,請將直接素材與套件內容分開,逐層相乘,然後加總結果。本 Mac 版 Excel 操作指南會建立完整的需求矩陣,以及精確的素材與套件查找表。

此任務是找出一個套件或所選批次套件所需的每種圖形數量,其中套件可能包含其他套件。以下所有標籤與數量皆為虛構資料。此計算會計算圖形實例,不會將可重複使用的來源檔案去重。

哪些 Mac 版 Excel 版本支援此工作流程?

請使用 Mac 版 Microsoft 365 Excel、Mac 版 Excel 2024 或 Mac 版 Excel 2021。Microsoft 將這些版本列為支援此處使用的矩陣與查找函數的版本。Microsoft 也明確說明 Mac 版 Excel 2021 支援動態陣列。本操作指南使用一般工作表範圍與以 Enter 確認的公式。MMULT 函數、INDEX 函數、Mac 版 Excel 2021 的新功能。

動態陣列公式會自動填入相鄰儲存格,這種行為稱為溢位。請只在指定的起始儲存格中輸入每個陣列公式,並保持其輸出範圍空白。請勿將這些公式放在 Excel 表格中:Microsoft 說明,表格內不支援溢位陣列公式。動態陣列公式與溢位陣列行為。

本範例的算術結果已透過小型、可重現的 Python 計算進行檢查。這些公式並未在 Excel 桌面應用程式中執行。

如何記錄直接素材與巢狀套件?

從空白工作表開始。您將建立兩個輸入矩陣:一個用於記錄直接放入各套件的基礎圖形,另一個用於記錄直接放入其他套件中的套件。將這兩類輸入分開,可避免已展開的數量再次被計算。

輸入直接基礎素材矩陣

將以下以定位字元分隔的區塊貼到 A1。其數值區域 B2:D5 有四列素材和三欄套件。

素材	DotKit	StripeKit	StudioKit
Dot	2	1	0
Arc	1	0	2
Grid	0	3	1
Tile	0	1	0

將每一欄視為一個套件的直接圖形內容。一個 DotKit 直接包含兩個 Dot 實例和一個 Arc。一個 StripeKit 直接包含一個 Dot、三個 Grid 實例和一個 Tile。其巢狀套件會另外記錄。

每個不存在的元件都請輸入數值零。Microsoft 指定,MMULT 輸入必須是數字;空白儲存格或文字可能會產生 #VALUE!。請將標籤放在傳給函數的數值範圍之外。MMULT 函數。

輸入套件內含套件矩陣

將以下區塊貼到 A7。此處,列表示元件套件,欄表示父套件。數值巢狀矩陣位於 B8:D10。

元件套件	DotKit	StripeKit	StudioKit
DotKit	0	2	1
StripeKit	0	0	3
StudioKit	0	0	0

此矩陣描述以下配方:

  • DotKit 不包含其他套件。
  • StripeKit 包含兩個 DotKit。
  • StudioKit 包含一個 DotKit 和三個 StripeKit。

只記錄直接內容。StudioKit 的一個直接 DotKit 應填在 D8;其三個 StripeKit 內的六個額外 DotKit 必須計算得出。在 D8 輸入七會重複計算那六個。

請在 B1:D1、B7:D7 和 A8:A10 使用完全相同的套件順序:DotKit、StripeKit、StudioKit。矩陣乘法會依位置配對,因此即使標籤相同,也無法修正順序不同的輸入。

此範例假設數量為非負整數,而且配方最終都會到達基礎素材。任何套件都不得透過其他套件形成的鏈包含自身。

如何計算完整需求矩陣?

以下說明中,將直接素材矩陣稱為 B,巢狀矩陣稱為 N。這些是數學符號,不是您需要定義的活頁簿名稱。將 B 乘以 N,即可計算經由一層套件包含關係所貢獻的素材。再將結果乘以 N,即可加入另一層包含關係。

對這三個套件而言,最深的鏈是 StudioKit 包含 StripeKit,而 StripeKit 包含 DotKit。因此,完整矩陣是直接素材、一層巢狀素材,以及兩層巢狀素材的總和:

完整需求 = B + BN + BN²

上標表示重複矩陣乘法。在 Excel 中,請使用 MMULT 計算;對範圍使用一般的 ^2 運算子,會將各個項目分別平方。

計算各巢狀層級的貢獻

在 G2 輸入此公式,然後按 Enter。公式會填入 G2:I5,顯示經由一層巢狀關係到達的素材。

=MMULT($B$2:$D$5,$B$8:$D$10)

在 L2 輸入下一個公式。公式會填入 L2:N5,顯示經由兩層巢狀關係到達的素材。

=MMULT(G2:I5,$B$8:$D$10)

矩陣維度說明了乘法順序:四乘三的素材矩陣乘以三乘三的巢狀矩陣,會產生另一個四乘三的素材矩陣。Microsoft 說明,第一個陣列的欄數必須等於第二個陣列的列數。MMULT 函數。

作為中間檢查,G2:I5 中的 StudioKit 欄應依序包含 5、1、9 和 3。其在 L2:N5 中的欄應依素材順序 Dot、Arc、Grid、Tile,依序包含 12、6、0 和 0。

加總直接與巢狀貢獻

在 Q1:S1 輸入 DotKit、StripeKit 和 StudioKit。在 P2:P5 依序輸入 Dot、Arc、Grid 和 Tile。接著在 Q2 輸入此公式:

=$B$2:$D$5+G2:I5+L2:N5

Q2:S5 中完成的矩陣應如下:

基礎素材 DotKit StripeKit StudioKit
Dot 2 5 17
Arc 1 2 9
Grid 0 3 10
Tile 0 1 3

手動檢查 StudioKit 的 Dot 數量。它直接包含零個 Dot,透過直接包含的 DotKit 得到兩個,並透過三個各包含五個 Dot 的 StripeKit 得到十五個。總數為十七。這項檢查會追蹤通往同一素材的所有路徑,包括經由共用子套件的路徑。

如何確認沒有遺漏任何巢狀層級?

結果看似合理,並不能證明展開已完成。請使用巢狀矩陣本身,檢查是否還有另一層包含關係。

在 G8 輸入此公式,以計算 G8:I10 中的兩層巢狀矩陣:

=MMULT($B$8:$D$10,$B$8:$D$10)

然後在 L8 輸入此公式,以計算 L8:N10 中的三層巢狀矩陣:

=MMULT(G8:I10,$B$8:$D$10)

對於提供的資料,G8:I10 中只有一個非零項目:經由 StudioKit 內的 StripeKit 到達的六個 DotKit。L8:N10 中所有項目皆為零。不存在三層路徑,因此不會有超出已納入的兩層巢狀關係的貢獻。

此停止條件是從矩陣模型推導而來。在數量皆為非負數的情況下,下一個巢狀矩陣全為零,表示所有更長的巢狀路徑也都不存在。這比檢查某個特定素材是否恰好收到另一項貢獻更可靠。

若較大型的活頁簿有 k 個不同套件,且不存在包含循環,最長的鏈最多有 k−1 層。持續將每個素材貢獻矩陣乘以巢狀矩陣並加總結果,直到下一個巢狀次方矩陣全為零。上述三項相加的公式適用於此範例;若其他套件形成更深的鏈,就必須擴充公式。

依套件複雜度從低到高排序,可讓檢查更容易。在提供的巢狀矩陣中,所有非零項目都位於對角線上方。對角線上有正值表示套件直接包含自身。若較長的鏈回到起始套件,請先更正該配方,再使用此有限展開法。

如何查找單一素材與套件的數量?

在 W1 設為素材,在 X1 設為套件,在 Y1 設為數量。在 W2 輸入 Arc,並在 X2 輸入 StudioKit。在 Y2 輸入:

=INDEX($Q$2:$S$5,MATCH(W2,$P$2:$P$5,0),MATCH(X2,$Q$1:$S$1,0))

結果應為 9。第一個 MATCH 用來定位素材列;第二個用來定位套件欄。INDEX 會傳回兩者交會處的值。Microsoft 說明此列與欄的選取方式,並確認 MATCH 與 0 可指定精確比對,且不要求標籤已排序。INDEX 函數、MATCH 函數。

每個軸上的標籤都必須唯一,因為精確的 MATCH 會傳回第一個相符的位置。找不到標籤時會產生 #N/A。檢查名稱時請保留此錯誤,不要以零取代:零在需求矩陣中已有明確意義。MATCH 函數。

如何計算多個套件的批次需求?

在 Q7:S7 輸入 DotKit、StripeKit 和 StudioKit。在 Q8:S8 依序輸入 2、1 和 3。這些是個別要求的數量:兩個 DotKit、一個 StripeKit 和三個 StudioKit。

在 U1 輸入「總實例數」,然後在 U2 輸入此公式:

=MMULT($Q$2:$S$5,TRANSPOSE($Q$8:$S$8))

TRANSPOSE 會將水平排列的三套件需求列轉換成垂直欄。接著進行乘法,為每種基礎素材產生一個總數,並填入 U2:U5。Microsoft 說明,TRANSPOSE 會切換列與欄。TRANSPOSE 函數。

基礎素材 計算式 實例總數
Dot 2×2 + 5×1 + 17×3 60
Arc 1×2 + 2×1 + 9×3 31
Grid 0×2 + 3×1 + 10×3 33
Tile 0×2 + 1×1 + 3×3 10

不要將內部所需的 DotKit 和 StripeKit 加到此需求列中。其內容已包含在完整矩陣中。額外的需求項目代表另外要求的套件。

結果看起來不對時該檢查什麼?

變更公式前,請先依序檢查以下項目:

  1. 陣列顯示 #SPILL!: 檢查預定輸出範圍是否有現存項目或合併儲存格。移除阻擋項目或移動公式。Microsoft 將這兩種情況列為溢位阻礙。如何更正 #SPILL! 錯誤。
  2. 乘法顯示 #VALUE!: 檢查輸入中是否有空白、文字、標題,或維度不相容的情況。MMULT 函數。
  3. 總數過高: 檢查直接矩陣是否已包含展開後的子套件內容,或是否已將內部套件數量加到批次需求中。
  4. 總數過低: 檢查下一個巢狀次方。若結果非零,可能需要再加入一層貢獻。
  5. 數字看起來合理,但標題錯誤: 比對兩個輸入矩陣和輸出標題中的套件順序。

擴充活頁簿時,請更新所有受影響的輸入範圍、輔助計算、輸出標題、查找範圍和需求範圍。這些公式使用固定儲存格位址;在現有輸入旁新增套件,不會自動將其納入計算。

保留直接配方作為可編輯輸入,將巢狀深度檢查放在計算旁邊,並在每次結構變更後抽查一條完整素材路徑。完成這些檢查後,同一份已記錄的配方便可用於查找個別套件數量和計算批次總數。

資料來源