要将美术资产数量矩阵展开为每项对应一行工作表行,请先列出每个资产–格式组合及其累计数量。然后使用 SEQUENCE 和 XLOOKUP 按所需次数重复其标签。本演练使用合成美术标签。

任务很简单:将紧凑的规划网格转换为项目列表。数量为 2 将生成两行具有相同资产和格式的行;数量为 0 则不生成行。下面的示例保留中间计算过程,以便你在调整前检查结果。

哪些 Mac 版 Excel 版本支持此方法?

使用 Microsoft 365 版 Mac 版 Excel、Mac 版 Excel 2024 或 Mac 版 Excel 2021。Microsoft 的文档将这些版本列为 SEQUENCE 和 XLOOKUP 均支持,其 Mac 版 Excel 2021 功能指南明确记录了动态数组。SEQUENCE 函数、XLOOKUP 函数、Mac 版 Excel 2021 的新增功能。

从其他教程复制公式时,函数可用性很重要。例如,Microsoft 将 VSTACK 列为 Microsoft 365 和 Mac 版 Excel 2024 支持,但未列入 Excel 2021。此处的方法避免了该依赖。Microsoft 还明确指出 XLOOKUP 在 Excel 2016 和 Excel 2019 中不可用,因此这些版本无法直接运行下面的公式。VSTACK 函数、XLOOKUP 函数。

设置美术资产数量矩阵

在空白工作表上,在 A1:C4 中输入以下合成数据。第一列存放资产标签,标题行存放格式,其余单元格存放数量。

资产 小幅 大幅
Arc Tile 2 0
Dot Tile 1 0
Wave Tile 2 1

本例中,每个数量必须为大于或等于零的整数。不需要项目时请显式输入零。继续之前请解决空白、文本数量、负值、分数和单元格错误。这些公式假设计数有效;它们不进行验证或舍入。

预期输出包含六个项目行:两个小幅 Arc Tile、一个小幅 Dot Tile、两个小幅 Wave Tile 和一个大幅 Wave Tile。重复标签是有意的,因为每行代表一个项目。这些公式创建工作表记录;它们不会创建或复制美术文件。

将矩阵展平为可核对的辅助列表

留空 D 列。在 E1:I1 输入标题 Position、Asset、Format、Quantity 和 End item。在 E2:E7 按顺序输入 1 到 6。共有六个辅助行,因为三个资产乘以两个格式得到六种组合。

辅助列表先读取每个源行的列再向下移动:Arc Tile 小幅、Arc Tile 大幅,然后是两个 Dot Tile 组合,最后是两个 Wave Tile 组合。保持此顺序一致至关重要。

检索每个组合的标签和数量

在 F2 中输入此公式:

=INDEX($A$2:$A$4,INT((E2-1)/2)+1)

在 G2 中输入此公式:

=INDEX($B$1:$C$1,1,MOD(E2-1,2)+1)

在 H2 中输入此公式:

=INDEX($B$2:$C$4,INT((E2-1)/2)+1,MOD(E2-1,2)+1)

将 F2:H2 向下复制到第七行。这些是普通单元格公式,每个单元格产生一个结果。INDEX 在指定行和列检索值。此处,INT 使源行每两个位置前进一次,而 MOD 使源列在两个格式之间交替。INDEX 函数、INT 函数、MOD 函数。

计算每个组合的最终项目编号

在 I2 中输入以下公式并向下复制到 I7:

=SUM($H$2:H2)

固定的起始引用和移动的结束引用创建了累计总计。SUM 将从第一个辅助行到当前行的数量相加。SUM 函数。

你完成的辅助列表应如下所示:

Position Asset Format Quantity End item
1 Arc Tile Small 2 2
2 Arc Tile Large 0 2
3 Dot Tile Small 1 3
4 Dot Tile Large 0 3
5 Wave Tile Small 2 5
6 Wave Tile Large 1 6

将 End item 视为边界。第一个组合占据项目编号 1 和 2。第三个组合占据项目编号 3。第五个占据 4 和 5,第六个占据 6。数量为零时边界不前移,因此不分配项目编号。

生成每项对应一行输出

