Excel如何用单个公式生成名称重复、值随月份变化的重复模式?
单个公式实现项目名称重复+月份值匹配的动态结果
直接用LET函数就能把所有步骤封装成单个公式,完美适配名称、月份行数/列数变动的场景,以下是具体实现:
核心公式(适用于支持动态数组的Excel版本)
=LET( names, A2:INDEX(A:A, COUNTA(A:A)), month_count, COUNTA(B1:1), value_area, B2:INDEX(M:M, COUNTA(A:A)), repeated_names, TOCOL(INDEX(names, SEQUENCE(ROWS(names), month_count, 1, 0)), 2), flattened_values, TOCOL(value_area, 2), HSTACK(repeated_names, flattened_values) )
公式拆解
names: 动态提取非空的项目名称列,自动跟随实际行数变化month_count: 统计月份表头的列数,适配月份数量变动value_area: 匹配名称行数和月份列数的数据区域,自动调整范围repeated_names: 通过SEQUENCE生成重复索引,让每个项目名称对应重复month_count次,再转成单列flattened_values: 把多列的月份值按行平铺成单列,和重复的名称一一对应HSTACK: 将重复的名称列和平铺的值列合并成最终结果
旧版Excel兼容方案(无TOCOL函数)
如果你的Excel不支持动态数组,把TOCOL部分替换成索引遍历即可:
=LET( names, A2:INDEX(A:A, COUNTA(A:A)), month_count, COUNTA(B1:1), total_rows, ROWS(names)*month_count, repeated_names, INDEX(names, INT((SEQUENCE(total_rows)-1)/month_count)+1), flattened_values, INDEX(B2:INDEX(M:M, COUNTA(A:A)), INT((SEQUENCE(total_rows)-1)/month_count)+1, MOD(SEQUENCE(total_rows)-1, month_count)+1), HSTACK(repeated_names, flattened_values) )
注意事项
- 把公式里的
A:A、B1:1、M:M替换成你实际的表头和数据列范围即可 - 所有范围都会自动跟随数据量变动,不用手动调整行/列数
内容的提问来源于stack exchange,提问作者Sherkh
相关产品推荐
相关产品推荐

