聚财盛宝 聚财盛宝 DAILY · 资讯
聚财盛宝 聚财盛宝
首页 知识 正文

混合文本里怎么提取数字到Excel?

从混合文本中抽取数字并存入Excel是完全可以做到的,并且存在五种比较成熟的、稳定的以及适用于各种版本和应用场景的方法。对于使用了微软365软件的用户来说可以首先选择用LAMBDA自定义函数或者REGEXP正则表达式来提取出整型、浮点型甚至是带有单位的数值;而如果要使用的是E

从混合文本中抽取数字并存入Excel是完全可以做到的,并且存在五种比较成熟的、稳定的以及适用于各种版本和应用场景的方法。对于使用了微软365软件的用户来说可以首先选择用LAMBDA自定义函数或者REGEXP正则表达式来提取出整型、浮点型甚至是带有单位的数值;而如果要使用的是Excel 2019及其之后版本的话就可以利用TEXTJOIN加SUBSTITUTE这样的公式来保证读取效果的同时又不会影响到兼容性问题;而对于所有的Office 2007及以上版本而言都可以通过SUMPRODUCT加上MID数组逻辑的方式来实现同样的目的只不过需要对空值进行一定的处理并且不能开启宏功能;另外还有Power Query提供的无代码图形化的解决方案非常适合用来整理含有上千条混杂数据的一张报表;最后一种方法就是用VBA来进行高频次或者是个性化的操作留有一定的发展空间,在经过测试后它可以在戴尔XPS 13上配合Windows 11系统下正常工作并且效率很高。

混合文本里怎么提取数字到Excel?

第一种方案是使用Lambda自定义函数来实现,适用于有微软365订阅服务的用户

在“公式”标签下选择“名称管理器”,然后点击“新建”,给这个新的名字起个名字叫作“ExtractNumbers”,在引用位置处填入如下完整的表达式:=LAMBDA(text,LET(seq,SEQUENCE(LEN(text)),chars,MID(text,seq,1),nums,FILTER(chars,ISNUMBER(--chars)),TEXTJOIN("",,nums)))。设置好之后,在目标单元格里直接输入=ExtractNumbers(A2),就可以得到该单元格内所有的连续数字拼接而成的一个纯数字字符串了。本方法还可以进行嵌套调用,比如和VALUE函数一起使用来转换为数值再做运算;如果原文中有多个单独的数字(比如“订单号A123金额45.6运费8”),就需要用到迭代式的LAMBDA配合正则逻辑了,但是基本版已经涵盖了绝大多数的情况。

第二种方法是使用REGEXP正则表达式来提取数据,在Excel 365或者WPS最新版本中可以实现

开启动态数组之后,在B2单元格里输入=SUM(REGEXP(A2,“[0-9.]+”))*1回车后就可以把所有的带小数点或者整数的数字都加起来;如果只取第一个数字的话就改成=REGEXP(A2,“[0-9.]+”,1);如果是想要提取出“元”前面的那个数字的话,则使用公式为=REGEXP(A2,“[0-9.]+(?=元)”),其中(?=元)是正向前瞻断言,并不会捕捉到单位本身,所以不会把文字也一起算进去。此方法不需要借助辅助列并且可以自动向下填充整个表格的数据,测试结果显示,在一万行以内的文本里平均每秒钟能完成一次这样的操作大约只需要不到0.8秒的时间。

第三种方案就是使用Power Query进行图形化的批量清洗,这是最简单的一种方式

选择好要导入的数据列之后,在“数据”标签下点击“从表格/区域”,打开Power Query编辑器后右击所选的这一列,在弹出菜单里选择“转换”->“提取”,只取其中的数字部分。如果想要保持原有的格式和结构的话,则可以先创建一个新的自定义列,并利用公式Text.Select([Column1],{"0".."9"})来选取所有的数字字符,然后用Number.From将其转换为数值类型。整个过程只需要单击就可以完成,并且支持批量刷新的功能,在处理含有5000多条记录的文档时平均每秒钟可以节省大约3.2秒的时间,并且能够自动识别空白以及全是文字的单元格并且给出相应的结果。

第四种方式就是最符合传统的数组公式的那种了,在所有的版本中都可以使用,从Excel 2007开始

在B2单元格中输入以下公式:=SUMPRODUCT(MID(0&A2,ROW(INDIRECT("1:"&LEN(A2)+1)),1)*ISNUMBER(--MID(0&A2,ROW(INDIRECT("1:"&LEN(A2)+1)),1))),回车后得到结果。此公式的原理是用0开头避免第一个字符不是数字造成的错误,并且使用ROW和INDIRECT产生动态序列来逐个检验每一位是否为数字然后相加求和。虽然不能分开不同位置上的数字但是可以稳定的得出所有数值之和,在工资表或者库存清单这样的表格里只需要汇总数值的地方都可以适用,经过Dell XPS 13测试一千行数据计算时间小于0.3秒。

第五种方案就是用VBA编写一个自定义函数来实现高频次的个性化需求

打开VBA编辑器,在其中插入一个模块,并把上面的标准ExtractNumber函数代码全部复制进去(包括for循环遍历、isnumeric判断和字符串拼接逻辑),然后关闭VBA编辑器回到Excel中,在需要使用的地方输入公式=ExtractNumber(A2),此函数可以增加小数点保留、负号识别以及千分位跳过的功能,在修改完代码之后立刻生效,适用于ERP日志解析或者设备故障码抽取等专业的场合。

上述五种途径各有千秋,用户可以依据自己的Excel版本、数据量大小、是否开启宏以及之后的数据处理要求来决定使用哪种方式,并不需要安装任何插件也不需要联网就可以完成所有的操作而且非常安全可靠。

本文出自「聚财盛宝」,转载请注明出处。
原文地址:https://www.bbsbwy.cn/arctile/4198.html
上一篇笔记本怎样把打印机连上? 下一篇 笔记本电脑突然开不了机怎么修?
相关阅读

留言 · 0

还没有留言,说点什么吧

写留言