Excel VBA之函数篇-3.21简易数字提取法 用的好方便过正则
前景提要
最近有一些童鞋后台留言反馈,自己在日常的工作中需要做一些数据的提取,手工操作的话,是比较的麻烦并且浪费时间,既然VBA如何强大,是不是有一些比较好的方法呢?小编写了下,还真有一个比较简单的函数方法,可以用来进行简单的数据分离
为什么说是比较简单的分离呢?因为我们现在还处在函数篇,所有的运用都是依赖于函数进行的,所以我们的使用还是尽量使用函数来完成,虽然这样能够实现的功能比较的局限,但是大家能够更加清楚的了解到每个函数的意义和使用场景,这对于大家今后再面对更加复杂的结构的时候,才能够得心应手。
函数说明
今天要说的这个函数是val函数,三个字母非常的简单,也代表了他的运用场景比较的简单,并不适合用来处理特别复杂的数据结构,他主要适应于处理数字+文字,数字+英文,这样的组合的形式
只有一个要求,就是必须是数字在前的,其他的中文或者是英文字符都必须在后面的,这样他才能够将数字提取出来,我们来看看代码
这里依然假设是我们各个不同的网络商城的订单号,从下图中我们可以看出来,每个订单号的结构各不相同(我编的),我们现在希望将其中的数字提取出来,作为我们登记明细的唯一标注,那么我们要如何实现呢?

代码区
Sub test()
Dim i%
For i = 2 To 8
Cells(i, 7).Offset(0, 1) = Val(Cells(i, 7))
Next i
End Sub
来看看效果

有些成功的提取出了数字,但是有些并没有成功提取出来,为什么会这样呢?别急,听我下面慢慢讲解。
代码解析
为什么上面会出现一些完全不同的结果呢?我们来一个个的分析下,前面我们已经说过,val的使用场景是数字在前,中文或者英文是在后面的,val能够提取出来的就是中文或者英文前面的这些数字,
我们来看看例子,第二行66哈哈,数字+中文的组合,val应该能够将汉字前面的数字,即66提取出来,后面的结果也正好是这样的,再来看看第3个例子,66aa,数字+英文的组合,也正好能够提取出英文前面的数字
在看看其他的一些反常的情况,66aa66,数字+英文+数字的组合,val能提取出来哪部分呢?很明显,它只能够提取出来前面的一部分,即66,无法提取出来后面的一部分,我们用下面一行的例子来验证,val提取出来了G前面的667这三个数字,但是他没有办法提取出G后面的7
而最后的一个例子和最开始的一个例子,结构并不是数字开头的,所以val并不适用于这样的场景,自然提取出来的结果都是0
综合上面的几个不同的例子,大家是否能够理解val函数的使用场景和范围吗?