若要計算巢狀創意素材套件中的所有基礎素材,請將直接素材與套件內容分開,逐層相乘,然後加總結果。本 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 加到此需求列中。其內容已包含在完整矩陣中。額外的需求項目代表另外要求的套件。
結果看起來不對時該檢查什麼?
變更公式前,請先依序檢查以下項目:
- 陣列顯示
#SPILL!: 檢查預定輸出範圍是否有現存項目或合併儲存格。移除阻擋項目或移動公式。Microsoft 將這兩種情況列為溢位阻礙。如何更正 #SPILL! 錯誤。 - 乘法顯示
#VALUE!: 檢查輸入中是否有空白、文字、標題,或維度不相容的情況。MMULT 函數。 - 總數過高: 檢查直接矩陣是否已包含展開後的子套件內容,或是否已將內部套件數量加到批次需求中。
- 總數過低: 檢查下一個巢狀次方。若結果非零,可能需要再加入一層貢獻。
- 數字看起來合理,但標題錯誤: 比對兩個輸入矩陣和輸出標題中的套件順序。
擴充活頁簿時,請更新所有受影響的輸入範圍、輔助計算、輸出標題、查找範圍和需求範圍。這些公式使用固定儲存格位址;在現有輸入旁新增套件,不會自動將其納入計算。
保留直接配方作為可編輯輸入,將巢狀深度檢查放在計算旁邊,並在每次結構變更後抽查一條完整素材路徑。完成這些檢查後,同一份已記錄的配方便可用於查找個別套件數量和計算批次總數。
資料來源
- MMULT 函數 — Microsoft 支援。
- Mac 版 Excel 2021 的新功能 — Microsoft 支援。
- 動態陣列公式與溢位陣列行為 — Microsoft 支援。
- INDEX 函數 — Microsoft 支援。
- MATCH 函數 — Microsoft 支援。
- TRANSPOSE 函數 — Microsoft 支援。
- 如何更正 #SPILL! 錯誤 — Microsoft 支援。