2017-02-27 4 views
3

にしている誰もが、細胞からVBAで単語の数を返す方法についてアドバイスで私を助けてもらえますか?リターンはどのように多くの単語がセル

Excelの場合、私はC2=LEN(B2)-LEN(SUBSTITUTE(B2," ",""))+1を使用しますが、VBAでは "SUBSTITUTE"という機能はもう動作しません。スペース文字に

+2

この式は、セルが空ではなく、単語間に複数の空白が含まれていないと仮定して動作します。 – Comintern

答えて

8

スプリットとは、結果の配列の上限を取得します。

dim numchars as long 
numchars = ubound(split(range("b2").value2, chr(32)))+1 
debug.print numchars 

1が追加されます.VBA配列の既定の開始値(lbound)はゼロです。

ところで、ワークシートSUBSTITUTE関数のVBAと同等の置き換えです。

+1

なぜ 'Value'ではなく' Value2'ですか? –

+3

'Value2'は無関係な情報(日付、通貨など)を持っていないとわずかに速く取り出されます。もしあなたがこれらの百万をしたことに気付くかもしれません。 – Jeeped

+0

.................ありがとう!................. –

0

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 
関連する問題