Vba 返回一个单元格中的单词数

Vba 返回一个单元格中的单词数,vba,excel,Vba,Excel,有谁能帮我提供一个关于如何用VBA返回单元格中的字数的建议吗 在Excel中我使用了C2=LEN(B2)-LEN(SUBSTITUTE(B2,“,”)+1,但在VBA中,“SUBSTITUTE”函数似乎不再起作用了。对空格字符进行拆分,并获得结果数组的上边界 dim numchars as long numchars = ubound(split(range("b2").value2, chr(32)))+1 debug.print numchars 添加1是因为VBA数组的默认开始(lbou

有谁能帮我提供一个关于如何用VBA返回单元格中的字数的建议吗


在Excel中我使用了
C2=LEN(B2)-LEN(SUBSTITUTE(B2,“,”)+1
,但在VBA中,“
SUBSTITUTE
”函数似乎不再起作用了。

对空格字符进行拆分,并获得结果数组的上边界

dim numchars as long
numchars = ubound(split(range("b2").value2, chr(32)))+1
debug.print numchars
添加1是因为VBA数组的默认开始(lbound)为零


顺便说一句,工作表替换函数的VBA等价物是Replace。

A
Regexp
选项,以确保只返回有效的单词,并忽略要引导的任何空白问题

Function NumWords(strIn As String) As Long
Dim objRegex As Object
Dim objRegMC As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
    .Pattern = "\b[a-z]+\b"
    .Global = True
    If .test(LCase$(strIn)) Then
        Set objRegMC = .Execute(strIn)
        NumWords = objRegMC.Count
    Else
        NumWords = 0
        End If
End With
End Function

假设单元格不为空且单词之间不包含多个空格,则该公式有效。为什么
Value2
而不是
Value
Value2
没有无关信息(日期、货币等),检索速度略快。您可能会注意到,如果您做了一百万个这样的操作。这假设每个单词之间只有一个空格。@Comintern-是的,这是真的,但它确实复制了OP的工作表函数方法。它可能是
worksheetfunction.Trim(range(“b2”).value2)
,因为工作表Trim会将临时双间距更改为单间距,而VBA的Trim不会。哇,在这个“标准”函数中有很多东西需要学习。干得好,吉普,谢谢你的评论!