Power Query遍历列提取交替位置下公差值生成新列
实现方案(Power Query M代码)
核心思路
- 标记列中的有效数据(非空、纯数字)
- 给有效数据按顺序分配连续序号,按「上公差(奇数序号)、下公差(偶数序号)」的规则识别目标值
- 提取偶数序号的有效数据到新列
lower tol,其余行留空
完整M代码
假设你的数据列名为公差数据,导入的表名为Table1,代码如下:
let 源 = Excel.CurrentWorkbook(){[Name="Table1"]}[Content], // 添加行索引,用于后续定位 添加行索引 = Table.AddIndexColumn(源, "行索引", 1, 1, Int64.Type), // 标记当前行是否为有效数据:非空且为纯数字 标记有效数据 = Table.AddColumn(添加行索引, "是否有效", each not IsNull([公差数据]) and Value.Is([公差数据], type number)), // 给有效数据分配连续序号,无效数据留空 生成有效序号 = Table.AddColumn(标记有效数据, "有效序号", each if [是否有效] then List.PositionOf(Table.SelectRows(标记有效数据, each [是否有效])[行索引], [行索引]) + 1 else null ), // 提取偶数序号的有效数据作为下公差,其余行留空 生成lower_tol列 = Table.AddColumn(生成有效序号, "lower tol", each if [是否有效] and Number.Mod([有效序号], 2) = 0 then [公差数据] else null ), // 移除辅助列,保留原数据列和新生成的lower tol列 移除辅助列 = Table.RemoveColumns(生成lower_tol列, {"行索引", "是否有效", "有效序号"}) in 移除辅助列
代码说明
- 标记有效数据:用
IsNull判断空值,Value.Is判断是否为纯数字,确保只处理符合要求的数据 - 生成有效序号:筛选出所有有效行的索引列表,用
List.PositionOf找到当前行在有效列表中的位置,再加1得到从1开始的连续序号 - 生成lower tol列:用
Number.Mod判断有效序号是否为偶数,是则提取原数据值,否则留空
内容的提问来源于stack exchange,提问作者what's_in_a_name
相关产品推荐
相关产品推荐

