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

Forumthread: Text in Zelle nach bestimmter Zeichenanzahl bzw nach bestimmten Zeichen trennen

Text in Zelle nach bestimmter Zeichenanzahl bzw nach bestimmten Zeichen trennen
23.10.2019 11:14:03
Gerhard
Hallo zusammen,
ich habe folgende Aufgabenstellung:
In meinem geöffneten Worksheet habe ich eine Zelle(D27).
Diese Zelle kann unterschiedlichste Texte enthalten.
Der Text aus dieser Zelle soll im Worksheet(Zeichnungstabelle) in der Zelle V5 übertragen werden.
Jedoch dürfen im Worksheet(Zeichnungstabelle) immer nur 60 Zeichen in einer Zelle stehen.
Danach soll der Text in der darunter liegenden Zelle fortgesetzt werden.(Trennung natürlich immer nur nach einem ganzen Wort)Es soll so lange gemacht werden bis max. 4 Zellen untereinander beschrieben wurden.(Die 5 Zelle wird nur noch mit einem Wort beschrieben)
Das funktioniert soweit alles super mit dem Code unten.
Jetzt brauche ich noch, dass nach jedem | Zeichen automatisch in die nächste Zelle im Worksheet(Zeichnungstabelle) gesprungen wird sodass der Bediener bei der Eingabe in die Zelle(D27) auch selbst den Absatz bestimmen kann. ( Jedoch dürfen wieder nie mehr als 60 Zeichen in einer Zelle stehen)
Hier komme ich leider nicht mehr weiter.
Kann mir hier jemand helfen?
Danke im Voraus für eure Lösungen.
  • 
    Sub text()
    Dim arr, i As Integer, j As Integer, Zelle As Range
    For Each Zelle In Cells(28, 4)
    If Len(Zelle) > 60 Then
    arr = Split(Zelle, " "): j = 5
    For i = 0 To UBound(arr)
    If Len(Worksheets("Zeichnungtabelle").Cells(j , 18) & IIf(IsEmpty(Worksheets("Zeichnungtabelle") _
    _
    .Cells(j , 18)), "", " ") & arr(i)) > 60 Then j = j + 1
    If Worksheets("Zeichnungtabelle").Cells( 9, 18) = "" Then Worksheets("Zeichnungtabelle").Cells(  _
    _
    j , 18) = Worksheets("Zeichnungtabelle").Cells(j , 18) & IIf(IsEmpty(Worksheets(" _
    Zeichnungtabelle").Cells(j , 18)), "", " ") & arr(i)
    Next i
    Else
    Worksheets("Zeichnungtabelle").Cells(5, 18) = Zelle
    End If
    Next Zelle
    End Sub
    

  • Anzeige

    6
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Text in Zelle nach bestimmter Zeichenanzahl bzw nach bestimmten Zeichen trennen
    23.10.2019 11:36:53
    Daniel
    Hi
    ich würde das so machen:
    Sub test()
    Dim txt As String
    Dim i As Long
    Dim Zähler As Long
    Dim Pos As Long
    Dim arr
    txt = Range("D27").Value
    For i = 1 To Len(txt)
    Select Case Mid(txt, i, 1)
    Case "|"
    Zähler = 0
    Case " "
    If Zähler >= 60 Then
    Mid(txt, i, 1) = "|"
    Zähler = 0
    Else
    Zähler = Zähler + 1
    Pos = i
    End If
    Case Else
    Zähler = Zähler + 1
    If Zähler > 60 Then
    Mid(txt, Pos, 1) = "|"
    Zähler = i - Pos
    End If
    End Select
    Next
    arr = Split(txt, "|")
    ReDim Preserve arr(3)
    Worksheet("Zeichnungstabelle").Range("V5").Resize(4, 1).Value = WorksheetFunction.Transpose(arr) _
    End Sub
    
    das Makro läuft durch den Text und zählt die Zeichen.
    dabei merkt es sich die Postition des letzten Leerzeichens
    wird die Anzahl der Zeichen überschritten, wird beim letzten Leerzeichen ein Trennzeichen eingefügt und der Zeichenzähler zurückgesetzt.
    manuell eingefügte Trennzeichen werden gleichermaßen berücksichtigt.
    Gruß Daniel
    Anzeige
    AW: Text in Zelle nach bestimmter Zeichenanzahl bzw nach bestimmten Zeichen trennen
    23.10.2019 11:58:26
    Gerhard
    Hallo Daniel,
    danke das funktioniert genau so wie benötigt.
    Hast mir sehr geholfen.(:
    Was ist mit der 5.Zelle, ...
    23.10.2019 20:24:34
    Luc:-?
    …Gerhard?
    Die lässt Daniel nämlich generell weg. Und natürlich hängt das ja auch von deinen Texten ab. Bei sehr langen Einzelworten könnte auch eine ungünstige Teilung resultieren, die mehr als 4 Zellen + 1 Wort in der 5. benötigt.
    Und was ist unter manueller AbsatzBestimmung zu verstehen? Soll das generell ein absoluter Zeilenwechsel sein, der dann auch einen Neubeginn der Zählung veranlassen müsste (wie von Daniel umgesetzt), oder nur ein relativer innerhalb eines Wortes, um eine bessere TextzeilenAuslastung zu erreichen? Letzteres könnte nämlich auch mit der UDF TxRows in folgd pluraler MatrixFml erreicht wdn:
    {=MTRANS(GLÄTTEN(VSplit(TxRows(WECHSELN(D27;"|";WIEDERHOLEN(" ";11));60;"*");ZEICHEN(10))))}
    Hier wird * als relatives Trennzeichen, das bei Wirksamwerden durch Trennstrich ersetzt wird, verwendet. Die Verwendung eines absoluten Trennzeichens ist hier nicht vorgesehen, wird in der Fml aber so simuliert, dass es ggf (per individueller Anpassung des 2.Arguments von WIEDERHOLEN) eine optisch zufrieden stellende Trennung ergibt. (Wegen GLÄTTEN wäre allerdings die Verwendung des optionalen 4.Arguments von TxRows irrelevant.)
    Eine evtl Kürzung auf 4 Zellen + 1 Wort müsste ggf durch ZellAuswahl und zusätzliche relative u/o absolute Trennzeichen realisiert wdn.
    BspText in D27:
    Jetzt brauche ich noch, dass nach jedem Pipe-Zeichen automa*tisch in die nächste Zelle im Worksheet(Zeichnungs*tabelle) gesprungen wird, so dass der Bediener bei der Eingabe in die Zelle (D27) auch selbst den Absatz bestimmen kann.|(Jedoch dürfen wieder nie mehr als 60 Zeichen in einer Zelle stehen!)
    ArchivLinks zu den verwendeten UDFs:
    TxRows (Vs1.2) https://www.herber.de/cgi-bin/callthread.pl?index=1084680#1085532
    VSplit (Vs1.1) https://www.herber.de/bbs/user/99024.xlsm (BspDatei m.UDFs)
    Gruß, Luc :-?
    „Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
    Deshalb Intelligenz steigern mit …

    Anzeige
    AW: Was ist mit der 5.Zelle, ...
    23.10.2019 21:59:00
    Daniel
    HI Luc
    die 5. Zeile war doch gar nicht gefordert:
    Zitat: "Es soll so lange gemacht werden bis max. 4 Zellen untereinander beschrieben wurden."
    ja in der 5. Zeile steht ein Wort, aber es wurde nicht gesagt, dass dieses Wort das letzte Wort des Eingabetextes sein muss. dieser ist in maximal 4 Zeilen umzubrechen.
    das von dir gewünschte relative Trennzeichen lässt sich bei meiner Lösung mit zusätzlichen Programmzeile und zwei Zusätzen in einer Programmzeile problemlos ergänzen:
    Sub test()
    Dim txt As String
    Dim i As Long
    Dim Zähler As Long
    Dim Pos As Long
    Dim arr
    txt = Range("D27").Value
    For i = 1 To Len(txt)
    Select Case Mid(txt, i, 1)
    Case "|"
    Zähler = 0
    Case " ", "*"
    If Zähler >= 60 Then
    Mid(txt, i, 1) = "|"
    Zähler = 0
    Else
    if Mid(txt, i, 1)  "*" then Zähler = Zähler + 1
    Pos = i
    End If
    Case Else
    Zähler = Zähler + 1
    If Zähler > 60 Then
    Mid(txt, Pos, 1) = "|"
    Zähler = i - Pos
    End If
    End Select
    Next
    txt = replace(txt, "*", "")
    arr = Split(txt, "|")
    ReDim Preserve arr(3)
    Worksheet("Zeichnungstabelle").Range("V5").Resize(4, 1).Value = WorksheetFunction.Transpose( _
    arr) _
    End Sub
    
    Gruß Daniel
    Anzeige
    AW: Was ist mit der 5.Zelle, ...
    24.10.2019 08:02:45
    Gerhard
    Hallo Luc,
    Hall Daniel,
    mir passt der Code von Daniel optimal.
    Die 5 Zelle beschreibe ich nur, da ich dann mit einer bedingten Formatierung arbeite welche anzeigt, dass der Text zu lange ist.
    Danke auch für deine Antwort Luc.
    Jedoch verstehe ich den Code von Daniel besser und ich konnte das Thema mit der 5 Zelle selbst lösen.
    Danke jedoch an beide für eure Antworten.
    Anzeige
    AW: Was ist mit der 5.Zelle, ...
    24.10.2019 09:39:09
    Daniel
    HI
    die Anzahl der Belegten Zellen kannst du ja hier prüfen und dann ggf entsprechend reagieren:
    
    arr = Split(txt, "|")
    if Ubound(arr) > 3 Then
    Msgbox "Achtung, Text zu lang, mehr als 4 Zellen benötigt.
    ...
    

    Gruß Daniel

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige
    Anzeige
    Anzeige
    Anzeige
    Anzeige

    Infobox / Tutorial

    Text in Zelle nach bestimmter Zeichenanzahl oder Zeichen trennen


    Schritt-für-Schritt-Anleitung

    Um Text in einer Zelle nach einer bestimmten Zeichenanzahl oder bestimmten Zeichen zu trennen, kannst Du ein VBA-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

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

    2. Füge ein neues Modul hinzu: Klicke auf Einfügen > Modul.

    3. Kopiere und füge den folgenden Code in das Modul ein:

      Sub text()
         Dim arr, i As Integer, j As Integer, Zelle As Range
         For Each Zelle In Cells(28, 4)
             If Len(Zelle) > 60 Then
                 arr = Split(Zelle, " "): j = 5
                 For i = 0 To UBound(arr)
                     If Len(Worksheets("Zeichnungstabelle").Cells(j, 18) & IIf(IsEmpty(Worksheets("Zeichnungstabelle").Cells(j, 18)), "", " ") & arr(i)) > 60 Then j = j + 1
                     If Worksheets("Zeichnungstabelle").Cells(5, 18) = "" Then Worksheets("Zeichnungstabelle").Cells(j, 18) = Worksheets("Zeichnungstabelle").Cells(j, 18) & IIf(IsEmpty(Worksheets("Zeichnungstabelle").Cells(j, 18)), "", " ") & arr(i)
                 Next i
             Else
                 Worksheets("Zeichnungstabelle").Cells(5, 18) = Zelle
             End If
         Next Zelle
      End Sub
    4. Schließe den VBA-Editor und kehre zu Excel zurück.

    5. Führe das Makro aus: Drücke ALT + F8, wähle text und klicke auf Ausführen.

    Dieses Makro hilft Dir, den Zelleninhalt nach bestimmten Zeichen zu trennen und ermöglicht es, einen langen Text in mehreren Zellen untereinander anzuzeigen.


    Häufige Fehler und Lösungen

    • Fehler: "Typenunterschied"

      • Lösung: Stelle sicher, dass die Zelle, die Du referenzierst, tatsächlich Text enthält und keine anderen Datentypen.
    • Fehler: Text wird nicht korrekt aufgeteilt

      • Lösung: Überprüfe die Logik im VBA-Code, insbesondere die Bedingungen für das Einfügen von Trennzeichen und den Zähler.
    • Fehler: Makro läuft nicht

      • Lösung: Stelle sicher, dass Makros in Excel aktiviert sind. Überprüfe unter Datei > Optionen > Trust Center > Einstellungen für das Trust Center.

    Alternative Methoden

    Wenn Du keine VBA-Lösung verwenden möchtest, kannst Du auch die folgenden Excel-Funktionen nutzen:

    • TEXTVERKETTEN: Verwende die Funktion TEXTVERKETTEN, um Text aus mehreren Zellen zusammenzuführen und dabei eine maximale Zeichenanzahl zu berücksichtigen.

    • LINKS und RECHTS: Mit diesen Funktionen kannst Du Text in einer Zelle nach einer bestimmten Anzahl von Zeichen aufteilen.

    • TEXTN(): Diese Funktion erlaubt es Dir, Text bei jedem Leerzeichen oder Zeichen zu teilen und die Anzahl der Zeichen zu begrenzen.


    Praktische Beispiele

    1. Beispiel für das Trennen nach Leerzeichen:

      Angenommen, Du hast den Text "Das ist ein Beispieltext" in Zelle D27. Um diesen Text in Zelle V5 auf 60 Zeichen pro Zeile zu begrenzen, kannst Du den oben genannten VBA-Code verwenden.

    2. Beispiel für das Trennen nach bestimmten Zeichen:

      Wenn Du den Text "Hallo|Welt|Dies|ist|ein|Test" hast, wird das Makro nach jedem Pipe-Zeichen (|) die Textteile in die nächste Zelle unter V5 übertragen.


    Tipps für Profis

    • Nutze die Funktion WENN zusammen mit LÄNGE, um zu überprüfen, ob der Text in einer Zelle die zulässige Länge überschreitet, bevor Du das Makro ausführst.
    • Experimentiere mit den Funktionen SPLIT und JOIN, um flexiblere Textverarbeitungen zu ermöglichen.
    • Verwende benutzerdefinierte Funktionen (UDFs), um die Trennlogik noch weiter zu verfeinern.

    FAQ: Häufige Fragen

    1. Wie kann ich den VBA-Code anpassen, um mehr als 4 Zellen zu verwenden? Du kannst die Zeile ReDim Preserve arr(3) anpassen, um die Anzahl der Zellen zu erhöhen.

    2. Was passiert, wenn der Text weniger als 60 Zeichen hat? In diesem Fall wird der gesamte Text in der angegebenen Zelle (z.B. V5) angezeigt, ohne dass eine Trennung erfolgt.

    3. Wie kann ich das Makro automatisch ausführen lassen, wenn ich den Text in D27 ändere? Du kannst das Makro an das Worksheet_Change-Ereignis binden, um es automatisch auszuführen, wenn Änderungen in der Zelle D27 vorgenommen werden.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige