
一个公式解决数据处理难题,从此告别手动调整与重复劳动。
你是不是还在为这样的数据整理任务头疼?左侧表格是简单的两列:A 列类别,B 列名称,而你需要把它变成右侧那样层级清晰、自动编号的清单。

传统的做法无非是加辅助列、写嵌套公式,或是手动复制粘贴——费时费力,还容易出错。今天就与你分享一个动态公式解决方案,不需要辅助列,不需要 VBA,一键生成带序号的层级数据,且能随数据变动实时更新。
一、先看成果,再学方法假设原始数据在 A3:B7 区域,像这样:
类别
名称
蔬菜
菜花
蔬菜
白菜
水果
香蕉
水果
橙子
调料
孜然粉
我们在任意空白单元格输入以下公式:
=LET(a, SORT(A3:B7, 1, 1),b, TAKE(a,,1),c, TAKE(a,,-1),UNIQUE(TOCOL(HSTACK(MATCH(b, UNIQUE(b), 0) & b, c))))
按下回车,立即得到:
1蔬菜菜花白菜2水果香蕉橙子3调料孜然粉
类别自动编号,名称层级展开,顺序规整,直接可用。
二、逐层拆解,看懂公式每一步的智慧步骤 1:排序整理
a, SORT(A3:B7, 1, 1)
利用 SORT 函数,将原始数据按第一列(类别)升序排列。这一步保证了同类别数据相邻,为后续生成序号和结构打下基础。
步骤 2:提取两列
b, TAKE(a,,1) // 提取类别列c, TAKE(a,,-1)// 提取名称列
TAKE 函数在这里发挥了灵活取列的作用,避免使用 INDEX 或整列引用,提高可读性与计算效率。
步骤 3:生成类别序号
MATCH(b, UNIQUE(b), 0)
这是核心步骤之一。先通过 UNIQUE(b) 得到不重复的类别列表,再用 MATCH 查找每个类别在该列表中的位置。结果是一个与 b 同长的序号数组:{1;1;2;2;3;…}。
步骤 4:拼接“序号+类别”
MATCH(b, UNIQUE(b), 0) & b
将上一步的序号与类别连接,得到诸如“1蔬菜”“1蔬菜”“2水果”等带序号类别的数组。
步骤 5:水平合并,构造两列数据
HSTACK(上一步结果, c)
用 HSTACK 将“带序号类别”数组与“名称”数组水平并排,形成新表:
1蔬菜菜花1蔬菜白菜2水果香蕉…
步骤 6:转成一列,实现层级交替
TOCOL(...)
TOCOL 将上一步的两列数据按行优先顺序转为单列,此时结构已接近目标,但每个类别标题仍有重复。
步骤 7:去重,去掉重复的类别行
UNIQUE(...)
UNIQUE 函数会自动移除相邻的重复值,于是“1蔬菜”只保留第一个,后面的重复标题被剔除,最终形成层级清晰、无重复标题的清单。
三、核心函数深度掌握 LET 函数 定义名称并在公式内部使用,可大幅提升公式可读性与计算效率。是编写复杂公式的“脚手架”。 SORT 函数 动态排序,支持多列排序条件,是数据预处理利器。 TAKE 函数 可灵活取区域的前/后若干行或列,尤其适合与动态数组配合。 UNIQUE 函数 提取唯一值或去除重复项,支持按行、按列去重,是数据清洗常用函数。 MATCH 函数 查找值在区域中的位置。此处巧妙用于生成连续序号。 HSTACK/VSTACK 函数 水平/垂直合并数组,替代旧版的 & 或 PHONETIC 拼接方式,更直观高效。 TOCOL/TOROW 函数 将多行多列数据转为单列或单行,是重构数据结构的强大工具。四、不止于此:更多实用变体与技巧变体1:在序号与类别之间加空格或点号
=LET(a, SORT(A3:B7,1,1),b, TAKE(a,,1),c, TAKE(a,,-1),UNIQUE(TOCOL(HSTACK(MATCH(b,UNIQUE(b),0)&". "&b, c))))
结果会变成“1. 蔬菜”这样的形式,更美观。
变体2:多层编号(如1.1、1.2)
如果名称也需要子序号,可结合 SEQUENCE 与 COUNTIF 生成二级编号,思路类似,此处不展开。
变体3:处理有空行的数据源
如果原始数据中间存在空行,可先用 FILTER 预处理:
=LET(source, FILTER(A3:B100, (A3:A100<>"")(B3:B100<>"")),a, SORT(source,1,1),...)五、应用场景扩展 制作产品目录:将产品大类与子类快速转为带编号的清单。 生成项目计划层级表:主任务与子任务一键展开。 整理调查问卷选项:题目与选项层级化展示。 数据看板前的预处理:为后续的数据透视表或图表提供规范数据源。六、优势总结 全动态:源数据增减或修改,结果即时自动更新。 无需辅助列:一个单元格完成所有计算,表格更简洁。 兼容性好:适用于 Excel 365、Excel 2021 及 WPS 最新版本。 逻辑清晰:公式虽强,但每一步都可拆解理解,便于自定义修改。七、注意事项 确保 Excel 版本支持动态数组函数(Office 365 或 2021 以上)。 数据区域宜规整连续,若有空行可先用 FILTER 清理。 若类别名称本身含数字,建议用分隔符(如空格、点)区分序号与内容,避免混淆。八、测试题(单选) 在这个公式中,MATCH(b, UNIQUE(b), 0) 的主要作用是什么? A. 查找类别在总表中的行号 B. 为每个类别生成连续序号 C. 判断类别是否重复 D. 对类别进行排序 如果想在序号和类别之间添加一个分隔符“-”,应该修改公式的哪一部分? A. 将 SORT(A3:B7,1,1) 改为 SORT(A3:B7,1,1, "-") B. 将 MATCH(b, UNIQUE(b), 0) & b 改为 MATCH(b, UNIQUE(b), 0) & "-" & b C. 在 TOCOL 函数内添加分隔参数 D. 在 UNIQUE 函数后连接 "-" 如果原始数据区域中存在空行,为了避免错误,最好在 LET 函数内先用哪个函数处理? A. SORT B. FILTER C. UNIQUE D. TAKE
答案:
B B B(完)
冠达配资提示:文章来自网络,不代表本站观点。