Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zeilenumbruch nach 100 Zeichen

Zeilenumbruch nach 100 Zeichen
21.06.2005 08:11:39
Gregor
Hallo zusammen
Aus diesem Forum habe ich von Galenzo folgende nützliche Prozedur erhalten.
In dieser Schleife wird in einem Text jeweils nach einer bestimmten Anzahl Zeichen (100) ein Zeilenwechseln mit zwei Tabs eingefügt.
Das funktioniert auch bestens. Wie kann ich nun noch erreichen, dass der Zeilenwechsel nach ca. 100 Zeichen nur bei einem Leerschlag vorgenommen wird, damit nicht ganze Wörter getrennt werden?
(Bemerkung = Text)
Const CUT As Integer = 100
Dim i As Integer
For i = 1 To (Len(Bemerkung) \ CUT)
Bemerkung = Left(Bemerkung, (i - 1) + i * CUT) & vbLf & vbTab & vbTab & vbTab & Right(Bemerkung, Len(Bemerkung) - ((i - 1) + i * CUT))
Next i
Danke für eure Unterstützung.
Gregor
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilenumbruch nach 100 Zeichen
21.06.2005 09:19:57
bst
Morgen Gregor,
hier eine etwas ungewöhnliche Lösung mit Regular Expressions ;-)
Ersetzt nach max. 20 Zeichen ein Blank durch einen Excel-Zeilenumbruch (vbLF).
".{1,20} " ist ein beliebiges Zeichen, mindestens 1 Zeichen lang, max. 20 Zeichen lang,
so lang (so viele) wie möglich gefolgt von einem Leerzeichen.
"(.{1,20}) " speichert das Gesuchte (ohne dem Leerzeichen) fürs Ersetzen in $1.

cu, Bernd
--
Option Explicit

Sub x()
    Cells(2, 1) = strREReplace(Cells(1, 1), "(.{1,20}) ", "$1" & vbLf, False, True)
End Sub

Function strREReplace(src As String, pattern As String, ReplaceString As String, _
    Optional IgnoreCase As Boolean = False, _
    Optional GlobalReplace As Boolean = False)

    Dim re As Object
    Set re = CreateObject("vbscript.regexp")
    re.pattern = pattern
    re.IgnoreCase = IgnoreCase
    re.Global = GlobalReplace
    strREReplace = re.replace(src, ReplaceString)
    Set re = Nothing
End Function

Anzeige
AW: Zeilenumbruch nach 100 Zeichen
21.06.2005 09:47:20
MichaV
Hallo Bernd,
na das war ja knapp, was?
Hier mal ein Vergleich der 3 von uns zur Verfügung gestellten Möglichkeiten:

Galenzo
"Die Schwierigkeit li
egt darin, daß wir a
ls Menschen nicht nu
r Probleme lösen, so
ndern auch Probleme
schaffen. (Edward Te
ller)"
bst
"Die Schwierigkeit
liegt darin, daß wir
als Menschen nicht
nur Probleme lösen,
sondern auch
Probleme schaffen.
(Edward
Teller)"
MichaV- trennen davor
"Die Schwierigkeit
liegt darin, daß wir
als Menschen nicht
nur Probleme lösen,
sondern auch Probleme
schaffen. (Edward
Teller)"
MichaV- trennen dahinter
"Die Schwierigkeit liegt
darin, daß wir als Menschen
nicht nur Probleme lösen,
sondern auch Probleme
schaffen. (Edward Teller)"

Deine Variante funzt ja nun wieder ganz anders, das Ergebnis sieht auch etwas anders aus als meine entsprechende "Trennen davor"- Variante. Insbesondere Deine letzte Zeile gibt mir zu denken. Wie kommt das? (Keine Ahnung von regexp)
Gruss- Micha
Anzeige
AW: Zeilenumbruch nach 100 Zeichen
21.06.2005 10:20:00
bst
Hi Micha,
ja knapp war es...
das regexp-Teil trennt nach &gt= 20 Zeichen, das Blank selber wird hierbei nicht mitgezählt.
Entspricht also Deinem "Trennen davor" wenn Du cut = 20 setzt und einen klitzekleinen
Bug korrigierst, i.e. das Leerzeichen dazwischen mitzählst:
If Len(Zeile(a)) + Len(Wörter(i + 1)) + 1 &gt Cut Then
Die letzte Zeile ist einfach ein Bug meines Patterns ...
Am Ende kommt halt (leider) einfach kein Blank mehr :-(
So daß er eben das davor zum Trennen nimmt...
Dieses solltet besser sein: "(.{1,20})( |$)"
Einen schönen Tag noch,
Bernd
Anzeige
ist besser! Danke für die Aufklärung! owT
21.06.2005 10:24:51
MichaV
Gruss- Micha
AW: Zeilenumbruch nach 100 Zeichen
21.06.2005 09:20:01
MichaV
Hallo Gregor,
hier 2 Varianten, einmal bleibt das nicht zu trennende Wort in der Zeile stehen, einmal kommt das nicht zu trennende Wort in die nächste Zeile.


      
Option Explicit
Sub TrennenNachXZeichen()
Dim Wort As String
Dim Cut As Integer
Dim i As Integer
Dim Wörter
Dim Zeile()
Dim a
Cut = 10
Wort = "Die Schwierigkeit liegt darin, daß wir als Menschen nicht nur Probleme lösen, sondern auch Probleme schaffen. (Edward Teller)"
If InStr(Wort, " ") = 0 Then Exit Sub
'trennen danach
ReDim Zeile(0)
Wörter = Split(Wort, " ")
Zeile(0) = Wörter(0)
For i = 1 To UBound(Wörter)
  
If Len(Zeile(a)) > Cut Then
    a = a + 1
    
ReDim Preserve Zeile(a)
    Zeile(a) = Wörter(i)
  
Else
    Zeile(a) = Zeile(a) & " " & Wörter(i)
  
End If
Next i
MsgBox Join(Zeile, vbCrLf)
'trennen davor
ReDim Zeile(0)
a = 0
Wörter = Split(Wort, " ")
Zeile(0) = Wörter(0)
For i = 0 To UBound(Wörter) - 1
  
If Len(Zeile(a)) + Len(Wörter(i + 1)) > Cut Then
    a = a + 1
    
ReDim Preserve Zeile(a)
    Zeile(a) = Wörter(i + 1)
  
Else
    Zeile(a) = Zeile(a) & " " & Wörter(i + 1)
  
End If
Next i
MsgBox Join(Zeile, vbCrLf)
End Sub 


Gruss- Micha
PS: Rückmeldung wäre nett.
Anzeige
Anschlussfrage
21.06.2005 11:04:16
Gregor
Hallo
Vielen herzlichen Dank an beide. Habe beide Varianten in meine Prozedur eingebaut, es funktionieren beide (kann jedoch nicht alle Befehle nachvollziehen, aber es klappt!).
Probleme gibt es, wenn der Text in den Zellen bereits mit einem oder mehreren Zeilenumbrüche formatiert ist/sind. Den Text lese ich in die Variable "Bemerkung" ein:
Bemerkung = Cells(Zeile, Spalte_Bemerkung).Value
Ich versuchte es mit
Bemerkung.WrapText = False
aber das geht nicht
Wie kann ich die allfällig gesetzten Zeilenumbrüche vorher entfernen, damit eure Vorschläge klappen?
Vielen Dank Gregor
Anzeige
AW: Anschlussfrage
21.06.2005 11:16:18
MichaV
Hi Gregor
wenn -wie bei Dir- der Text aus einer Excel- Zelle kommt:
Bemerkung= Application.WorksheetFunction.Substitute(Bemerkung, vbLf, " ")
oder wenn er aus einer Textbox oder Datei kommt:
Bemerkung= Application.WorksheetFunction.Substitute(Bemerkung, vbCrLf, " ")
Gruss- Micha
Anzeige
Danke
21.06.2005 11:55:44
Gregor
Micha
Vielen Dank
Freundliche Grüsse
Gregor
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zeilenumbruch nach 100 Zeichen in Excel


Schritt-für-Schritt-Anleitung

Um einen Zeilenumbruch in Excel nach 100 Zeichen oder an einer bestimmten Stelle durchzuführen, kannst du VBA (Visual Basic for Applications) nutzen. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Gehe zu Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Kopiere den folgenden Code in das Modul:

    Sub ZeilenumbruchNach100Zeichen()
       Dim Bemerkung As String
       Dim CUT As Integer
       Dim i As Integer
    
       CUT = 100
       Bemerkung = "Hier kommt dein langer Text, der nach 100 Zeichen umgebrochen werden soll."
    
       For i = 1 To (Len(Bemerkung) \ CUT)
           Bemerkung = Left(Bemerkung, (i - 1) + i * CUT) & vbLf & vbTab & vbTab & vbTab & Right(Bemerkung, Len(Bemerkung) - ((i - 1) + i * CUT))
       Next i
    
       MsgBox Bemerkung
    End Sub
  4. Ändere die Variable Bemerkung auf den Text, den du verwenden möchtest.

  5. Führe das Makro mit F5 aus, um den Zeilenumbruch nach 100 Zeichen anzuzeigen.


Häufige Fehler und Lösungen

  • Fehler: Der Text wird an der falschen Stelle umgebrochen.

    • Lösung: Stelle sicher, dass du den Text nach einem Leerzeichen umbrichst. Du kannst dazu die Regular Expressions verwenden.
  • Fehler: Der Zeilenumbruch funktioniert nicht, wenn in der Zelle bereits Zeilenumbrüche vorhanden sind.

    • Lösung: Entferne vorher bestehende Zeilenumbrüche mit folgendem Code:
      Bemerkung = Application.WorksheetFunction.Substitute(Bemerkung, vbLf, " ")

Alternative Methoden

Eine alternative Methode zur Durchführung eines Zeilenumbruchs ist die Verwendung von Regular Expressions. Hier ist ein Beispiel:

Sub ZeilenumbruchMitRegex()
    Dim Bemerkung As String
    Dim regex As Object
    Set regex = CreateObject("vbscript.regexp")

    Bemerkung = "Hier kommt dein langer Text, der nach 100 Zeichen umgebrochen werden soll."
    regex.Pattern = "(.{1,100})( |$)"
    regex.Global = True

    Bemerkung = regex.Replace(Bemerkung, "$1" & vbLf)

    MsgBox Bemerkung
End Sub

Praktische Beispiele

  1. Zeilenumbruch nach 50 Zeichen: Ändere die CUT-Variable auf 50, um den Zeilenumbruch entsprechend anzupassen.

  2. Zeilenumbruch in einer Excel-Zelle:

    Cells(1, 1).Value = Bemerkung  ' Setze den umgebrochenen Text in Zelle A1
  3. Zeilenumbruch bei Nutzung von Textboxen: Wenn du Text aus einer Textbox verwendest, stelle sicher, dass du die Zeilenumbrüche ebenfalls entfernst.


Tipps für Profis

  • Nutze die $in$1 excel Syntax, um Zellen dynamisch zu referenzieren und zu bearbeiten.
  • Teste verschiedene CUT-Werte, um das beste Ergebnis für deinen Anwendungsfall zu erzielen.
  • Wenn du regelmäßig mit langen Texten arbeitest, erstelle eine benutzerdefinierte Funktion für den Zeilenumbruch.

FAQ: Häufige Fragen

1. Wie kann ich den Zeilenumbruch an einer bestimmten Stelle durchführen? Du kannst den CUT-Wert in deinem VBA-Code anpassen, um den Zeilenumbruch an einer gewünschten Stelle zu setzen.

2. Welche Zeichen kann ich für den Zeilenumbruch verwenden? In Excel ist das vbLf das Zeichen für einen Zeilenumbruch. Du kannst es in deinen VBA-Skripten verwenden.

3. Funktioniert das auch in älteren Versionen von Excel? Ja, die oben genannten Methoden funktionieren in den meisten Versionen von Excel, die VBA unterstützen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige