返回目录:excel表格制作
通过我们的上一篇文章,大家已经能够通过“find”、“left”、“len”、“right”这四个函数运用,将下图中的原始数据拆分,达到分别处理的目的(前文链接:职场技术|两步教你如何分割EXCEL单元格中的文字)。有热心网友指出,如果通过EXCEL自带的“分列”功能,也能够达到拆分的目的,我们将在今后的文章中详细介绍EXCEL的分列功能。
BUG的存在
但是无论是在我们前文讲到的函数方法,以及今后会介绍的分列功能,都需要原始数据中有分隔符号的存在,例如上面的例子我们则是用下划线(“_”)来分隔人名及数据。但是如果没有分隔符,又怎么样实现拆分的功能呢?我们将在本文介绍实现方法。
本文的原始例子如下:
在众多的EXCEL内置函数中的确未找到能逐一分析字符类型的函数,因此不能够通过EXCEL内置函数添加分隔符。这里采用EXCEL的VBA自定义两个函数,函数名分别为AddSeparatorTextNum和AddSeparatorNumText。前者为人名在数字前面用的函数,后者为数字在人名前面用的函数。本例的逻辑采用找到字符与数字交接处为出发点,增加分隔符。
各位不必看懂我以下的VBA程序,若有兴趣,我们将在今后一步一步介绍VBA的学习方法,你会发现,VBA掌握起来是十分简单的,并且能够快速的编写自己想要的程序,事半功倍。
现在仅需要按以下步骤操作,便能完成增加分隔符的操作了。
步骤一:
打开存在原始数据的EXCEL文件。
步骤二:
同时按下ALT+F11,打开VBA编辑器,界面如下。
步骤三:(这一步的操作非常重要)
将以下代码按以下步骤拷贝进EXCEL VBA,操作如下:
Function AddSeparatorTextNum(Cell As Range) As String
Dim Length As Integer, BaseText As String, i As Integer, temple As Integer
BaseText = Trim(Cell.Value)
Length = Len(BaseText)
For i = 1 To Length
If IsNumeric(Mid(BaseText, i, 1)) = True Then
temple = i
Exit For
End If
Next
AddSeparatorTextNum = Left(BaseText, temple - 1) & "-" & Right(BaseText, Len(BaseText) - temple + 1)
End Function
Function AddSeparatorNumText(Cell As Range) As String
Dim Length As Integer, BaseText As String, i As Integer, temple As Integer
BaseText = Trim(Cell.Value)
Length = Len(BaseText)
For i = 1 To Length
If IsNumeric(Mid(BaseText, i, 1)) = False Then
temple = i
Exit For
End If
Next
AddSeparatorNumText = Left(BaseText, temple - 1) & "-" & Right(BaseText, Len(BaseText) - temple + 1)
End Function
步骤四:
关闭EXCEL VBA窗口,现在新增加一列单元格,名为“增加分隔符的数据”。
步骤五:
就如同使用EXCEL内置函数(例如上文提到的left函数)一样,在B3单元格输入“=AddSeparatorTextNum(A3)”,此处需要注意,若数字在人名前面,需要输入“=AddSeparatorNumText(A3)”,根据本例特点,采用前一个函数。
步骤六:
好了,现在就为原始的数据添加上了分隔符,就可以按照我们的上一篇文章介绍的方法来分割数据了。
步骤七:
因为嵌入了程序,本表格文件的保存需要另存为.XLSM格式,以便下次打开还能够使用。
步骤八:
因为EXCEL的安全保护,在每次打开带有程序的EXCEL文档,即.XLSM格式文档时,系统都会提示是否启用宏,点击启用就可以了。
我们将在今后逐步介绍VBA的快速入门技巧,欢迎大家关注。