Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1820to1824
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Trim schneller machen

Trim schneller machen
17.03.2021 10:56:56
Eisi
Hallo zusammen,
gibt es eine Möglichkeit nachfolgenden Code schneller zu machen?
In meiner Mappe werden 934 Zeilen und 33 Spalten mögliche Leerstellen links und rechts des Inhalts gelöscht.
In der Mappe stehen Zahlen und Text.
Jetzt stelle ich gerade fest, das Trim mir ein paar Formatierungen durcheinander geworfen hat.
Beispiel:
Aus Zahl wird Text, d. h. die Zahl steht links in der Zelle. Das Format ist aber trotzdem "Standard" wenn ich die Formatierung anschaue.
Das betrifft aber nur die Spalten: P, Q, S, X, AA, AC.
In den anderen Spalten in denen auch Zahlen stehen ist nichts passiert.
Somit habe ich hier bitte 2 Fragen:
1. Kann man Trim schneller machen, denn es Dauer schon sehr lange, bis der Code durchgelaufen ist?
2. Wie kann ich in den benannten Spalten das Zahlenformat erhalten?
Vielen Dank für die Unterstützung.
VG Eisi :-)
Sub LeerzeichenEntfernen()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim Zelle  As Range
For Each Zelle In tbl_Testblatt.UsedRange
Zelle.Value = Trim(Zelle.Value)
Next Zelle
MsgBox "Complete"
endmacro:
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub


12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Trim schneller machen
17.03.2021 11:06:51
volti
Hallo Eisi,
teste mal, ob diese Idee hier funktioniert und schneller ist...
Code:

[Cc]

Sub Bereich_Im_Array_Bearbeiten() 'Ersetzt in allen Felder A durch B Dim vArr As Variant, i As Integer, j As Integer ' With tbl_Testblatt.UsedRange With ActiveSheet.UsedRange vArr = .Value For i = 1 To UBound(vArr, 1) For j = 1 To UBound(vArr, 2) vArr(i, j) = Trim$(vArr(i, j)) Next j Next i .Value = vArr End With End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz


Anzeige
AW: Trim schneller machen
17.03.2021 11:20:53
Eisi
Hallo Volti,
Dein Name ist wohl Programm :-), ich bin gerade mit einem Ferrari gefahren. :-)
Unfassbar wie schnell der Code durch war. Herzlichen Dank für die spitzen Lösung.
Hast Du noch eine Idee zur Formatierung, oder muss ich separat die Spalten über einen Code mit 1 multiplizieren, damit eine Zahl daraus wird?
GLG Eisi :-)

AW: Trim schneller machen
17.03.2021 11:23:33
ralf_b
versuch mal so.
cdbl(Trim$(vArr(i, j)))


AW: Trim schneller machen
17.03.2021 11:35:36
Eisi
Hallo Ralf,
ich habe es jetzt mal so eingetragen:
vArr(i, j) = CDbl(Trim$(vArr(i, j)))
aber hier kommt eine Fehlermeldung "Laufzeitfehler 13, Typen unverträglich"
Oder wie hast Du es gemeint?
Danke.
VG Eisi :-)

Anzeige
AW: Trim schneller machen
17.03.2021 11:43:11
ralf_b
ja so dachte ich. aber wie geschrieben ungetestet. es lassen sich wohl nicht alle Werte in Zahlen konvertieren. somit wäre Daniels Ansatz mit einzubeziehen.
if isnumeric ....könnte man auch noch mit einbeziehen.
gruß
rb

AW: Trim schneller machen
17.03.2021 11:46:41
volti
Hallo Eisi,
das mit den Zahlen hatte ich überlesen..
Hier noch mal eine Variante, die das so wie Daniel macht.
Code:

[Cc]

Sub Bereich_Im_Array_Bearbeiten() Dim vArr As Variant, i As Long, j As Long With tbl_Testblatt.UsedRange vArr = .Value For i = 1 To UBound(vArr, 1) For j = 1 To UBound(vArr, 2) If VarType(vArr(i, j)) = vbString Then vArr(i, j) = Trim(vArr(i, j)) Next j Next i .Value = vArr End With End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz


Anzeige
AW: Trim schneller machen
17.03.2021 12:43:18
Eisi
Hallo Karl-Heinz,
das ist die perfekte Lösung, unglaublich schneller Code und die Zahlenformate sind vorhanden.
Klasse, super herzlichen Dank.
GLG Eisi :-)

AW: Trim schneller machen
17.03.2021 11:59:35
Eisi
Danke :-)

AW: Trim schneller machen
17.03.2021 11:30:09
Daniel
Hi
TRIM kannst du nicht schneller machen.
dein Problem ist, dass du hier jede Zelle einzeln ausliest und wieder beschreibst.
das Beschreiben einer Zelle löst in Excel eine Reihe von Hintergrundprozessen aus, die eben Zeit kosten.
die Abhilfe ist, die Werte in ein Array zu laden, dort zu bearbeiten und dann das ganze Array in einem Schritt in die Zellen zurück zu schreiben.
das ist dann für Excel wie ein einziger Schreibvorgang und die Hintergrundprozesse müssen nur einmal ausgeführt werden:
dim arr
dim z as long, s as long
with tbl_Testblatt.Usedrange
arr = .value
for z = 1 to ubound(arr)
for s = 1 to ubound(arr)
if vartype(arr(z, s) = vbString then arr(z, s) = trim(arr(z, s))
next s
next z
.value = arr
end with
außerdem habe ich hier eingebaut, dass nur Texte überarbeitet werden und Zahlen so bleiben wie sie sind.
alternativ kannst du das ganze auch per Formel in einem zweiten Tabellenblatt und der Formel Glätten lösen:
with tbl_Testblatt.UsedRange
with tbL_xxx.Range(.address)
.FormulaR1C1="=IF(ISNUMBER('" & tbl_Testblatt.name & "'!RC),'" _
& tbl_Testblatt.name & "'!RC,TRIM('" & tbl_Testblatt.name & "'!RC))
.copy
end with
.pasteSpecial xlpastevalues
end with
tbL_xxx.cells.Clear

das Blatt tbl_xxx müsstest du vorher anlegen.
Gruß Daniel

Anzeige
AW: Trim schneller machen
17.03.2021 12:45:54
Eisi
Herzlichen Dank Daniel :-)
GLG Eisi :-)

OT: TRIM ist nicht gleich TRIM
17.03.2021 11:58:54
lupo1
Das native VBA-TRIM macht nicht so viel, wie WorksheetFunction.Trim. Ausprobieren!

AW: OT: TRIM ist nicht gleich TRIM
17.03.2021 12:47:39
Eisi
Hallo Lupo,
danke für die Info, schaue ich mir später mal genauer an.
Vielen Dank.
VG Eisi :-)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige