Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1716to1720
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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
    

  • 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.
    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
    Anzeige

    330 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige