Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Trim und Trim$

Trim und Trim$
Björn
Hallo,
kann mir einer erklären, was das Dollarzeichen "$" bei den Trim-Funktionen in VBA macht?
In der Hilfe steht dazu nix. Da gibt es nur Trim ohne $.
Die meisten Codes / Beispiele, die ich gefunden habe, sind aber mit $.
Hab schon ein bisschen ausprobiert, bei mir kommt bei beiden das gleiche Ergebnis.
Vielen Dank.
Gruß
Björn
Anzeige
AW: Trim und Trim$
21.10.2009 11:13:45
Björn
Hallo Jens,
danke für die schnelle Antwort.
Soll heißen, dass hier nur Text getrimmt wird oder wie?
Das verstehe ich nicht. Ein Leerzeichen kann doch nur in einem String vorkommen.
Und Trim gibt auch immer einen String zurück.
Also was ist jetzt genau der Unterschied zwischen den beiden?
Was macht VBA anders?
Gruß
Björn
Anzeige
AW: Trim und Trim$
21.10.2009 11:23:23
Tino
Hallo,
dazu hat Nepumuk mal hier was geschrieben,
dass Dollarzeichen wird verwendet wenn man als Rückgabe sowieso einen String erwartet.
Angeblich ist dies auch etwas schneller, was ich nicht unbedingt bestätigen kann.
Nicht nur bei Trim gibt es dies auch bei Left, Right, Mid usw…
Gruß Tino
Anzeige
AW: Trim und Trim$
21.10.2009 11:29:36
Nepumuk
Hallo Björn,
Trim gibt einen Variant, Trim$ einen Text zurück. Aus dem Objektkatalog:
Function Trim(String)
Function Trim$(String As String) As String

Trim$ verbraucht weniger Speicher.
Gruß
Nepumuk
aber schneller ist es dadurch nicht
21.10.2009 11:49:34
Tino
Hallo,
, im Gegenteil sogar einen Tick langsamer?!
Naja bei einen hundertstel wird man es nicht merken. ;-)
'Test 1 *************************************** 
Sub Test_ohne_Dollarzeichen() '2,257813 
Dim sTime As Single
Dim vAr(0 To 10000000)
Dim A As Long

For A = 0 To 10000000
 vAr(A) = " Text"
Next A

sTime = Timer

For A = 0 To 10000000
 vAr(A) = Trim(vAr(A))
Next A

Debug.Print Timer - sTime
End Sub

'Test 2 **************************************** 
Sub Test_mit_Dollarzeichen() '2,269531 
Dim sTime As Single
Dim vAr(0 To 10000000)
Dim A As Long

For A = 0 To 10000000
 vAr(A) = " Text"
Next A

sTime = Timer

For A = 0 To 10000000
 vAr(A) = Trim$(vAr(A))
Next A

Debug.Print Timer - sTime
End Sub
Gruß Tino
Anzeige
Bei mir genau so...
21.10.2009 12:24:44
Jens
Hi Tino
Habe Deine Subs mal laufen lassen. Die zeitliche Differenz scheint etwa gleich, aber mein Rechner ist schneller ;o)
ohne Dollarzeichen: 1,125
mit Dollarzeichen: 1,140
Gruß aus dem Sauerland
Jens
AW: Bei mir genau so...
21.10.2009 12:34:25
Nepumuk
Hallo,
dann deklariert die Arrays mal als String und lasst es nochmal laufen.
Gruß
Nepumuk
Anzeige
Dann bekomme ich ...
21.10.2009 12:46:29
Jens
Hi Nepumuk
...
mit Dollarzeichen: 1,562
ohne Dollarzeichen: 1,732
Gruß aus dem Sauerland
Jens
AW: Bei mir genau so...
21.10.2009 12:50:35
Tino
Hallo,
ja die unterschiede sind das mit $ schneller wird, allerdings frisst das Array jetzt eine Sekunde.
'Test 1 *************************************** 
Sub Test_ohne_Dollarzeichen() '3,679688 
Dim sTime As Single
Dim sAr(0 To 10000000) As String
Dim A As Long

For A = 0 To 10000000
 sAr(A) = " Text"
Next A

sTime = Timer

For A = 0 To 10000000
 sAr(A) = Trim(sAr(A))
Next A

Debug.Print Timer - sTime
End Sub

'Test 2 **************************************** 
Sub Test_mit_Dollarzeichen() '3,40625 
Dim sTime As Single
Dim sAr(0 To 10000000) As String
Dim A As Long

For A = 0 To 10000000
 sAr(A) = " Text"
Next A

sTime = Timer

For A = 0 To 10000000
 sAr(A) = Trim$(sAr(A))
Next A

Debug.Print Timer - sTime
End Sub

Gruß Tino
Anzeige
also wenn man das Arraygedöns mal weglässt
21.10.2009 16:26:29
Daniel
und die Zeitmessung so weit wie mögich auf die zu testende Funktion reduziert, dann ist Trim$ bei mir mehr als doppelt so schnell wie Trim. (1,6 s zu 4,0 s). und das ist dann doch ein Wort.
Option Explicit
Const anz = 10000000
Const txt = " Hallo  Du  Da "
Dim sTime As Single
Dim y As String, a As Long
'Test 1 ***************************************
Sub Test_ohne_Dollarzeichen()
sTime = Timer
For a = 0 To anz
y = Trim(txt)
Next a
Debug.Print Timer - sTime
End Sub
'Test 2 ****************************************
Sub Test_mit_Dollarzeichen()
sTime = Timer
For a = 0 To anz
y = Trim$(txt)
Next a
Debug.Print Timer - sTime
End Sub
Gruß, Daniel
Anzeige
stimmt schon, aber...
21.10.2009 17:10:08
Tino
Hallo,
in der Realität ist der Text (txt) selten ein konstanter Ausdruck. ;-)
Gruß Tino
AW: stimmt schon, aber...
21.10.2009 17:26:38
Daniel
...wenn ich die TRIM-Funktion realistisch bewerten will, dann sollte der Hauptzeitanteil im Messaufbau schon durch die TRIM-Funktion erzeugt werden, und nicht durch die Bestandteile drumherum, sonst messe ich nicht die Zeit der TRIM-Funktion, sondern die Zeit die es braucht, um eine Variable zu verarbeiten.
Gruß, Daniel
Anzeige
stimmt auch wieder...
21.10.2009 18:10:38
Tino
Hallo,
dennoch ist das Verhalten irgendwie nicht nachvollziehbar.
Bei identischen Aufbau (siehe erstes Beispiel) nur das Dollarzeichen wird hinzugefügt
dauert es etwas länger.
Also liegt es ja doch nahe das es einen Zusammenhang zwischen Trim$ und Trim geben muss.
Ich denke es liegt daran das Trim$ versucht den String nochmals in einen Sting zu wandeln,
Trim interessiert sich hingegen fürs Format nicht, obwohl es auch immer einen String zurückgibt
(da sind auch bei mir noch Fragezeichen),
ein eine andere Erklärung habe ich dafür nicht, am Array kann es nicht liegen da die Bearbeitung in beiden Beispielen gleich ist.
Ja gut eine hundertstel Sekunde interessiert wahrscheinlich niemanden aber es geht ja um die Sache.
Gruß Tino
Anzeige
AW: stimmt auch wieder...
21.10.2009 18:57:18
Daniel
Hi
nach ein paar Tests habe ich jetzt folgends festgestellt:
die Varianten:
- Trim$ + Variant-Variablen
- Trim + Variant-Variablen
- Trim + String-Variablen
sind alle in etwa gleich schnell.
etwas schneller ist die Variante
- Trim$ + String-Variable
ich vermute mal, Ursache ist die Typumwandlung String-Variant.
diese wird bei Trim immer durchgeführt, bei Trim$ hingegen nur dann, wenn es notwendig ist.
dh wenn Trim$ den Wert an eine String-Variable übergibt, dann kann diese Umwandlung entfallen, was Zeit spart.
Gruß, Daniel
Anzeige
klingt zumindest Logisch oT.
21.10.2009 19:23:25
Tino
AW: Trim und Trim$
21.10.2009 11:22:01
Erich
Hi Björn,
der Unterschied zwischen den beiden Varianten ist minimal und normalerweise nicht zu merken.
Wenn du (mit F2) in den Objektkatalog gehst und nach trim suchst, findest du u. a. Trim und Trim$,
die beide zur Klasse VBA Strings gehören.
Wenn du sie anklickst, siehst du unten
Function Trim(String)
bzw.
Function Trim$(String As String) As String
Das bedeutet, dass Trim einen Variant-Wert (Wert vom Typ Variant (String) - siehe VBA-Hilfe) zurückgibt.
Trim$ dagegen gibt einen Wert vom Typ String zurück.
Wie gesagt: Den Unterschied wird man kaum bemerken.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Danke
21.10.2009 11:27:10
Björn
Ok, jetzt habe ich es verstanden.
Vielen Dank Euch allen.
Kurz gesagt, wenn man "schöner" programmieren will, schreibt man Trim$.
Gruß
Björn B.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Trim und Trim$ in VBA: Alles, was Du wissen musst


Schritt-für-Schritt-Anleitung

Um die Funktionen Trim und Trim$ in Excel VBA zu verwenden, folge diesen Schritten:

  1. Öffne den VBA-Editor in Excel, indem Du ALT + F11 drückst.

  2. Erstelle ein neues Modul: Rechtsklick auf einen der Einträge im Projektfenster > Einfügen > Modul.

  3. Füge den folgenden Code ein:

    Sub BeispielTrim()
        Dim textMitLeerzeichen As String
        Dim textTrimmed As String
        Dim textTrimmedDollar As String
    
        textMitLeerzeichen = "   Hallo Welt!   "
        textTrimmed = Trim(textMitLeerzeichen)       ' Verwendung von Trim
        textTrimmedDollar = Trim$(textMitLeerzeichen) ' Verwendung von Trim$
    
        Debug.Print "Ohne Trim$: " & textTrimmed
        Debug.Print "Mit Trim$: " & textTrimmedDollar
    End Sub
  4. Führe das Makro aus, indem Du F5 drückst. Das Ergebnis wird im Direktfenster angezeigt.


Häufige Fehler und Lösungen

  • Fehler: vba trim funktioniert nicht

    • Lösung: Stelle sicher, dass Du Trim oder Trim$ korrekt geschrieben hast. Überprüfe, ob der Text, den Du trimmen möchtest, tatsächlich Leerzeichen enthält.
  • Fehler: Typkonflikt bei der Verwendung von Trim$

    • Lösung: Achte darauf, dass der Wert, den Du an Trim$ übergibst, vom Typ String ist. Bei anderen Typen kann es zu Fehlern kommen.

Alternative Methoden

Neben Trim und Trim$ kannst Du auch die Funktionen LTrim und RTrim verwenden:

  • LTrim entfernt nur die führenden Leerzeichen.
  • RTrim entfernt nur die nachfolgenden Leerzeichen.

Beispiel:

Dim textLTrimmed As String
textLTrimmed = LTrim(textMitLeerzeichen) ' Entfernt nur führende Leerzeichen

Um alle Leerzeichen zu entfernen, kannst Du auch Replace verwenden:

Dim textOhneLeerzeichen As String
textOhneLeerzeichen = Replace(textMitLeerzeichen, " ", "") ' Entfernt alle Leerzeichen

Praktische Beispiele

Hier sind einige nützliche Beispiele zur Verwendung von Trim und Trim$:

  1. Trim in einer Schleife:

    Dim i As Long
    For i = 1 To 10
       Debug.Print Trim("   Beispiel " & i & "   ")
    Next i
  2. Trim$ für schnellere Ausführung:

    Dim textArray(1 To 5) As String
    textArray(1) = "   Text 1   "
    textArray(2) = "   Text 2   "
    ' und so weiter...
    
    Dim j As Long
    For j = 1 To 5
       textArray(j) = Trim$(textArray(j)) ' Verwendung von Trim$
    Next j

Tipps für Profis

  • Verwende Trim$, wenn Du sicher bist, dass der Rückgabewert ein String ist. Das spart Speicher und kann in großen Datenmengen die Leistung verbessern.
  • Beachte Typumwandlungen: In VBA wird bei Trim eine Typumwandlung vom Variant zum String durchgeführt, was bei Trim$ nur bei Bedarf geschieht.
  • Nutze das Debugging: Verwende Debug.Print, um die Ergebnisse Deiner Trim-Operationen zu überprüfen und sicherzustellen, dass sie korrekt sind.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Trim und Trim$? Der Hauptunterschied liegt in der Rückgabe: Trim gibt einen Variant zurück, während Trim$ einen String zurückgibt. Dies kann die Leistung beeinflussen.

2. Wann sollte ich Trim$ verwenden? Verwende Trim$, wenn Du mit Strings arbeitest und die Leistung optimieren möchtest. Trim ist jedoch flexibler, da es auch mit anderen Datentypen funktioniert.

3. Gibt es Geschwindigkeitsunterschiede zwischen Trim und Trim$? Ja, Tests zeigen, dass Trim$ in bestimmten Szenarien schneller sein kann, vor allem bei der Verarbeitung von String-Variablen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige