要计算嵌套创意套件中的每种基础素材数量,请将直接素材与套件内容分开,逐层相乘,再将结果相加。本 Mac 版 Excel 操作指南将构建完整的需求矩阵,以及精确的素材和套件查找表。
任务是计算制作一套套件或指定批量套件需要多少个各类图形,前提是套件中可能包含其他套件。以下所有标签和数量均为虚构数据。计算的是图形实例数量,不会合并可重复使用的源文件。
哪些 Mac 版 Excel 版本支持此工作流程?
请使用 Microsoft 365 版 Excel for Mac、2024 版 Excel for Mac 或 2021 版 Excel for Mac。Microsoft 将这些版本列为支持此处使用的矩阵和查找函数的版本。Microsoft 还明确说明 Excel 2021 for Mac 支持动态数组。本指南使用普通工作表区域和通过 Enter 确认的公式。MMULT 函数、INDEX 函数、Excel 2021 for Mac 的新增功能。
动态数组公式会自动填充相邻单元格,这种行为称为溢出。每个数组公式只在指定的起始单元格中输入,并确保其输出区域为空。请将这些公式放在 Excel 表格之外:Microsoft 说明,表格内不支持溢出数组公式。动态数组公式和溢出数组行为。
示例中的计算过程已用一个小型确定性 Python 计算进行核对。公式未在 Excel 桌面应用中执行。
如何记录直接素材和嵌套套件?
从空白工作表开始。你将创建两个输入矩阵:一个记录直接放入每种套件中的基础图形,另一个记录直接放入其他套件中的套件。将这两类输入分开,可以防止已经展开的数量被重复计算。
输入直接基础素材矩阵
将以下制表符分隔的内容粘贴到 A1。其数值区域 B2:D5 有四行素材和三列套件。
素材 圆点套件 条纹套件 工作室套件
圆点 2 1 0
弧线 1 0 2
网格 0 3 1
瓷砖 0 1 0
每一列表示一种套件中直接包含的图形。一个圆点套件直接包含两个圆点实例和一条弧线。一个条纹套件直接包含一个圆点、三个网格实例和一块瓷砖。其嵌套套件将在另一区域记录。
所有缺少的组件都用数值零表示。Microsoft 规定,MMULT 输入必须包含数字;空白单元格或文本可能导致 #VALUE!。传递给函数的数值区域中不要包含标签。MMULT 函数。
输入套件嵌套矩阵
将以下内容粘贴到 A7。此处,每一行表示组件套件,每一列表示父套件。数值嵌套矩阵位于 B8:D10。
组件套件 圆点套件 条纹套件 工作室套件
圆点套件 0 2 1
条纹套件 0 0 3
工作室套件 0 0 0
该矩阵描述以下配方:
- 圆点套件不包含其他套件。
- 条纹套件包含两个圆点套件。
- 工作室套件包含一个圆点套件和三个条纹套件。
只记录直接包含的内容。工作室套件直接包含的一个圆点套件应填在 D8;其三个条纹套件中另外包含的六个圆点套件必须通过计算得出。在 D8 中填入 7 会重复计算这六个套件。
在 B1:D1、B7:D7 和 A8:A10 中,套件顺序必须完全一致:圆点套件、条纹套件、工作室套件。矩阵乘法按位置匹配,因此标签相同也无法弥补顺序不同的输入。
本示例假定数量为非负整数,且配方最终会到达基础素材。任何套件都不能通过一连串其他套件包含自身。
如何计算完整的需求矩阵?
在下文中,将直接素材矩阵称为 B,将嵌套矩阵称为 N。这些是数学符号,不需要在工作簿中定义。将 B 乘以 N,即可得到通过一层套件包含关系带来的素材数量。再将结果乘以 N,即可纳入再深一层的包含关系。
对于这三种套件,最深的链是:工作室套件包含条纹套件,条纹套件再包含圆点套件。因此,完整矩阵是直接素材、一层嵌套素材和两层嵌套素材之和:
完整需求 = 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 中工作室套件所在列应依照素材顺序圆点、弧线、网格、瓷砖,包含 5、1、9 和 3。L2:N5 中对应的列应包含 12、6、0 和 0。
加总直接素材和嵌套素材的贡献
在 Q1:S1 中依次输入圆点套件、条纹套件和工作室套件。在 P2:P5 中依次输入圆点、弧线、网格和瓷砖。然后在 Q2 中输入以下公式:
=$B$2:$D$5+G2:I5+L2:N5
Q2:S5 中的完整矩阵应为:
| 基础素材 | 圆点套件 | 条纹套件 | 工作室套件 |
|---|---|---|---|
| 圆点 | 2 | 5 | 17 |
| 弧线 | 1 | 2 | 9 |
| 网格 | 0 | 3 | 10 |
| 瓷砖 | 0 | 1 | 3 |
手动核对工作室套件中的圆点数量。它直接包含零个圆点;其直接包含的圆点套件带来两个圆点;三个条纹套件各包含五个圆点,共带来十五个圆点。总数为十七。该检查会追踪通向同一种素材的所有路径,包括经过共享子套件的路径。
如何确认没有遗漏任何嵌套层级?
总数看起来合理,并不能证明展开过程完整。使用嵌套矩阵本身检查是否还存在另一层包含关系。
在 G8 中输入以下公式,以计算两层嵌套矩阵 G8:I10:
=MMULT($B$8:$D$10,$B$8:$D$10)
然后在 L8 中输入以下公式,以计算三层嵌套矩阵 L8:N10:
=MMULT(G8:I10,$B$8:$D$10)
对于给定数据,G8:I10 中只有一个非零值:通过工作室套件中的条纹套件得到六个圆点套件。L8:N10 中的所有值均为零。不存在三层嵌套路径,因此两层嵌套已涵盖全部贡献。
这一停止规则源自矩阵模型。数量均为非负数时,如果下一层嵌套矩阵全为零,所有更深的嵌套路径也都不存在。与检查某一种素材是否恰好没有获得额外数量相比,这种方法更加可靠。
对于包含 k 种不同套件且不存在包含循环的大型工作簿,最长链最多有 k−1 层。继续将每个素材贡献矩阵乘以嵌套矩阵,并将结果相加,直到下一次嵌套幂运算的结果全为零。上面的三项公式适用于本示例;如果增加套件导致嵌套链更深,就必须扩展公式。
按从最简单到嵌套最多的顺序排列套件,便于检查。在给定的嵌套矩阵中,所有非零值都位于主对角线上方。主对角线上出现正数,表示套件直接包含自身。如果更长的链最终回到起始套件,请先修正配方,再进行此有限展开。
如何查找某种素材在某个套件中的数量?
在 W1 中输入“素材”,在 X1 中输入“套件”,在 Y1 中输入“数量”。在 W2 中输入“弧线”,在 X2 中输入“工作室套件”。在 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 中依次输入圆点套件、条纹套件和工作室套件。在 Q8:S8 中依次输入 2、1 和 3。这些是单独提出的需求数量:两个圆点套件、一个条纹套件和三个工作室套件。
在 U1 中输入“实例总数”,然后在 U2 中输入以下公式:
=MMULT($Q$2:$S$5,TRANSPOSE($Q$8:$S$8))
TRANSPOSE 会将横向的三种套件需求行转换为纵向列。随后相乘会得出每种基础素材的总数,并填充 U2:U5。Microsoft 说明,TRANSPOSE 用于转换行和列。TRANSPOSE 函数。
| 基础素材 | 计算 | 实例总数 |
|---|---|---|
| 圆点 | 2×2 + 5×1 + 17×3 |
60 |
| 弧线 | 1×2 + 2×1 + 9×3 |
31 |
| 网格 | 0×2 + 3×1 + 10×3 |
33 |
| 瓷砖 | 0×2 + 1×1 + 3×3 |
10 |
不要把内部所需的圆点套件和条纹套件添加到此需求行中。它们的内容已计入完整矩阵。额外需求项表示单独追加订购的套件。
结果看起来不对时应检查什么?
更改公式前,请依次进行以下检查:
- 数组显示
#SPILL!: 检查预期输出区域中是否有已有内容或合并单元格。移走妨碍内容或重新放置公式。Microsoft 说明这两种情况都会阻止溢出。如何更正 #SPILL! 错误。 - 乘法显示
#VALUE!: 检查输入中是否有空白、文本、标题,或维度不兼容的区域。MMULT 函数。 - 总数过高: 检查直接矩阵是否已经包含展开后的子套件内容,或是否将内部套件数量加到了批量需求中。
- 总数过低: 检查下一层嵌套幂。若结果非零,展开过程可能需要再增加一个贡献层级。
- 数字看起来合理,但列标题不对: 比较两个输入矩阵中的套件顺序与输出标题。
扩展工作簿时,更新所有受影响的输入区域、辅助计算、输出标题、查找区域和需求区域。这些公式使用固定地址;在现有输入旁边新增一个套件,不会自动将其纳入计算。
保留可编辑的直接配方,在计算旁保留嵌套深度检查,并在每次结构调整后抽查一条完整的素材路径。完成这些检查后,最终矩阵便能根据同一组已记录配方计算单个套件的查询结果和批量总数。
来源
- MMULT 函数 — Microsoft 支持。
- Excel 2021 for Mac 的新增功能 — Microsoft 支持。
- 动态数组公式和溢出数组行为 — Microsoft 支持。
- INDEX 函数 — Microsoft 支持。
- MATCH 函数 — Microsoft 支持。
- TRANSPOSE 函数 — Microsoft 支持。
- 如何更正 #SPILL! 错误 — Microsoft 支持。