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

Forumthread: mehrere vorgestellte Leerzeichen entfernen

mehrere vorgestellte Leerzeichen entfernen
17.04.2024 13:18:17
Fred
Hallo Excel Profis,
ich habe vor längerer Zeit von Onur eine "Function" bekommen. Die funktioniert auch.
Problem; Die Zellen mit dem Inhalt, auf die ich mich mit der Function berufe, sind mittlerweile sehr unteschiedlich in Hinsicht auf Leerzeichen zu Beginn.
Zwischen 0 - 3 Leerzeichen zu Anfang,- und dann funzt die Function auch nicht mehr (nur wenn es kein Leerzeichen zu Beginn gibt)
Meine Frage; Wie entferne ich mit einem Makro alle vorangestellten Leerzeichen??
https://www.herber.de/bbs/user/168801.xlsb
Mit;
Sub EntferneLeerzeichen6()

Dim letzteZeile As Long
Dim i As Long

letzteZeile = Cells(Rows.Count, "A").End(xlUp).Row

For i = 11 To letzteZeile
Cells(i, "I").Value = Trim(Cells(i, "I").Value)
Next i
End Sub

wird nur das erste Leerzeichen entfernt.

Gruss
Fred


Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mehrere vorgestellte Leerzeichen entfernen
17.04.2024 13:27:46
daniel
Hi

Führende Leerzeichen entfernst du in VBA einfach mit der Funktion LTRIM(Text)

Folgende mit RTRIM(Text)

Führende und folgende mit TRIM(Text)

Gruß Daniel
AW: mehrere vorgestellte Leerzeichen entfernen
17.04.2024 13:50:55
Kuwer
Hallo Fred,

Sub EntferneLeerzeichen6()

Dim letzteZeile As Long
Dim i As Long

letzteZeile = Cells(Rows.Count, "A").End(xlUp).Row

For i = 11 To letzteZeile
With Cells(i, "I")
.Value = Replace(.Value, Chr(160), "")
.Value = Trim(.Value)
End With
Next i
End Sub


Gruß, Uwe
Anzeige
AW: mehrere vorgestellte Leerzeichen entfernen
17.04.2024 15:29:31
daniel
noch ne Variante, diese lässt den Rest des Textes unverändert.
dh Zeichen 160 innerhalb bleiben erhalten (für den Fall, dass die später noch benötigt werden)
Sub EntferneLeerzeichen6()

Dim letzteZeile As Long
Dim i As Long
dim t as long
dim Txt as string
letzteZeile = Cells(Rows.Count, "A").End(xlUp).Row

For i = 11 To letzteZeile
Txt = Cells(i, "I").value
for t = 1 to len(Txt)
Select Case ASC(mid(txt, t, 1))
Case 32, 160
Case Else
exit for
end Select
Cells(i, "I").Value = Mid(Txt, t)
Next i
End Sub

Gruß Daniel
Anzeige
AW: mehrere vorgestellte Leerzeichen entfernen
17.04.2024 14:03:43
Fred
Hallo Uwe,
vielen Dank, deine Version klappt genauso gut wie meine!!!
Unterschiedliche Schreibweisen, manchmal gleiches Ergebnis

Danke nochmals

Gruss
Fred
AW: mehrere vorgestellte Leerzeichen entfernen
17.04.2024 14:20:28
Yal
Hmm... was die Funktionsweise angeht, ja genauso gut, was Performance angeht, wäre Uwes Lösung ein paar Nanosekunden schneller: 160 durch 32 zu ersetzen, um anschliessend per Trim diese loszuwerden, ist iwi eine unnötige Schritt zuviel :-)

Die kurzeste (bzw. auf die Art und Weise, wie ich sie schreiben würde):
Sub EntferneLeerzeichen()

Dim Z As Range

Application.EnableEvents = False 'weil es in Zellen geschrieben wird
For Each Z In Range("I11:I" & Cells(Rows.Count, "A").End(xlUp).Row)
Z.Value = Trim(Replace(Z.Value, Chr(160), ""))
Next
Application.EnableEvents = True
End Sub


VG
Yal
Anzeige
wer zuerst denkt..
17.04.2024 14:23:57
Yal
bevor er postet, vermeidet sich blosszustellen (in dem Fall meine ich mich!):

160 durch 32 und dann Trim ist in folgendem Fall richtig: wenn 160er Zeichen innerhalb des Strings vorkommen, will man diesen natürlich nicht weg haben.

VG
Yal
Stimmt :-)
17.04.2024 15:18:39
Kuwer
Also dann einfach zusammengefasst:

Z.Value = Trim(Replace(Z.Value, Chr(160), " "))


Gruß, Uwe
Anzeige
AW: mehrere vorgestellte Leerzeichen entfernen
17.04.2024 13:33:01
Fred
Hallo Daniel, das hatte ich ebenfalls ausprobiert.
Es wird aber nur das erste Leerzeichen entfernt,- wenn zB 3 Leerzeichen zuvor, sind es 2 weitere. Das Makro dann nochmals durchführen, bringt keine Veränderung.

Gruss
Fred

AW: mehrere vorgestellte Leerzeichen entfernen
17.04.2024 13:38:42
daniel
dann kann ich dir nicht weiterhelfen.
bei mir entfernt LTrim alle Leerzeichen, die am Anfang des Textes stehen.

LTrim("           Hallo Welt")

ergibt beim mir
"#Hallo Welt"
als Ergebnis.

mehr kann ich dazu nicht sagen.

Gruß Daniel
Anzeige
AW: mehrere vorgestellte Leerzeichen entfernen
17.04.2024 13:49:22
daniel
Hi
dann schau dir mal den Text genau an, lass dir beispielsweise die ASCII-Codes der Zeichen der Texte geben.
du wirst feststellen, dass hier immer nur das erste Leerzeichen ein echtes Leerzeichen ist (ASCII-Code 32) und die weiteren Leerzeichen dann geschützte Leerzeichen mit dem Code 160. Geschütze Leerzeichen werden von den Textfunktionen nicht wie Leerzeichen behandelt, sondern wie normale Zeichen. Das heißt, bei einem Geschützten Leerzeichen findet kein Zeilenumbruch statt und auch die TRIM-Funktionen lassen diese Zeichen stehen.
du müsstest also erst die Zeichen 160 durch die Zeichen 32 austauschen Trim(Replace(deinText, Chr(160), Chr(32))

Gruß Daniel
Anzeige
AW: mehrere vorgestellte Leerzeichen entfernen
17.04.2024 14:00:10
Fred
Hallo Daniel,
Super! Das mit Code 160 kommt mir aus der Vergangenheit bekannt vor.
Danke für die Unterstützung!
Nun klappt es;


Sub EntferneLeerzeichen()

Dim letzteZeile As Long
Dim i As Long
Dim zelle As String

letzteZeile = Cells(Rows.Count, "A").End(xlUp).Row

For i = 11 To letzteZeile
zelle = Cells(i, "I").text
zelle = Replace(zelle, Chr(160), Chr(32))
zelle = Trim(zelle)

Cells(i, "I").Value = zelle
Next i
End Sub



Gruss
Fred

Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige