Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA wechseln und glätten
#1
Hallo liebe Gemeinschaft,

in meiner Tabelle befinden sich in Spalte E unterschiedlich lange Texte. Darin sind zum Teil manuelle Zeilenumbrüche (Alt+Enter oder Zeichen(10)) und überzählige Leerzeichen enthalten.

Wie müsste ein Makro aussehen, das über "wechseln" und "glätten" alle Zeilenumbrüche und Leerzeichen in Spalte E entfernt und die Zeilenhöhe automatisch einstellt?

An was könnte es liegen, dass in einer Zelle bei automatischer Zeilenhöhe unter dem Text noch eine leere Zeile in der Zelle angezeigt wird?
Manchmal verschwindet die leerer Zeile nachdem ich alle Zeilenumbrüche in der Zelle entfernt habe und manchmal nicht.
Manchmal reicht es auch, die Spaltenbreite um 1 Pixel zu vergrößern. Dann stimmt es aber ja in anderen Zeilen nicht mehr.

Vielen Dank schon mal für Eure Mithilfe

Gruß

Thomas
Antworten Top
#2
Hallo,

Du suchst nach TRIM und REPLACE.
Gruß
Michael
[-] Folgende(r) 1 Nutzer sagt Danke an Der Steuerfuzzi für diesen Beitrag:
  • TomKra
Antworten Top
#3
Hallo Michael,

vielen Dank für Deinen Tipp.
Könntest Du mir bitte etwas genauer erklären, was ich mit TRIM und Replace machen soll?
Soweit ich herausgefunden habe, sind das nur die englischen Begriffe für wechseln und glätten, die ich ja bereits gefunden hatte.

Ich stehe gerade etwas auf dem Schlauch.

Gruß

Thomas
Antworten Top
#4
(24.11.2018, 10:40)TomKra schrieb: An was könnte es liegen, dass in einer Zelle bei automatischer Zeilenhöhe unter dem Text noch eine leere Zeile in der Zelle angezeigt wird?
Manchmal verschwindet die leerer Zeile nachdem ich alle Zeilenumbrüche in der Zelle entfernt habe und manchmal nicht.
Manchmal reicht es auch, die Spaltenbreite um 1 Pixel zu vergrößern. Dann stimmt es aber ja in anderen Zeilen nicht mehr.
Nimm es hin. Das hat mit dem schlechten WYSIWYG von Office zu tun.
Mit fixbreiten Schriften kann man das Thema oft erledigen - sieht halt nicht so schön aus.
Mit normalen Schriften kann man die Höhen manuell steuern, wenn garantiert ist, dass nur manuelle Umbrüche zu tatsächlichen Umbrüchen führen. Dann:

Zeilenhöhe: =Standardhöhe*(Anzahl_harte_Umbrüche - 1)

über VBA z.B. via Change_Event zu vergeben.
[-] Folgende(r) 1 Nutzer sagt Danke an LCohen für diesen Beitrag:
  • TomKra
Antworten Top
#5
Hallo

probier bitte einmal den unteren Code in einem normalen Modul aus. Der sollte alles löschen. Trim geht meines Wissens nur über For Next Schleife, nicht als Replace?  Ich nehme an der Zeilenumbruch hat mit WrapText zu tun, das der in den Zellen auf True steht. Geschieht oft beim Kopieren aus dem Internet  Ich nehme an Alt+Enter müsste vbLF für LineFeed sein, bin mir aber nicht ganz sicher?

mfg  Gast 123

Code:
Sub Text_bereinigen()
Dim AC As Range, lz As Long
With Worksheets(1)
   lz = Cells(Rows.Count, 5).End(xlUp).Row
  .Columns("E").Replace vbLf, ""         'Zeilenvorschub (13)
  .Columns("E").Replace Chr(10), ""      'Zeichen 10
  .Columns("E").Replace Chr(160), " "    'Space 160
  .Columns("E").WrapText = False         'kein Zeilenumbruch!
     
  For Each AC In .Range("E1:E" & lz)
     AC.Value = Trim(AC)
  Next AC
End With
End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • TomKra
Antworten Top
#6
Hallo Gast 123,

vielen Dank für Deine ausführliche Anleitung.
Leider hat das Makro keinen sichtbaren Erfolg gebracht.
Es hat zwar die Tabelle durchgearbeitet, aber am Aussehen des Textes hat sich nichts geändert.

Gruß

Thomas
Antworten Top
#7
Hallo Thoma

UPPs, da bin ich überrascht.  Kannst du bitte mal eine Beispieldatei hochladen, ggf. mit anonymem Text der aber das Prolem beinhaltet.

mfg  Gast 123
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • TomKra
Antworten Top
#8
Hallo Gast 123,

anbei eine kleine Beispieldatei.

Gruß

Thomas


Angehängte Dateien
.xlsx   Beispieldatei.xlsx (Größe: 15,35 KB / Downloads: 2)
Antworten Top
#9
Hallo,

die Zeilenumbrüche zu ersetzen wäre nicht so schwer. Dazu kannst Du die Suchen und Ersetzen-Funktion verwenden, z.B. so:
Code:
Columns("E:E").Replace What:="" & Chr(10) & "", Replacement:="", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Das hättest Du aber auch selbst per Makro-Rekorder herausfinden können Wink

Alle Leerzeichen einfach zu ersetzen macht natürlich wenig Sinn, also wäre es gut zu wissen, woran man ein überzähliges Leerzeichen erkennt. Und erzähl auch mal in welcher Zelle an welcher Stelle sich z. B. ein überzähliges Leerzeichen befindet.

EDIT: So kannst Du die Zeilenhöhe automatisch anpassen: ActiveSheet.Rows.EntireRow.AutoFit
Gruß
Michael
[-] Folgende(r) 1 Nutzer sagt Danke an Der Steuerfuzzi für diesen Beitrag:
  • TomKra
Antworten Top
#10
Moin und nur augenzwinkernd gemeint, Michael:
Rows.EntireRow ist ungefähr so wie alle_Autos.jeweils_das_ganze_Auto
Rows.Autofit reicht natürlich …

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
[-] Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:
  • TomKra
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste