Excel单单元格数组公式实现多列动态聚合(含MAP等函数)
适配多列的动态数组聚合方案
针对你的需求,这里提供一个完全动态适配列数、无需硬编码列索引的公式方案,基于LET、BYROW、BYCOL等Office 365原生动态数组函数实现,单个单元格输入后自动溢出完整结果:
=LET( 源表, TAB, 分组列, CHOOSECOLS(源表, 1), 唯一分组值, UNIQUE(分组列), 待聚合列, CHOOSECOLS(源表, SEQUENCE(COLUMNS(源表)-1, 1, 2)), 聚合列标题, CHOOSECOLS(源表[#Headers], SEQUENCE(COLUMNS(源表)-1, 1, 2)), 分组聚合行, BYROW(唯一分组值, LAMBDA(当前分组, HSTACK( 当前分组, BYCOL(待聚合列, LAMBDA(当前列, TEXTJOIN(" / ", TRUE, UNIQUE(FILTER(当前列, 分组列=当前分组))) )) ) )), VSTACK(HSTACK(CHOOSECOLS(源表[#Headers], 1), 聚合列标题), 分组聚合行) )
方案说明
动态适配列数:
- 通过
SEQUENCE(COLUMNS(源表)-1,1,2)自动获取从第2列到最后一列的索引,无需手动指定列位置,列名或列数变更时公式自动适配 - 自动提取待聚合列的表头,最终结果保留完整表头结构
- 通过
核心逻辑:
- 先提取分组列(首列)的唯一值作为分组依据
- 对每个唯一分组值,遍历所有待聚合列:筛选该分组下的列值→去重→用
TEXTJOIN以/分隔拼接 - 所有聚合结果通过
HSTACK横向拼接,与分组值组成一行,最终通过VSTACK拼接表头和所有聚合行
细节优化:
- 若某分组下某列无有效数据,
TEXTJOIN会返回空文本,符合预期 - 如需排除空值,可将
FILTER(当前列, 分组列=当前分组)修改为FILTER(当前列, (分组列=当前分组)*(当前列<>""))
- 若某分组下某列无有效数据,
版本兼容性
你的Office 365版本(2406 Build 16.0.17726.20206)完全支持公式中用到的LET、BYROW、BYCOL、UNIQUE、TEXTJOIN等函数,无需依赖后期推出的GROUPBY函数。
内容的提问来源于stack exchange,提问作者RtMt
相关产品推荐
相关产品推荐