在 K1 输入 Asset;在 L1 输入 Format。保持两个标题下方的单元格为空。将输出放在 Excel 表格之外的普通工作表单元格中:Microsoft 文档说明溢出数组公式在表格内不受支持。动态数组公式和溢出数组行为。

在 K2 中输入此完整公式:

=IF(SUM($H$2:$H$7)=0,"",XLOOKUP(SEQUENCE(SUM($H$2:$H$7)),$I$2:$I$7,$F$2:$F$7,,1,1))

在 L2 中输入此完整公式:

=IF(SUM($H$2:$H$7)=0,"",XLOOKUP(SEQUENCE(SUM($H$2:$H$7)),$I$2:$I$7,$G$2:$G$7,,1,1))

按 Return 确认每个公式。不要将这两个公式向下复制:它们的数组结果会自动填充相邻行。Microsoft 将这种自动扩展称为溢出。动态数组公式和溢出数组行为。

SEQUENCE 生成从 1 到总数量的项目编号。对于每个编号,XLOOKUP 在累计边界中搜索。其最后两个参数指定精确匹配或下一个较大值,从第一个到最后一个搜索。该搜索方向在零值产生重复总计时保留首个匹配边界。SEQUENCE 函数、XLOOKUP 函数。

外层 IF 在总计为零时返回空文本。此时两个锚点单元格显示为空白,且无项目记录可用。这是有意的零总计条件,使用 IF 在两个结果间选择。IF 函数。

对于提供的矩阵,K1:L7 应包含:

Asset Format
Arc Tile Small
Arc Tile Small
Dot Tile Small
Wave Tile Small
Wave Tile Small
Wave Tile Large

两个输出列使用相同的生成项目编号和边界范围。仅返回范围不同:F 列提供资产标签,G 列提供格式。编辑公式时请保持这些查找输入同步。

在扩展源数据前检查结果

使用示例数据进行三项检查:

  1. 对比总计:=SUM(B2:C4) 和 =SUM(H2:H7) 必须均返回 6。
  2. 对比组合:输出必须包含四个非零组合及其声明的重复计数。
  3. 将 B2 从 2 改为 3:预期输出变为七行,包含三个 Arc Tile Small 条目。之后恢复为 2。

第一项检查可发现展平过程中的遗漏或重复数量。第二项可发现仅靠总计无法揭示的标签错位。第三项检查变更是否通过辅助列表流向输出。

有意添加更多资产或格式

修改 B2:C4 内的数量使用现有设置。增加矩阵维度需要更改引用和辅助列表长度。

为完整示例,将源扩展为四个资产和三个格式,位于 A1:D5。将辅助区域移至或保留在 E:I,在 E2:E13 输入 1 到 12,并用以下公式替换 F2:H2 中的公式:

=INDEX($A$2:$A$5,INT((E2-1)/3)+1)
=INDEX($B$1:$D$1,1,MOD(E2-1,3)+1)
=INDEX($B$2:$D$5,INT((E2-1)/3)+1,MOD(E2-1,3)+1)

将这些公式向下复制到第十三行,并将 I 列中的累计总计公式扩展到同一行。在两个输出公式中,将所有以第七行为结尾的辅助范围替换为第十三行。除数和取模基数现在为三,因为每个资产有三个格式。更改后重新核对源总计和各个组合。

解决输出不完整或被阻止的问题

如果 Excel 显示 #SPILL!,检查预期输出区域是否有现有条目或合并单元格,并确认公式位于 Excel 表格之外。超出工作表边缘的结果也无法溢出。Microsoft 记录了这些条件。如何更正 #SPILL! 错误。

如果输出行太少,在更改查找逻辑前先检查数量。Microsoft 指出 SUM 忽略引用区域中的文本。因此存储为文本的数量可能被总计遗漏。更正源值并重复总计检查。SUM 函数。

如果总计正确但标签错误,逐单元格将辅助列表与矩阵对比。保持每个辅助行的资产、格式、数量和累计边界在一起。不要单独重新排列某个辅助列。

总计和组合一致后,使用两个输出列作为项目列表。保留矩阵和辅助计算,以便后续数量变更可追溯到重复行。

来源