ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 13980|回复: 9

[求助] Power Query中根据条件替换

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-6-19 14:36 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原始数据替换后
S-A-M3A
S-A-M2A
S-A-M1A
A-M2A
B-M3B
B-3-M3B-3
如图,简单说就是开头有S-的去掉S-,结尾有-M*的去掉-M*,其他部分不变。
Excel里替换很容易,但是Power Query里好像不支持通配符,不知道该怎么办了。
我尝试按分隔符提取S-以后的,结果凡是开头非S-的都变成空值了……

替换S-与-M.zip

6.32 KB, 下载次数: 35

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-19 14:38 | 显示全部楼层
还有A和B只是例子,实际要提取的字符长度不固定,中间也可能包含其他的"-"符号,只是要去除开头和结尾的那两处

TA的精华主题

TA的得分主题

发表于 2018-6-19 16:27 | 显示全部楼层
  1. let
  2.     Source = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
  3.     a = Table.TransformColumnTypes(Source,{{"原始数据", type text}}),
  4.     b = Table.AddColumn(a,"替换结果",each Text.Combine([x=Text.Split([原始数据],"-"),y=List.Transform({0..List.Count(x)-1},each if (x{_}="S" and _=0) or (Text.Start(x{_},1)="M" and _=List.Count(x)-1) then null else x{_})][y],"-"))
  5. in
  6.     b
复制代码

TA的精华主题

TA的得分主题

发表于 2018-6-19 16:32 | 显示全部楼层
本帖最后由 td1193272551 于 2018-6-19 16:33 编辑

参考处理步骤,应该可以解决你的问题

替换S-与-M(已处理).zip

15.47 KB, 下载次数: 107

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-19 17:02 | 显示全部楼层
td1193272551 发表于 2018-6-19 16:32
参考处理步骤,应该可以解决你的问题

谢谢,记下了,用这个做起来还是蛮复杂的,要是Excel也有这种记住处理步骤的功能就好了,也许单纯用连接导入数据,然后录个宏会更快吧

TA的精华主题

TA的得分主题

发表于 2018-6-21 16:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
shwangfeng 发表于 2018-6-19 17:02
谢谢,记下了,用这个做起来还是蛮复杂的,要是Excel也有这种记住处理步骤的功能就好了,也许单纯用连接 ...

录宏也可以解决,PQ的思路也不难

TA的精华主题

TA的得分主题

发表于 2018-6-22 18:23 | 显示全部楼层
shwangfeng 发表于 2018-6-19 17:02
谢谢,记下了,用这个做起来还是蛮复杂的,要是Excel也有这种记住处理步骤的功能就好了,也许单纯用连接 ...

这个问题用Power Query分步骤处理起来并不复杂,核心步骤其实只有2个,也不需要涉及太复杂的函数。相对于录制宏来说,Power Query的步骤管理非常简单,对代码的要求要低很多。



未命名图片.png

替换S-与-M.rar

14.18 KB, 下载次数: 74

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-1-26 11:40 | 显示全部楼层
从目前已知的数据源情况来看,要达到表中的结果,只需要Text.BetweenDelimiters就可以了。这个函数有5个参数,当启用最后两个参数,

“在找不到分隔符时”:
如果是倒着数那分隔符就会默认为字符串一开始的那个零宽位置
如果是顺着数那分隔符就会默认为字符串的结束处的那个零宽位置。

当然,数据源情况多样复杂时,这个就不适用了,比如S-或者-M不仅出现在首尾,中间也有出现。
这是个神奇的函数,容易绕晕,以下供参考,{0,1}中1表示倒着数,0表示索引,意思就是倒着数第一个“S-”,
第五参数未启用,默认是从第一个分隔符S-所在的位置,顺着数出现的第一个“-M”
  1. = Table.AddColumn(源,"结果",each Text.BetweenDelimiters([原始数据],"S-","-M",{0,1}))
复制代码
2019-01-26_113836.jpg





点评

这个函数刚好用于解决类似的问题  发表于 2019-1-26 23:12

评分

5

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-5-6 12:41 来自手机 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-20 10:57 , Processed in 0.052078 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表