学习Excel技术,关注微信公众号:
excelperfect
下面的自定义函数:TrimAllSpace函数,可以将词语之间含有多个空格分隔的字符串整理成只有一个空格分隔词语的字符串,同时移除字符串开头和结尾处的空格。该函数有两个参数,其中第二个参数设置是否保留字符串中的制表符,默认为True,即不保留制表符。
TrimAllSpace函数的代码:
'删除前导和结尾处的空格
'并将里面的多个空格(包括制表符)缩减为单个空格
'参数strText:要移除多余空格的字符串
'参数bRemoveTabs:指定是否将制表符转换成单个空格
'默认为True,即删除制表符
Function TrimAllSpace(ByVal strText AsString, _
Optional bRemoveTabs As Boolean = True) As String
'声明变量
Dim strTemp As String
Dim strOutput As String
Dim i As Integer
Dim strChar As String * 1
'如果想将制表符转换成单个空格
'使用了TranslateString函数
If bRemoveTabs Then
strText = TranslateString(strText, vbTab, " ")
End If
'移除前导和结尾处的空格
strTemp = Trim(strText)
'依次遍历每个字符
For i = 1 To Len(strTemp)
strChar = Mid$(strTemp, i, 1)
'如果字符是一个空格且前一个字符也是空格,忽略
'否则,添加到输出字符串
If Not (strChar = " " And Right$(strOutput, 1) = "") Then
strOutput = strOutput & strChar
End If
Next i
'返回结果
TrimAllSpace = strOutput
End Function
这个函数调用了TranslateString函数:
If bRemoveTabs Then
strText = TranslateString(strText, vbTab, " ")
End If
将字符串包含的所有制表符转换成空格。TranslateString函数代码及说明详见《VBA代码库07:功能强大的字符替换函数》。
代码中还有一个技巧就是:
'如果字符是一个空格且前一个字符也是空格,忽略
'否则,添加到输出字符串
If Not (strChar = " " AndRight$(strOutput, 1) = " ") Then
strOutput = strOutput & strChar
End If
注意,双引号之间是一个空格。如果前一个添加到输出字符是空格,当前字符也是空格,则忽略当前字符,否则添加到输出字符串中。这样,输出字符串中不会有相邻的两个空格。很巧妙的思路,值得学习!
TrimAllSpace函数测试结果如图1所示。
图1
TrimAllSpace函数程序代码的图片版如下: