学习Excel技术,关注微信公众号:
excelperfect
下面的自定义函数:CountBlock函数,可以根据提供的一个或多个分隔符进行查找,得到这些分隔符将字符串分隔成的文本块数。
CountBlock函数的代码:
代码语言:javascript复制' ----------------------------------------
'参数strText:给出的文本字符串
'参数strDelimiter:文本字符串中的分隔符
'-----------------------------------------
Function CountBlock(ByVal strText AsString, _
ByVal strDelimiter As String) As String
Dim strChar As String * 1
'如果没有提供文本字符串
If Len(strText) = 0 Then
CountBlock = 0
Else
'提取第1个分隔符
strChar = Left$(strDelimiter, 1)
'如果有多个分隔符,则替换成第1个分隔符
If Len(strDelimiter) > 1 Then
strText = TranslateString(strText,strDelimiter, strChar)
End If
'计算第1个分隔符数量并加1得到分隔的文本块数
CountBlock = iCountString(strText, strChar) 1
End If
End Function
代码中,调用了TranslateString函数,将所有不同的分隔符转换为所提供的分隔符strDelimiter中的第一个分隔符:
代码语言:javascript复制strChar = Left$(strDelimiter, 1)
'如果有多个分隔符,则替换成第1个分隔符
If Len(strDelimiter) > 1 Then
strText = TranslateString(strText, strDelimiter, strChar)
End If
其中的TranslateString函数来源于《VBA代码库07:功能强大的字符替换函数》。例如,如果调用:
CountBlock("完美:Excel!微信公众号",": !")
则TranslateString函数将strText转换成:
完美:Excel:微信:公众号
然后,代码:
iCountString(strText, strChar) 1
使用iCountString函数统计出strText中的strChar(即:)的数量,加1,得到文本字符串中被分隔符分成的文本块数,示例中得到4。
其中的iCountString函数来源于《VBA实用小程序54:计算字符串中指定子字符串出现的次数》。
上述测试代码及结果如图1所示。
图1
下面的示例代码:
CountBlock("Thisis a good test", " ")
返回5。如下图2所示。
图2
CountBlock函数很巧妙,它没有像通常那样遍历,而是将文本字符串中不同的分隔符统一转换成分隔符参数中的第1个分隔符,然后通过计算这个分隔符的数量来得出分隔的块数。
程序代码的图片版如下: