如何调整Excel LAMBDA公式以输出多列价格及相关数据
调整Excel LAMBDA公式实现多维度数据转置
原LAMBDA公式仅支持SKU与FL列的转换,现针对包含SKU、DESC、DISCOUNT、UNITC/UNITP/UNITU、FLC/FLP/FLU、NETC/NETP/NETU的源表,调整公式实现每行对应一个UNIT维度(C/P/U),输出包含SKU、Description、UNIT、FL、DISCOUNT、NET的目标格式。
调整后的完整LAMBDA公式
=LAMBDA(source_data, LET( // 提取除表头外的所有数据行 data, INDEX(source_data, 2, 0):INDEX(source_data, ROWS(source_data), 0), // 拆分源表各字段列 SKU, INDEX(data, , 1), DESC, INDEX(data, , 2), DISCOUNT, INDEX(data, , 3), UNIT_GROUP, INDEX(data, , 4):INDEX(data, , 6), FL_GROUP, INDEX(data, , 7):INDEX(data, , 9), NET_GROUP, INDEX(data, , 10):INDEX(data, , 12), // 定义UNIT维度的对应标签 unit_tags, {"C", "P", "U"}, // 生成扩展后的二维数组 expanded_table, MAKEARRAY(ROWS(data)*3, 6, LAMBDA(r,c, LET( // 计算当前行对应的源数据行号 original_row, CEILING(r/3, 1), // 计算当前行对应的UNIT维度索引 unit_index, MOD(r-1, 3)+1, // 根据列号返回对应字段值 SWITCH(c, 1, INDEX(SKU, original_row), 2, INDEX(DESC, original_row), 3, INDEX(unit_tags, unit_index), 4, INDEX(FL_GROUP, original_row, unit_index), 5, INDEX(DISCOUNT, original_row), 6, INDEX(NET_GROUP, original_row, unit_index) ) ) ) ), // 拼接表头与扩展数据 headers, {"SKU", "Description", "UNIT", "FL", "DISCOUNT", "NET"}, VSTACK(headers, expanded_table) ) )
公式说明
- 参数定义:
source_data为输入参数,需传入包含所有表头和数据的源表完整区域(如A1:L10)。 - 数据拆分:将源表拆分为单个字段列(SKU、DESC、DISCOUNT)和三组多列字段(UNIT、FL、NET各3列)。
- 维度扩展:通过
MAKEARRAY生成原数据行数3倍的新表,每个源数据行对应C/P/U三个UNIT维度行。 - 字段映射:根据行号计算对应源数据行和UNIT维度,通过
SWITCH按列号映射目标表的各个字段。 - 表头拼接:用
VSTACK将目标表头与扩展数据合并,输出完整结构化结果。
使用方式
将公式命名为自定义函数(如TransformUnitData),在任意单元格输入:
=TransformUnitData(A1:L10)
其中A1:L10替换为你的源表实际范围。
内容的提问来源于stack exchange,提问作者Andy L
相关产品推荐
相关产品推荐

