ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 批量替换之Table.ReplaceValue & Table.CombineColumns

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-5-31 14:29 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

    探讨案例:https://club.excelhome.net/forum ... ;page=1#pid10994623
image.png
本案例需求:对满足条件的仓库进行两个字段值的替换,即"库存数量","库存金额"的值随着条件的满足由"可用数量","可用金额"进行替换。
思路:1. 乍一看替换题,Table.ReplaceValue首当前锋,涉及 条件列、替换值列、被替换值列三类数据,该函数四参可用(x,y,z)=>3个形参进行3个字段控制,进而配合if函数做条件判断。
           2.实操发现:Table.ReplaceValue(源,each [判断字段],each [替换值字段],(x,y,z)=>if判断步骤,{"被替换值1","被替换值2"});五参控制2个被替换值需要分别对应2个字段取值,而三参引用替换值字段一次只能引用一个,如三参 each {[字段1],[字段2]}进行引用,返回到五参是list容器,还需要进一步去对应取值。
           3.分析到这里,可以采取:Table.ReplaceValue(源,each [判断字段],each [替换值字段],(x,y,z)=>if Text.Contains([判断字段],"广州采购中心") then y else x,{"被替换值1"}) 每次替换一个字段,嵌套两次完成;也可以外层List.Transform将五参两个字段作为List列表遍历返回结果。
Puzzle: 有没有什么思路,可以一次将两列值同时替换,实现效果?

进阶:1.本案例要求两列字段进行值替换,涉及判断条件列、两列替换值、两列被替换值,三类数据主键;
           2.两列被替换值只是部分数据需要=两列替换值,其余保持不变,即数据进行重组。
           3.替换=>重组,本质上原理相通,回想下Table.ReplaceValue单个字段替换,也是通过四参x,y,z的条件判断来决定返回值,then 和else也是进行了数据的重组。
           4.顺着这个思路:这3类主键数据,用哪个函数来进行组合呢?
           5.函数需求:可以同时控制这5列值,还要能对每个值逐一进行判断返回对应值。是不是感觉某个函数越走越近,有点熟悉的感觉。
           6.Table.CombineColumns跃然纸上,将5列值合并成单列list容器内,通过对列表{基数}进行定位取值判断,返回需要的值。
实操:step1:合并
            image.png
          step2:条件判断+数据重组
          image.png
          step3:列表转Table容器
          image.png
          step4:扩展Table容器成列
          image.png
到这一步,大体已经完成了满足条件2个字段值的替换。
有同学问:这张table的顺序都不是原来的位置,影响美观。

OK,必须安排到位:
          step5:列序恢复Table.ReorderColumns
          image.png
整个案例实操完成。

总结:1.Table.ReplaceValue对同类型值做五参,如多个科目的分数,可以批量同时进行if判断。
          2.涉及到不同类型值,只是单纯的取值,Table.RepalceValue连续嵌套可以实现,或者借助List.Accumulate迭代完成。
          3.Table.CombineColumns优点:可以将多列置于List列表下进行处理,类似Table.Group的单独分组之意;
                                                            可以通过列表的位置引用{基数}来完成获取每一个值,也可以借助List.Transform来遍历(思路瞬间开放)
                                                            可以合并列表内数据,按照特定样式进行输出,结合Combiner家族函数,强强联合(1+1>3)
                                                            .....论友们不断挖掘,不断创新。

结尾:加入EXCELHOME家族已经5年了,从一个if都不会的小白,到可以帮助论友处理一点能力技能范围内的问题,比较有一定的成就感。
          感谢家族无私奉献、乐意分享的每一个大佬,越EXCELHOME越来越强大!加油!



评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-6-1 15:44 | 显示全部楼层
太优秀了!

TA的精华主题

TA的得分主题

发表于 2022-6-26 15:18 | 显示全部楼层
来自菜鸟之一的感恩!
希望有越来越多的志同道合者探讨帮助像我们一样的菜鸟

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-6-27 11:07 | 显示全部楼层
xiaolege 发表于 2022-6-26 15:18
来自菜鸟之一的感恩!
希望有越来越多的志同道合者探讨帮助像我们一样的菜鸟

不经历风雨哪能见彩虹,感谢学习路上的每一位分享、帮助的人。

TA的精华主题

TA的得分主题

发表于 2022-7-5 14:26 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-7 06:40 , Processed in 0.044218 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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