要让 Excel 库存查找选择最具体的匹配规则,请先确定符合条件的行,再统计其中指定的字段。返回得分唯一最高行中的数量,并标记平分情况。本指南将演示如何在 Mac 版 Excel 中为合成艺术资产构建这一结果。

哪些 Mac 版 Excel 支持这种方法?

下面的公式使用 LET、XLOOKUP 和动态数组计算。Microsoft 文档说明,Microsoft 365 版 Excel(Mac 版)、Excel 2024(Mac 版)和 Excel 2021(Mac 版)均支持这些功能。Excel 2021(Mac 版)功能指南明确列出了 LET、XLOOKUP 和动态数组。Excel 2021(Mac 版)新增功能、LET 函数。

根据 Microsoft 明确的兼容性说明,Excel 2016 和 Excel 2019 不支持 XLOOKUP。要使用这个完整公式,请选用上述受支持的 Mac 版;更改公式的输入方式无法补上缺失的函数。本文后面的可选检查公式使用 FILTER,Microsoft 文档说明上述三个 Mac 版也支持该函数。XLOOKUP 函数、FILTER 函数。

在库存中,“最具体”应如何定义?

在本例中,你将使用三个属性查找分配给艺术资产的数量:资产标签、表面处理和尺寸。规则字段为空,表示该规则接受该属性的任意值。字段有值时,必须与相应输入相等。在符合条件的规则中,填写字段最多的规则优先。

这是针对本例明确制定的工作簿策略。Excel 不会根据你的描述自行推断该策略。在这里,所有属性的权重相同:指定资产和表面处理的规则,与指定资产和尺寸的规则具体程度相同。如果两者均匹配且得分最高,公式会报告平分。

单独使用普通的 XLOOKUP 无法确定这种优先级。Microsoft 文档说明,该函数默认返回第一个匹配项。反向搜索只会改变搜索起点,不会按具体程度为规则排序。因此,公式会先计算获胜行,再使用 XLOOKUP 获取该行的数量。XLOOKUP 函数。

设置合成艺术资产规则

在空白工作表中,在 A1:D6 输入以下标题和值。下表中的空单元格在 Excel 中也必须保持为空。所有标签和数量仅供示例。

工作表行 A:资产 B:表面处理 C:尺寸 D:数量
2 30
3 Tile 18
4 Tile Matte 12
5 Tile Matte Small 7
6 Disc Large 10

第 2 行的规则是有意设置的默认规则:它未指定任何属性,具体程度得分为零。第 3 行指定一个属性,第 4 行指定两个,第 5 行指定三个。这些数量是互为替代的分配数量,因此查找会返回一个值,不会把默认数量和例外规则的数量相加。

在 H1:K1 输入标题 Asset、Finish、Size 和 Result。然后在 H2 输入 Tile,在 I2 输入 Matte,在 J2 输入 Small。三个输入属性都要填写。在此设计中,空白仅在规则表中表示不受限制的条件;输入不完整时会显示提示。

使用数值作为数量,必要时也应使用数值零。范围仅限于实际规则所在的行。若将范围扩展到未使用的空白行,按照此匹配策略,这些行会成为额外的全空规则。

输入用于选择获胜规则的公式

选择 K2,输入以下完整公式,然后按 Return。公式使用上文定义的规则表和输入单元格。公式内部会执行动态数组计算,最终结果占用一个单元格。Microsoft 文档说明,动态数组公式可以像普通公式一样输入,无需使用旧式数组公式快捷键。动态数组公式和溢出数组行为。

=IF(OR(H2="",I2="",J2=""),"Complete the asset details",
  LET(
    asset,$A$2:$A$6,
    finish,$B$2:$B$6,
    size,$C$2:$C$6,
    qty,$D$2:$D$6,
    eligible,
      (((asset="")+(asset=H2))>0)*
      (((finish="")+(finish=I2))>0)*
      (((size="")+(size=J2))>0),
    specificity,--(asset<>"")+--(finish<>"")+--(size<>""),
    best,MAX(IF(eligible,specificity,-1)),
    winner,eligible*(specificity=best),
    IF(SUM(eligible)=0,"No matching rule",
      IF(SUM(winner)>1,"Tie: review rules",
        IF(XLOOKUP(1,winner,ISNUMBER(qty),FALSE,0),
          XLOOKUP(1,winner,qty,"No matching rule",0),
          "Check rule quantity"
        )
      )
    )
  )
)

使用示例输入时,K2 应返回 7。有四条规则符合条件,但只有第 5 行的规则指定了全部三个属性。

符合条件的规则与具体程度如何判定

LET 为范围和中间结果分配了局部名称,便于检查选择过程。Microsoft 文档说明,这些名称的作用范围仅限于公式内部。LET 函数。

每个属性的符合条件表达式都会检查规则单元格是否为空,或者是否与输入相等。相加会合并这两种可能,比较运算则将结果转换为逻辑测试。将三个属性测试相乘,就要求所有条件都成立。Microsoft 在 FILTER 示例中也使用相同的乘法模式,以数组条件组合 AND 逻辑。FILTER 函数。

specificity 会统计规则中已填写的字段。双重一元运算符会将每个非空测试转换为数字,从而得到 0 到 3 的得分。IF 会在排名计算中为不符合条件的行赋予负一分;随后,MAX 会找出符合条件的最高得分。负一分确保不符合条件的行低于得分为零的无限制默认规则。IF 函数、MAX 函数。

winner 只会标记符合条件且得分最高的行。公式会先检查是否没有匹配项或有多个获胜项,再返回数量。最后的数值检查会有意拒绝空白数量或以文本形式存储的数字。Microsoft 文档说明,ISNUMBER 不会将文本数字转换为数值。数值零仍是有效结果。IS 函数。

扩展工作表前先检查结果

将 H2:J2 更改为下列各组合。以下结果是根据示例规则推导出的预期值,并非实测库存数据。

资产 表面处理 尺寸 预期结果 获胜条件
Tile Matte Small 7 三个字段均已指定
Tile Matte Large 12 资产和表面处理
Tile Gloss Small 18 仅资产
Disc Gloss Large 10 资产和尺寸
Arc Matte Small 30 无限制默认规则

接下来,临时将第 6 行更改为资产 Tile、表面处理 Matte、尺寸 Small,数量设为 9。恢复原始输入后,结果应变为 平分:请检查规则:现在有两条规则都指定了全部三个匹配属性。即使数量相同,仍会判为平分,因为规则选择存在歧义。之后恢复原始的第 6 行。

要测试无匹配项分支,请临时将公式中的四个规则范围改为从第 3 行开始,以排除默认规则。输入 Arc、Matte、Small 后应返回 没有匹配的规则。完成后将范围恢复为从第 2 行开始。要测试数量检查,请在使用原始输入时清空 D5;预期会显示 请检查规则数量,然后恢复 7。

检查重叠规则并解决平分

若要查看当前输入符合条件的所有规则,请在 M2 输入以下独立公式。事先清空 M2:P6。输出会按原有顺序显示匹配的规则行,但不会为它们排序。

=FILTER(
  $A$2:$D$6,
  ((($A$2:$A$6="")+($A$2:$A$6=H2))>0)*
  ((($B$2:$B$6="")+($B$2:$B$6=I2))>0)*
  ((($C$2:$C$6="")+($C$2:$C$6=J2))>0),
  "No matching rule"
)

FILTER 会返回其布尔包含数组选中的行;最后一个参数会在没有符合条件的行时提供提示。如果源单元格为空,检查结果中可能会显示零;仍应将原规则表中的空单元格视为不受限制的条件。FILTER 函数。

检查公式会溢出到相邻单元格。请将其放在 Excel 表格之外,并保持输出区域为空。Microsoft 文档说明,表格中不支持溢出的数组公式;若输出区域已有内容,也可能出现 #SPILL!。动态数组公式和溢出数组行为。

可通过更正重复规则、收窄重叠规则或制定额外的优先级策略来解决平分。例如,此处“资产加表面处理”和“资产加尺寸”两类规则的得分都为二。除非明确编码这种偏好,否则工作簿无法判断哪个属性更重要。按照本文采用的策略,移动行的位置不应影响结果。

扩展查找,同时保持其含义不变

对于另一个资产,在 H3:J3 输入其三个属性,然后将 K2 复制到 K3。输入引用会随公式移动,而美元符号会固定规则范围。若要在第 6 行之后添加规则,请一致地扩展主公式中的全部四个范围,以及检查公式的两个维度。

将每个属性保存在单独的列中,并使用格式一致、不含多余空格的标签。此公式比较的是完整字段值;它不会在组合资产描述中搜索片段。数量检查会确认所选值为数值,因此任何其他库存要求(例如数量必须为非负整数)都应通过源数据加以落实。

这样,查找就形成了清晰的判定顺序:要求输入完整、找出符合条件的规则、确定具体程度最高的规则、排除平分情况,然后返回所选的数值数量。这样既能同时使用通用默认规则和详细例外规则,也能清楚显示尚未解决的选择。

来源