网站首页 > 技术文章 正文
隐藏在一段文字中的数值,我让你无所遁形(Excel7580)
Excel我帮您
经常会在Q群或者维护公众号留言的时候,有人会问,怎么在一段文字中提取里面的数值,类似下面这样的。
可以看到,数字存在一段文字中也分几种情况:在文字前、在文字中、在文字后,还有可能是负数。
那我们用什么方式可以分别提取出来呢。
1、 处理在文字前面的数字(示例是以正数为准,负数要换个方式)。
公式解析:
1.1 9E+307,这是一个很大的数值,传说中的,可以在Excel中处理的最大数值,即9*10^307,太太太太大了;
1.2 ROW($1:$97),其实就是生成1,2,3….97这样的序号,表示一个数字有很多位数,真实情况97直接换成10或者20就足够了;
1.3 LEFT,是从左到右,配合ROW函数,分别提取1位,2位,…97位数出来;
1.4 --,强制转换符,将用LEFT提取出来的数值(有可能不是数值),因为是文本型,强制转换成数值型;
1.5 LOOKUP在这里的用法是进行模糊查询,依次查找1位数值,2位数值,直到不是数字为止;所以用了9E307这个最大的数来进行查询,查询最接近他的那个值。
2、 处理在文字后面的数值(示例是正数)。
公式解析:其他意义和上面一样,只是将LEFT换成了RIGHT,这个是右截取函数。
3、 处理在文字中间的数字(以正数为例)
当然,以上这个公式,也同样适用于前两种情况(即左边有数值或者右边有数值)。
公式解析:
3.1 MID是中截取函数,就是从哪个位置开始,截取多少位字符的意思;
3.2 FIND是查找函数,是在某字符串中查找某字符的开始位置;
3.3 ROW($1:$10)-1,是固定生成0-9这10个数字;
3.4 1/17,这个是一个无限小数,在这小数里面,一定会包含0-9这10个数字的,不要问为什么要这样写,这只是前人试验出来的,大家照着用就是了。 1/19好像也有这个功效;再将生成的数值和前面那段文件字连接到一起,这段文字中就确保了一定会有0-9这10个数字,为FIND查找提供了依据;
3.5 整个理解起来就是,先查找第一个数字出现的位置,再用MID进行依次截取,再用LOOKUP进行判断,哪个最大,就取哪个。
4、 提取数值的VBA方式
下面,我要放大招了,能同时提取在前、在后、在中和负数的方法了。。
在Excel界面中,按快捷键Alt+F11,进入VBE的编器,并右键新增加模块,同时录入以下代码:
为了方便大家复制,我重新复制一下完整的代码如下:
Public Function getNumber(rg As Range) As Double
Application.Volatile
With CreateObject("VBSCRIPT.REGEXP")
.Pattern = "\-*\d+(\.\d+)*"
.Global = True
If .test(rg.Value) Then
getNumber = .Execute(rg.Value)(0)
End If
End With
End Function
返回到工作表中,我们输入如下公式:
今天说的这些,您学会了么。不会的,欢迎在下方留言!!
猜你喜欢
- 2024-09-18 七牛对象存储(七牛对象存储价格)
- 2024-09-18 PHP 10个最具影响力的新功能(php 10个最具影响力的新功能有哪些)
- 2024-09-18 数字大写转换烦,内置格式多缺陷, VBA函数来解难
- 2024-09-18 Excel VBA 新手学习笔记 字典基础导论
- 2024-09-18 面试常见的四种算法思想,全在这里了
- 2024-09-18 分享自定义函数,根据单元格格式统计数据,比宏表函数好用得多
- 2024-09-18 Spring Cloud Function 快速入门(spring cloud讲解)
- 2024-09-18 ExcelStat特殊函数计算(2):不完全伽马函数
- 2024-09-18 你加班 1 小时做表格,我用VBA只需30秒钟,直接粘贴拿去用吧
- 2024-09-18 设计模式之装饰器模式(装饰器模式实现)
- 1512℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 556℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 505℃MySQL service启动脚本浅析(r12笔记第59天)
- 483℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 482℃启用MySQL查询缓存(mysql8.0查询缓存)
- 462℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 442℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 439℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)