Leerzeichen sind keine Leerzeichen (2)
Excel, alle Versionen
In einem früheren Beitrag haben wir uns schon einmal mit dem Thema auseinander gesetzt. Dort wurde aufgezeigt, wie Sie unerwünschte Leerzeichen, so genannte „Geschützte Leerzeichen” entfernen oder durch „normale” Leerzeichen ersetzen können. Und das Ganze sogar vollkommen ohne VBA. Uns vielleicht sind Sie zum Schluss gekommen, dass diese besonderen Zeichen in Excel keine Berechtigung haben. Na ja … Stellen Sie sich folgende Textdatei vor:
Vorname Name Raum Peter Lustig Raum 5 Lieschen Müller Raum 12a Heinrich Pumpernickel Kantine
Wenn Sie diese Textdatei per copy/paste einfügen oder einlesen, dann wird (natürlich) alles in Spalte A eingefügt. Mit der Funktionalität Text in Spalten können Sie erreichen, dass die einzelnen Elemente aufgeteilt werden. Hier ist klar, dass das Leerzeichen (Leerschlag) das trennende Element ist. Aber rasch werden Sie erkennen, dass das nicht so wirklich optimal abläuft. Die Überschrift hat drei Spalten, die beiden ersten Datensätze sind aber nach dem Aufteilen vier Spalten groß, nur der dritte Datensatz passt.
Das ist ja auch logisch, denn nach „Raum” kommt ja auch ein Leerzeichen und das wird entsprechend auch als Trenner gewertet. Bei den wenigen Zeilen ist das ja noch ganz gut per Hand regulierbar, aber die meisten importierten oder eingefügten Dateien sind schon umfangreicher. Wie lässt sich dieses Dilemma beseitigen?
Eine Möglichkeit wäre, in einer Hilfsspalte folgende Funktion einzufügen:
=GLÄTTEN(C2 & ” ” & D2)
und das Ganze dann nach unten kopieren. Durch das GLÄTTEN() wird in Zeile 4 kein Leerzeichen angehängt bzw. es wird wieder entfernt. Den kompletten Bereich dann kopieren und Als Wert anschließend in Spalte C einfügen, wobei bestehende Einträge natürlich überschrieben werden. Die Spalte D kann, nein sollte dann gelöscht werden. So weit, so gut. Nun stellen Sie sich einmal folgendes Szenario vor:
Vorname Name Raum Haus Durchwahl Peter Lustig Raum 5 Haupthaus 248 Lieschen Müller Raum 12a Nebenhaus 2 166 Heinrich Pumpernickel Kantine Nebenhaus 1 123
Da wird die bisherige Vorgehensweise dann „eng” 😥 . Das artet in richtige Arbeit aus. 😉 Eine andere Lösung wäre schön. Und die ist durchaus machbar. Sie ersetzen unter bestimmten Kriterien das „normale” Leerzeichen durch das geschützte. Im obigen Beispiel soll nach „Raum” statt des Leerzeichens ein Geschütztes Leerzeichen kommen und somit nicht als Trenner wirken. Gleiches gilt für das „Nebenhaus”. Folgendes Vorgehen bietet sich an:
- Fügen Sie direkt nach dem Import oder Einfügen die entsprechenden Daten, welche ja alle in (normalerweise) Spalte A stehen, in eine beliebige andere Spalte diese Formel ein:
=WECHSELN(A1; "Raum "; "Raum ")
wobei Sie das erste"Raum "
mit einem normalen Leerzeichen eingeben, beim zweiten"Raum"
gehen Sie so vor:- Kein Leerschritt nach dem Wort!
- Drücken Sie die Taste Alt und halten Sie diese gedrückt.
- Auf dem Zehnerblock, also nicht der „normalen” Tastatur drücken Sie nacheinander 0160, danach lassen Sie Alt los. Bei manchen Notebook-Tastaturen werden Sie die Fn-Taste zusätzlich nutzen müssen, um den Nummernblock zu imitieren.
- Kopieren Sie die Formel nach unten.
- Markieren Sie diese neuen Ergebnisse und kopieren Sie diese in die Zwischenablage.
- Fügen Sie diese korrigierten Daten in Spalte A Als Wert ein.
- Führen Sie den Vorgang gleichermaßen für die Haus-Bezeichnung durch.
Wenn Sie jetzt die Daten über die bekannte Funktionalität Text in Spalten aufteilen, wird Ihnen dennoch eine kleine Ungereimtheit auffallen:
In der Überschrift ist (natürlich) auch der "Raum "
mit einem geschützten Leerzeichen ersetzt worden. Das können Sie entweder von Hand korrigieren (was ja nicht so aufwendig ist) oder Sie achten darauf, dass die Formel nicht in der Überschriftszeile angewendet wird.
Ausnahmsweise hier ein kleiner Exkurs in die Welt des Makros, ein kurzer VBA-Code. Wenn es nämlich mehrere Werte zu ersetzen gibt, dann kann das ganz hilfreich sein. Beim obigen Beispiel könnte der Code so aussehen:
Sub SplitText() Dim c As Range For Each c In Selection If InStr(c, "Raum ") > 1 Then c = WorksheetFunction.Substitute(c, "Raum ", "Raum" & Chr(160)) End If If InStr(c, "Nebenhaus ") > 1 Then c = WorksheetFunction.Substitute(c, "Nebenhaus ", "Nebenhaus" & Chr(160)) End If Next c 'Und Text in Spalten (wie aufgezeichnet) durchführen Selection.TextToColumns Destination:=Range("A1"), _ DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=True, Tab:=False, Semicolon:=False, _ Comma:=False, Space:=True, Other:=False, _ FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), _ Array(4, 1), Array(5, 1)), TrailingMinusNumbers:=True End Sub
Die Kopfzeile muss in jedem Fall nachbearbeitet werden. Wenn sie mit markiert war, dann wird ab „Raum” ein „normales” Leerzeichen eingefügt werden und danach alles um 1 Spalte verschoben. Oder aber diese Zeile wird getrennt per Hand aufgeteilt.
[NachObenLetzte Verweis=„ML: Leerzeichen (2)”]