分享

ExcelVBA基础课程(3):分隔符

 L罗乐 2017-10-09

各位看官国庆、中秋双节玩的怎么样呢?是宅在家里睡大觉,还是堵在高速公路上,还是加班呢?

讲完了数据类型,本以为可以将循环了,但是二掌柜说:还得再等等,应该把“分隔符”作为单独的一节进行详细的讲解。

什么是分隔符,很简单的理解就是一个可以将某一字符串切割成若干份的符号,例如“12345”,这里逗号“”就是分隔符,又例如“2017-7-7”,这里“-”就是分隔符,当然了,这种分隔符是可见的,还有一种分隔符是不可见的,例如:“12345”,每一个数字之间也有分隔符——“位”,不可见的分隔符还有换行符、制表符等等。

大概了解了分隔符之后,这里需要重点讲一下split函数,这个函数的用法就是将一组字符用指定的分隔符进行分割,分割出来的若干份数据以数组的形式保存下来。具体用法如下:

可见分隔符

dim str as string

str='a,b,c,d,e,f,g'

dim tmp() as string

tmp()=split(str, ',')

上述代码的意思为:定义一个名为str的字符串:“a,b,c,d,e,f,g”,然后又定义一个字符串数组tmp(),然后将str按照“,”进行分割成若干份(中文的逗号、句号和英文的不同),每一份儿的名称为tmp(i),在这里i最小值是0,切记,不是1最大值是6,不是7,(即实际位数减去1)或者Ubound(tmp()),因此tmp(0)=“a”,tmp(1)=“b”,tmp(2)=“c”,tmp(3)=“d”,tmp(4)=“e”,tmp(5)=“f”,tmp(6)=“g”。

不可见分隔符

dim str as string

str=

'a123

b456

c789

d0'

dim tmp() as string

tmp()=split(str, chr(10))

上述代码的意思为:将str按照换行符(换行符的ascii码的值为10,用chr(10)表示)进行切割,然后将每一行的数据保存到数组中。同样,每一份儿的名称为tmp(i),在这里i最小值是0,切记,不是1最大值是3不是4这里又强调了一遍),或者Ubound(tmp()),因此tmp(0)=“a123”,tmp(1)=“b456”,tmp(2)=“c789”,tmp(3)=“d0”

以位数为分隔符

dim str as string

str='abcdefg'

tmp=mid(str,ij

函数变了,不是split了,而是MID,MID的用法非常简单,就是可以提取某一字符中的任意一位或者几位(总使用表格的小伙伴一般都能知道)。mid中的 表示的是从第 位开始提取字符串,mid中的 表示的是从 位开始共提取 位字符串。

按照上例来说:tmp=mid(str,36),表示的是将“abcdefg”的第3位“c”开始(切记,不是从d开始),提取后6位字符串,即“cdefg”,因为从第3位开始算,后6位已经超出str的位数7(abcdefg一共7位),所以只能提取到第5(7-3 1=5)位截止。

VBA中MID函数的用法同Excel公式中MID的用法一样。

如果是动态提取字符的话,VBA中的用法和Excel中的用法略有不同。

Excel中用SEARCH计算字符所在的位数,而VBA中用的是instr。但是计算字符个数的函数LEN()是一样的。

表格如下,比方说A列中获取的人名和手机号放在一起了,用的是英文的逗号进行分割,那么将人名提取到B列时我们使用的公式为:

B1=LEFT(A1,SEARCH(',', A1, 1) - 1)

即通过SEARCH函数找到“”所在的位数,再通过LEFT函数将A1中的人名提取出来。

如果上述用法在VBA中实现的话,那么就是range(“B1”)=left(range(“A1”)instr1range(“A1”),-1)。SEARCH函数的起始数放在最后,而instr函数的起始数1放在最前,SEARCH函数的查找的符号放在括号中的第一位,而instr函数查找的内容“,”放在最后一位。

见下图,我们添加一个按钮,然后将代码敲进去。

点击“按钮1”之后运算的结果是和Excel公式一样的,只不过有一点是不同的,就是你双击表格中的B2的时候,是没有公式的。

如果有下图的提示,说明代码中的双引号或者逗号是中文的,需要改成英文的,发生这种错误的原因就是你直接复制了我的代码,我是出于方便使用的是中文的括号,双引号和逗号,你们可不要偷懒哦。

继续我们的举例,提取A1中的手机号码,公式如下:

如果用VBA代码实现的话,那就是Range('C2') = Mid(Range('A1'), InStr(1, Range('A1'), ',') 1, Len(Range('A1'))),注意一下括号的个数。

在这里不得不提的一句就是,如果录制宏的话,代码又不一样了,但是运行的结果都是一样的,正所谓条条道路通罗马。

但是如果用VBA实现的话,可以进行循环编程,也就是下一节我们要讲的内容。循环在任何语言编程中都很重要

   


关注“给力ExcelVBA”公众号

让你加薪不加班

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多