Power Query替换½值时Excel公式不生效的解决方法求助
问题原因
Power Query使用独立的M语言语法,不支持直接套用Excel工作表函数(INDIRECT/ADDRESS等均为Excel工作表函数,无法在M语言中运行),你需要用M语言原生逻辑实现「匹配到½时,替换为当前行右侧列数值减0.5」的需求。
解决方案
单目标列替换
如果仅需要替换单列(例如Column1,匹配到½时取右侧Column2的值减0.5),直接使用以下代码即可:
= Table.ReplaceValue( #"Odstranjeni stolpci", "½", each [Column2] - 0.5, (oldValue, matchValue, newValFunc) => if oldValue = matchValue then newValFunc else oldValue, {"Column1"} )
多目标列批量替换
如果需要批量处理多列,每列匹配到½时都取自身右侧紧邻列的值减0.5,使用以下通用代码:
let 源 = #"Odstranjeni stolpci", // 按需修改此处的待处理列名列表 待处理列列表 = {"Column1", "Column2", "Column3"}, 批量替换结果 = List.Accumulate( 待处理列列表, 源, (临时表, 当前处理列) => let 当前列索引 = Table.ColumnIndex(临时表, 当前处理列), 右侧列名 = Table.ColumnNames(临时表){当前列索引 + 1}, 替换当前列 = Table.ReplaceValue( 临时表, "½", each Record.Field(_, 右侧列名) - 0.5, (x,y,z) => if x = y then z else x, {当前处理列} ) in 替换当前列 ) in 批量替换结果
注意事项
- 如果你表格中的
½是数值格式的分数而非文本,将代码中匹配条件的"½"修改为0.5即可 - 若右侧列可能存在空值/非数值导致报错,可以把
Record.Field(_, 右侧列名) - 0.5修改为try (Record.Field(_, 右侧列名) - 0.5) otherwise null,异常情况会返回空值避免运行中断
内容的提问来源于stack exchange,提问作者bonsajist357
相关产品推荐
相关产品推荐

