Excel中追踪组内车型名称变更并生成最新名称分组列
多车型更名组最新名称解决方案
针对多车型多次更名的场景,我们可以通过Excel动态数组公式或Power Query两种方式实现自动生成每个车型组的最新名称。
一、Excel动态数组公式方案(适用于Excel 365/2021+)
直接在Naming_group列的第一个单元格输入以下公式,按回车后会自动填充整列:
=LET( startName, @Old_name, getLatest, LAMBDA(n, LET(next, XLOOKUP(n, Old_name, New_name, ""), IF(next="", n, getLatest(next)))), getLatest(startName) )
公式逻辑说明
startName:以当前行的Old_name作为追踪起始点(如果是车型初始名称,可调整为IF(ISBLANK(@Old_name), @New_name, @Old_name)兼容空值场景)。getLatest递归函数:- 查找当前名称对应的
New_name(如果存在); - 若找到新名称,继续递归追踪下一次更名;
- 直到找不到对应的新名称,返回当前名称即为该车型组的最新名称。
- 查找当前名称对应的
二、Power Query方案(适合大数据量或需批量处理场景)
如果数据量较大,或需要更灵活的处理逻辑,可使用Power Query实现:
- 将数据加载到Power Query(选中数据表 → 「数据」选项卡 → 「从表格/范围」);
- 打开高级编辑器,替换为以下M代码(注意将
Table1替换为你的数据表名称):
let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], AllNames = List.Distinct(List.Combine({Source[Old_name], Source[New_name]})), GetLatestName = (name as text) as text => let NextName = try List.First(Source[New_name]{List.PositionOf(Source[Old_name], name)}) otherwise null, Result = if NextName = null then name else GetLatestName(NextName) in Result, NameMap = Table.FromList(AllNames, Splitter.SplitByNothing(), {"Name"}), NameMapWithLatest = Table.AddColumn(NameMap, "LatestName", each GetLatestName([Name])), Merged = Table.NestedJoin(Source, "Old_name", NameMapWithLatest, "Name", "Temp", JoinKind.LeftOuter), Merged2 = Table.AddColumn(Merged, "Naming_group", each [Temp]{0}[LatestName]), Cleaned = Table.RemoveColumns(Merged2, {"Temp"}) in Cleaned
- 点击「关闭并上载」,即可得到包含
Naming_group列的结果表。
注意事项
- 若存在循环更名(如A→B,B→A),递归逻辑会报错,需提前修正数据;
- Excel公式方案依赖LAMBDA函数,需确保你的Excel版本支持该功能。
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

