如何针对动态数组值批量应用Excel公式?
解决Excel中可变长度TALLY字段的批量展开问题
方法一:Excel 365/2021 动态数组公式(一键自动生成结果)
假设原始数据放在A2:F列(A=RO、B=ROID、C=ITEM、D=CONT、E=RP、F=TALLY),在空白单元格(比如H2)输入以下公式,结果会自动溢出到下方和右侧:
=LET( 原始数据, A2:INDEX(F:F,COUNTA(A:A)), 处理单行, LAMBDA(行, LET( RO, INDEX(行,1), ROID, INDEX(行,2), ITEM, INDEX(行,3), CONT, INDEX(行,4), RP, INDEX(行,5), TALLY, INDEX(行,6), 拆分TALLY项, TEXTSPLIT(TALLY, ", "), 拆分数量长度, TEXTSPLIT(拆分TALLY项, "/"), 数量, INDEX(拆分数量长度,0,1)*1, 长度, INDEX(拆分数量长度,0,2)*1, 明细收货量, 数量*长度, 明细ITEM, ITEM & " ." & 长度, 明细CONT, CONT, 汇总收货量, SUM(明细收货量), 汇总ITEM, ITEM, 汇总CONT, CONT & " 1", 明细行集合, HSTACK(明细收货量, RO, ROID, 明细ITEM, 明细CONT, RP), 汇总行, HSTACK(汇总收货量, RO, ROID, 汇总ITEM, 汇总CONT, RP), VSTACK(汇总行, 明细行集合) ) ), 各行结果集合, BYROW(原始数据, 处理单行), VSTACK({"Received_qty", "RO", "ROID", "ITEM", "CONT", "RP"}, DROP(REDUCE("", 各行结果集合, LAMBDA(累计结果, 当前行结果, VSTACK(累计结果, 当前行结果))), 1))
公式说明:
- 自动识别原始数据的最后一行,无需手动调整范围
- 对每行TALLY字段拆分出所有统计项,自动计算明细收货量和汇总收货量
- 按要求生成ITEM和CONT列的格式,汇总行放在对应明细行的最上方
方法二:Power Query(兼容Excel 2016及以上,适合大量数据)
如果你的Excel版本不支持动态数组函数,用Power Query可以更稳定地处理批量数据:
- 选中原始数据区域,点击数据选项卡 → 从表格/区域,导入Power Query编辑器
- 拆分TALLY到单行:选中TALLY列,点击拆分列 → 按分隔符,选择逗号,勾选「拆分到行」
- 拆分数量和长度:选中拆分后的TALLY列,点击拆分列 → 按分隔符,选择斜杠
/,拆分成两列,命名为「数量」「长度」并转为数值类型 - 计算收货量:添加列 → 自定义列,输入公式:
[数量] * [长度],命名为Received_qty - 生成明细ITEM:添加列 → 自定义列,输入公式:
[ITEM] & " ." & Text.From([长度]),命名为ITEM_明细 - 生成汇总行:选中RO、ROID、ITEM、CONT、RP列,点击转换 → 分组依据,操作选择「所有行」,新列名设为「汇总数据」;展开汇总数据后,添加自定义列生成汇总收货量
List.Sum([汇总数据][Received_qty])、汇总ITEM[ITEM]、汇总CONT[CONT] & " 1" - 合并汇总与明细行:整理列顺序为
Received_qty「RO」「ROID」「ITEM」「CONT」「RP」,删除冗余列 - 点击关闭并上载,结果会自动导入到新工作表
内容的提问来源于stack exchange,提问作者heartmender
相关产品推荐
相关产品推荐

