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

如何基于唯一值将多行数据合并为单行多列(动态公式实现)

Excel动态合并对应唯一值的多行多列内容

场景1:将对应行的所有列内容合并为单个字符串

如果你希望把每个唯一值对应的所有行的BA:BG列内容合并成一个字符串(每行内容用逗号分隔,不同行用竖线区分),可以用以下动态数组公式:

=HSTACK(
    SORT(UNIQUE(AZ4:AZ), 1, FALSE),
    BYROW(
        SORT(UNIQUE(AZ4:AZ), 1, FALSE),
        LAMBDA(val, 
            TEXTJOIN(" | ", TRUE, 
                BYROW(
                    FILTER(BA4:BG, AZ4:AZ=val),
                    LAMBDA(row, TEXTJOIN(", ", TRUE, row))
                )
            )
        )
    )
)

公式拆解:

  • SORT(UNIQUE(AZ4:AZ), 1, FALSE):你的原公式,提取AZ列降序排列的唯一值
  • HSTACK:将唯一值列与合并内容列横向拼接成完整数组
  • BYROW(...LAMBDA(val, ...)):逐个遍历每个唯一值,处理对应行的合并逻辑
  • FILTER(BA4:BG, AZ4:AZ=val):筛选出AZ列等于当前唯一值的所有行的BA-BG区域
  • BYROW(...LAMBDA(row, ...)):把筛选出的每一行的多列内容用逗号分隔合并为单条字符串
  • TEXTJOIN(" | ", TRUE, ...):把所有行的合并字符串用竖线分隔,最终合并为一行内容

场景2:将每列的对应值单独合并(保留列结构)

如果需要保留BA-BG的列结构,每个列下合并对应唯一值的所有行数据,可以用LET函数简化公式逻辑:

=LET(
    unique_vals, SORT(UNIQUE(AZ4:AZ), 1, FALSE),
    target_cols, BA4:BG,
    HSTACK(
        unique_vals,
        BYCOL(
            target_cols,
            LAMBDA(col, 
                BYROW(
                    unique_vals,
                    LAMBDA(val, TEXTJOIN(", ", TRUE, FILTER(col, AZ4:AZ=val)))
                )
            )
        )
    )
)

公式拆解:

  • LET:定义变量unique_vals(唯一值数组)和target_cols(待合并的列区域),让公式更易读
  • BYCOL(...LAMBDA(col, ...)):逐个遍历BA-BG的每一列
  • BYROW(...LAMBDA(val, ...)):对每个列,遍历所有唯一值,筛选并合并对应行的该列数据
  • HSTACK:将唯一值列与所有合并后的列拼接成完整的动态数组

注意事项:

  1. 适用版本:需要Excel 365、Excel 2021或更高版本(支持动态数组、LAMBDA系列函数)
  2. 自定义分隔符:修改TEXTJOIN的第一个参数即可调整分隔符(比如把", "换成";"," | "换成"\n"实现换行)
  3. 空值处理:TEXTJOIN的第三个参数TRUE会自动忽略空值,改为FALSE则保留空值位置

内容的提问来源于stack exchange,提问作者Ranjan Kumar Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:38:21