Hallo,
so kleine speed-Wettbewerbe helfen, die Codes besser zu verstehen.
Mein Beitrag ist eine Variante mit RegEx, ist aber viel zu langsam.
Ich habe RPP63-Formel mit Atilla's verbunden, damit sind beide Ansätze gleich schnell.
(Die Zeiten sind auf einem uralt Laptop gemessen)
Code:
Sub M_snb()
An = Timer
Debug.Print "snb: ", UBound(Split(Join([transpose(A1:A10000)], ""))), Timer - An
'1,2 sek
End Sub
Sub schreib()
Range("a1:a10000") = "Bin mal auf den Geschwindigkeits-Test mit deiner Lösung gespannt Ralf." _
& "Aber ich glaub du bist hier dann doch der Speedy Gonzales." _
& "Insofern schon mal meinen herzlichsten Dank."
End Sub
Sub leerzeichen()
Dim i As Long, lngAnzahl As Long, f
Dim Start As Double, Ergebnis As Long
Start = Timer
f = Range("a1:a10000")
For i = 1 To 10000
lngAnzahl = lngAnzahl + UBound(Split(f(i, 1)))
Next i
Debug.Print "Attila Ergebnis ist: " & lngAnzahl & " in " & Format(Timer - Start, "0.000") & " Sekunden"
'0,156 sek
End Sub
Sub Quatsch()
Dim Start As Double, Ergebnis As Long
Start = Timer
Ergebnis = Evaluate("=SUMPRODUCT(LEN(A1:A10000)-LEN(SUBSTITUTE(A1:A10000,"" "","""")))")
Debug.Print "RPP63 Ergebnis ist: " & Ergebnis & " in " & Format(Timer - Start, "0.000") & " Sekunden"
'0,438 sek
End Sub
Sub RPP2()
An = Timer
f = Range("A1:A10000")
Erg = Evaluate("=sumproduct(len(f(0,1))-len(substitute(f(0,1),"" "", """")))")
Debug.Print "RPP2", Timer - An
'0,015625 sek
End Sub
Sub Fen()
An = Timer
Tx = Join([transpose(A1:A10000)], "")
With CreateObject("vbscript.regexp")
.Pattern = "\s"
.Global = True
.MultiLine = True
Set RR = .Execute(Tx)
Debug.Print "Fen", RR.Count, Timer - An
'For i = 1 To 10000
' Set RR = .Execute(f(i, 1))
' R = R + RR.Count
'Next i
'Debug.Print "Reg2", R, RR.Count, Timer - An
End With
'0,53 sek
End Sub
mfg