Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1108to1112
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 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

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
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
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
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
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
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.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige