You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel 365动态数组:如何生成按测试分组的关联工单列表?

解决方案:纯Excel动态数组公式实现按测试分组关联工单

完全可以仅通过Excel 365的动态数组公式实现需求,以下针对两种常见展示方式给出具体公式:

前提说明

假设原始数据表A1#的结构为:

  • 第1列:工单编号/名称
  • 第2列及以后:该工单关联的测试项(一行可能对应多个测试)

你已通过公式生成的唯一测试列表(记为TestList),后续公式直接引用该区域即可。


方式1:每个测试对应一行,关联工单以逗号分隔

英文界面公式

=BYROW(TestList, LAMBDA(t, TEXTJOIN(", ", TRUE, FILTER(A1#[[#All],[Column1]], BYROW(EXCLUDE(A1#,,1), LAMBDA(row, ISNUMBER(XMATCH(t, row))))))))

中文界面公式

=BYROW(TestList, LAMBDA(t, TEXTJOIN(", ", TRUE, FILTER(A1#[[#All],[列1]], BYROW(排除(A1#,,1), LAMBDA(row, ISNUMBER(XMATCH(t, row))))))))

逻辑解释:

  1. BYROW(TestList, ...):遍历每个唯一测试项
  2. BYROW(EXCLUDE(A1#,,1), LAMBDA(row, ISNUMBER(XMATCH(t, row)))):检查原始数据的每一行(仅测试列)是否包含当前测试项,返回布尔值数组
  3. FILTER(...):筛选出所有包含该测试项的工单
  4. TEXTJOIN:将筛选出的工单合并为逗号分隔的字符串

方式2:每个工单单独一行,测试项重复对应(类似透视表展开)

英文界面公式

=LET(
    tests, TestList,
    combined, REDUCE("", tests, LAMBDA(acc, t, VSTACK(acc, HSTACK(t, FILTER(A1#[[#All],[Column1]], BYROW(EXCLUDE(A1#,,1), LAMBDA(row, ISNUMBER(XMATCH(t, row))))))))),
    DROP(combined, 1)
)

中文界面公式

=LET(
    测试列表, TestList,
    合并结果, REDUCE("", 测试列表, LAMBDA(acc, t, VSTACK(acc, HSTACK(t, FILTER(A1#[[#All],[列1]], BYROW(排除(A1#,,1), LAMBDA(row, ISNUMBER(XMATCH(t, row))))))))),
    DROP(合并结果, 1)
)

逻辑解释:

  1. LET:定义变量简化公式结构
  2. REDUCE:遍历每个测试项,将测试项与对应的工单列表垂直堆叠
  3. DROP(combined, 1):移除REDUCE初始生成的空行

关于你之前尝试的问题

你用XLOOKUP未成功是因为它默认仅返回第一个匹配项,无法获取所有关联工单;单独用BYROW未成功是缺少了FILTER批量提取匹配结果的环节,上述公式通过BYROW遍历测试项+FILTER提取全量工单的组合,完美解决分组需求。

内容的提问来源于stack exchange,提问作者MonkeyJLuffy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:42:44