分享

按分隔符拆分单元格终结篇,利用VBA一劳永逸解决所有这类问题

 hjr231 2018-06-18

上一篇文章《用了SUBSTITUTE函数,再也不用逐个数人数了,半天工作几秒就搞定》及之前的文章《利用LEFT RIGHT COLUMUNS函数组合,巧妙地将数值拆分成单个数字》两篇文章中,我分别介绍了用不同的函数组合来实现对某一单元格的拆分的问题。第一个虽然是数人数的,但是其性质和后者是一样的,都要实现对单元格的拆分。只不过后者是按固定的序列进行,每次拆一个;而前者是按照分隔的符号来进行。那么问题来了,拆分有着各式各样的形式,有没有一个以不变应万变的方法呢?

比如,如果是空格为表示符号的怎么去拆分呢?如果是以每两个字符为单位又如何拆分呢?本文将就前者的问题,即按固定分隔符拆分字符串展开讲解。后一个问题,即按固定字符数拆分的问题,将在后续的文章中再解决。

如下图在A列中用很多人名,要求要人数填在B列,不人名分成不同的单元格,填在C列及之后的单元格中。

按分隔符拆分单元格终结篇,利用VBA一劳永逸解决所有这类问题

这个问题就要用VBA来实现了,我们先看代码吧。

Sub FJ()

2 I = 3

3 Sheets('sheet1').Select

4 If Cells(1, 3) <> '' And Cells(1, 5) = '' Then QF = Trim(Cells(1, 3))

5 If Cells(1, 3) = '' And Cells(1, 5) <> '' Then QFS = Trim(Cells(1, 5))

6 If Cells(1, 3) <> '' And Cells(1, 5) <> '' Then MsgBox ('请重新确认标准!'): End

7 If QF <> '' And QFS = '' Then

8 Do While Cells(I, 1) <> ''

9 T = 3

10 Cells(I, 1).Select

11For m = 1 To Len(Cells(I, 1))

12 kk = Mid(Cells(I, 1), m, 1)

13 If kk = QF Then

14 T = T + 1

15 Else

16 Cells(I, T).Select

17 Cells(I, T) = Cells(I, T) & kk

18 End If

19 Next

20 Cells(I, 2) = T - 3 + 1

21 I = I + 1

22 kk = ''

23 Loop

24 End If

25 MsgBox ('ok!')

26 End Sub

代码的截图:

按分隔符拆分单元格终结篇,利用VBA一劳永逸解决所有这类问题

把上述代码直接拷贝,放到模块中,拷贝的时候可以带行号,但第一行不要带行号。

上述代码的简单讲解:首先我们要判断一下分隔的符号是什么,这个信息要从C1的单元格得出,把这个值放到变量QF中,当QF不为空值时,就开始对A3的单元格进行处理了,用MID函数一个字符一个字符的查找,当发现字符是QF时就知道要换下一个单元格填充了,如果不是就在原来的单元格的基础上累加。直到整个A3中的单元格循环完毕。

这里再给大家讲解一下MID函数的用法:

Mid是Visual Basic和Microsoft Excel中的一个字符串函数,作用是从一个字符串中截取出指定数量的字符。语法:Mid(String As Variant, Start As Long, [Length As Variant])

这个函数的3个参数各在VB和Excel中互相等价,但VB中的Length参数可以省略,而Excel中num_chars参数不可省略。String As Variant为源字符串;Start是开始位置,Length为要截取的长度。当Start(start_num)参数小于1时,函数返回一个错误;当Start参数值大于String(text)参数长度时,返回一空字符串;若从Start参数起截取长度超出字符串末尾,或Length参数被省略,则返回Start参数位置到字符串结尾的所有字符。

上述的程序中就是利用了Start参数的开始位置组织的循环语句,始终截取的是一个长度的字符。

上述代码完成后,我们在工作表(注意必须是sheet1的工作表),中建立一个按钮和宏命令连接上,这个不再这里细说了,不清楚的可以查我之前的文章。如果不想查可以留言,我再讲解。

看下面的截图:按钮和sheet1我用红色圈了起来,大家注意。

按分隔符拆分单元格终结篇,利用VBA一劳永逸解决所有这类问题

这时就可以运行程序了。我讲了这么多,在之前的文章中也讲了很多,都是为VBA来做铺垫的,好,看看代码的运行结果:

按分隔符拆分单元格终结篇,利用VBA一劳永逸解决所有这类问题

非常完美的实现了我们的目的,而且一劳永逸,以后所有的问题都可以用此程序来解决了,不知大家是否明白了。

有的朋友说没有用过VBA,觉得使用起来有难度。实际上VBA都是以函数为基础的,只是用代码串起来了。有了之前我们学习的基础,使用VBA是可以逐步做到熟能生巧的。而且你可以试一试,一开始用可能会比较陌生,用的多了就能体会出VBA的强大、灵活和高效率。所以,朋友们试一试使用VBA,遇到问题可以联系我,咱们一起面对解决。

今日技巧提示:

第一:MID函数在EXCEL和VBA中都可以用。第二,当字符串的分隔符号改变时,可以直接在C1单元格中改正。第三 可以解决工作中大量实际的问题,比如字符是以空格分隔的,那么直接就可以把分隔符号改成' ',拆分成不同的字符串使用。

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多