VBA实用小程序55: 计算一个或多个分隔符将字符串分隔成的文本块数

2019-07-19 16:15:26 浏览数 (1)

学习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个分隔符,然后通过计算这个分隔符的数量来得出分隔的块数。

程序代码的图片版如下:

0 人点赞