Используйте команду разделения следующим образом
Dim TempS As String
TempS = " This is a split test "
Dim V As Variant
V = Split(TempS, " ")
Cls
Print UBound(V) '7
V = Split(TempS, "i")
Print UBound(V) '3
V = Split(TempS, "e")
Print UBound(V) '1
Вы можете объединить его в одну строку.
Print UBound(Split(TempS, "i"))
Я сделал несколько грубых попыток. Для строки длиной 40000 символов со всеми пробелами она, по-видимому, работает с тактовой частотой 17 миллисекунд на процессоре Intel Core 2 с частотой 2,4 ГГц.
Функция может выглядеть следующим образом
Function CountChar(ByVal Text As String, ByVal Char As String) As Long
Dim V As Variant
V = Split(Text, Char)
CountChar = UBound(V)
End Function