Hallo Thomas,
eine interessante Frage. Ich habe mich mal an einem einigermassen
performanten Ansatz versucht ;-)
Zum Testen habe ich ein Sheet mit ca 4500 Zeilen und ca 200 Spalten mit
Werten befüllt (insgesamt 925165 Zellen).
Die erste Sub hab ich zum Vergleich geschrieben, sie entspricht in etwa
deinem Ansatz und braucht ca 48 Sekunden.
Die zweite Lösung ist sehr viel schneller, hier läuft es in einem
Viertel der Zeit, also ca 12 Sekunden.
Ich bin gespannt, ob es noch schnellere Lösungen gibt.
Gruß
Eike
'=================================================
Sub trimAllLangsam()
'1-2006
'E.Bimczok
Dim a As Range, myTime
myTime = Now()
Application.ScreenUpdating = False
For Each a In ActiveSheet.UsedRange
a.Value = Trim(a.Value)
Next a
Application.ScreenUpdating = True
MsgBox (Second(myTime - Now))
End Sub
'=================================================
Sub trimAll()
'1-2006
'E.Bimczok
Dim a As Range, myTime, b()
myTime = Now()
Set a = ActiveSheet.UsedRange
b = a
Dim jboundL As Long, jboundU As Long
jboundL = LBound(b, 2)
jboundU = UBound(b, 2)
For k = LBound(b, 1) To UBound(b, 1)
For j = jboundL To jboundU
b(k, j) = Trim(b(k, j))
Next j
Next k
Application.ScreenUpdating = False
a = b
Application.ScreenUpdating = True
MsgBox (Second(myTime - Now))
End Sub
'=================================================
Post by Thomas GrafHallo,
Gibt es eine effiziente Art auf alle Einträge in einem Excel-Sheet
Trim() anzuwenden? 2 Verschachtelte Schleifen sind jedenfalls bei
mehreren Tausend Zeilen und Hundert Spalten nicht sinnvoll verwendbar
(sehr sehr langsam).
ciao - Thomas