在VBA自动化办公中,不管是提取表格里的数字、清洗不规则数据,还是批量处理文件名中的数值,Val 函数都能一招搞定
但如果单独使用Val,则只能受限于Val函数的机械规则:自左向右提取数字,遇非数字即止,比如
基础用法
示例1 数字开头
文本+数字(数字在前),则会提取到数字,并且遇到非数字就停止
Debug.Print Val("123abc456")Debug.Print Val("789.5元")Debug.Print Val("100-200")
结果显示:
示例2 文本开头
文本+数字(数字在后),则提取不到数字,返回0
Debug.Print Val("金额:789")Debug.Print Val("abc123")
结果显示:
示例3 识别正负号
带+/-符号的数字,能正常识别正负号
Debug.Print Val("-88.9")Debug.Print Val("+567")
结果显示:
示例4:
科学计数法 ,正常转换
Debug.Print Val("1.23e4")结果显示:
若想要突破 Val 函数只能提取字符串开头数字的限制,可以与 Left、Mid、InStr 等字符串处理函数打一套“组合拳”,例如:
场景一:提取字符串中间的数字
Dim str As Stringstr = "合同编号:20260314,合同名称:"Debug.Print Val(Mid(str, InStr(str, "2"), 8))
执行后结果:
场景二:处理中文小数点
str = "88。9元"Debug.Print Val(Replace(str, "。", "."))
执行后结果:
场景三:从带千分位分隔符的金额中提纯数据
str = "1,234,456.78 元"Debug.Print Val(Replace(str, ",", ""))
执行后结果:
以上分享的几个场景仅仅是抛砖引玉,希望能为大家提供一些思路上的启发
在实际工作中,大家遇到的数据格式多种多样。这时,可以尝试像搭积木一样,灵活组合Val、Mid、Replace等基础函数,来应对不同的提取需求
这种组合方法最大的优点在于,它主要依赖对字符串逻辑的理解,而非高深的编程技巧,非常适合刚开始接触VBA或数据处理的朋友们上手实践
我的公众号“努力鸭是黑色的”一直在不间断地分享免费的编程案例和实用技巧,如果您想提升自动化办公效率或提升自我,请关注公众号,解锁更多的编程知识