上一篇文章中讲到如何按固定字符数拆分单元格内容的问题,今日我们来解决。之所以提出这类问题是因为在实际的生活和工作中经常会用到类似的问题,比如,手机号码,身份证,车牌号等都是有固定位数的,如果混入了其他的内容,就可以按一定的规律还原出原号码。再比如公司的供货方,产品都是用固定代码的,时下流行的ERP及SAP系统中这些代码都是有固定位数要求的。那么在做匹配或分析时都要据此来拆分出必要的数据,进行分析,有利用到的朋友可以借鉴。
好,言归正传,我们继续来以实例分析。我在讲解的过程中一般会公布代码,此代码是我亲测过的,绝对可以放心使用,在打开的EXCEL文件中按"ALT+F11",*开代**visual basic 编译器,然后点插入>>模块,在右侧空白区域拷贝入我提供的代码就可以,我会尽可能的讲全面些,但不会面面俱到,有问题的朋友可以在群里提问。
我们先看下面的截图:在A列有很多的组合,有字母,字母和符号,数字,数字加字母,汉字,数字加汉字,字母加汉字,字母数字汉字的组合等等,很多种情况。要求是按字符数5为单位进行拆分,拆分后的字符串要以单元格为单位放在C列及之后,同时要在B列给出所拆分出的个数。

看似很复杂的问题,但包括了很多实际的应用。只要这个问题解决了,那么就不再存在类似的问题了。怎么办?上代码:
Sub FJ()
2 I = 3
3 Sheets("sheet1").Select
4 Range("B3:AA13").ClearContents
5 Range("B3").Select
6 If Cells(1, 3) <> "" And Cells(1, 5) = "" Then QF = Trim(Cells(1, 3)) ’此处要判断条件
7 If Cells(1, 3) = "" And Cells(1, 5) <> "" Then QFS = Trim(Cells(1, 5))
8 If Cells(1, 3) <> "" And Cells(1, 5) <> "" Then MsgBox ("请重新确认标准!"): End
9 If QF <> "" And QFS = "" Then ’按分隔符来拆分
10 Do While Cells(I, 1) <> ""
11 T = 3
12 Cells(I, 1).Select
13 For m = 1 To Len(Cells(I, 1))
14 kk = Mid(Cells(I, 1), m, 1)
15 If kk = QF Then
16 T = T + 1
17 Else
18 Cells(I, T).Select
19 Cells(I, T) = Cells(I, T) & kk
20 End If
21 Next
22 Cells(I, 2) = T - 3 + 1
23 I = I + 1
24 kk = ""
25 Loop
26 End If
27 If QF = "" And QFS <> "" Then ’按固定字符数来拆分
28 Do While Cells(I, 1) <> ""
29 T = 2
30 Cells(I, 1).Select
31 For m = 1 To Len(Cells(I, 1))
32 kk = Mid(Cells(I, 1), m, QFS)
33 T = T + 1
34 Cells(I, T).Select
35 Cells(I, T) = kk
36 m = m + QFS - 1
37 Next
38 Cells(I, 2) = T - 3 + 1
39 I = I + 1
40 kk = ""
41 Loop
42 End If
43 MsgBox ("ok!")
44 End Sub
在上面的代码中包含了上篇文章的内容,读者可以一起来考虑,这样可以形成一个文件,用于处理这类问题的专门程序。在第6行到第8行给出了判断的条件即C1和E1,C1不为空而E1为空时是按分隔符来拆分;反之是以固定字符数来拆分的。如果两者都不为空,抱歉,你的逻辑错误,要求你重新定义。
第9行到第26行是按分隔符来拆分,今日不再讲解了。
第27到42行是按照固定字符数来拆分的.这里在A列提供的字符中形成一个FOR,NEXT循环,用MID函数来提取出要求的5个字符。
下面看代码的截图:

好了,代码录入后,别忘了在sheet1中加入一个按钮,关联上代码。就是画一个矩形什么的,点右键,指定到你写的宏代码。关联成功后当鼠标经过时会显示出手的形状,如果不会关联,在群里提问。
我们先看看固定位数为5时的拆分结果:

我们再看看拆分固定字符数为3时的结果:

在你惊叹VBA功能之强大的同时,不要忘了我的功劳,代码是我一个一个敲进去的,也有我的一份辛苦啊。
到此,这类问题全部解决。你也拥有了一份自己的VBA程序。
今日内容技巧的提示:
其一,如何拷贝代码到编译器。
其二,如何设置按钮关联到代码。
其三,FOR,NEXT循环中利用MID函数如何依次提取出固定位数的字符数。
其四,提取出来的字符如何依顺序的放到指定的单元格中。
如果上述的四个问题没有弄懂,你要再次阅读我的文章,直到弄懂。