maximale Textlänge
#1
Guten Tag
Ich habe folgendes Problem:

1.) In einer Zelle ist ein Text mit variabler Länge (z.B.: 120 Zeichen).
2.) Dieser Text soll auf mehrere Zeilen (1 bis 5 Zeilen) aufgeteilt werden. Die Textlänge wäre zum Beispiel 25 Zeichen.
3.) Dabei soll das einzelne Wort nicht getrennt werden, sondern zuvor an dem letzten Leerzeichen getrennt werden.

Beispiel: Text steht in A1
Dabei soll das einzelne Wort nicht getrennt werden, sondern zuvor an dem letzten Leerzeichen getrennt werden.

1. Zeile (A2): Dabei soll das einzelne                                    - Trennung vor "Wort"
2. Zeile (A3): Wort nicht getrennt                                         - Trennung vor "werden"
3. Zeile (A4): werden, sondern zuvor an                               - paßt zufällig werden
4. Zeile (A5): dem letzten Leerzeichen                                  - Trennung vor "getrennt"
5. Zeile (A6): getrennt werden.                                            - der Rest

Wie kann man dies am geschicktesten lösen?
Antworten Top
#2
Hola,
https://www.herber.de/excelformeln/pages...eilen.html
Gruß,
steve1da
Antworten Top
#3
Hi
wie man das geschickt lösen kann, hängt ein bisschen davon ab, wie die Aufgabenstellung tatsächlich aussieht.

wenn die Texte nicht länger als 256 Zeichen sind, gibt es auch folgende Methode in zwei Schritten:

1. Zelle mit dem Text mit "Textumbruch" formatieren und die Spaltenbreite so einstellen, dass  die gewünschte Zeilenzahl erreicht wird
2. führe folgenden Menüpunkt aus: Start - Bearbeiten - Ausfüllen - Ausrichten

die Funktion "Ausrichten" verteilt dann den Text entsprechend den Zeilenumbrüchen in die darunter liegenden Zellen.
Funktioniert aber leider nur mit kurzen Texten (max 256 Zeichen)

eine rechnerische Umsetzung mit Formel wird schwierig, vor allem wenn berücksichtigt werden soll, dass bei einer Proportionalschriftart die Anzahl der Zeichen pro Zeile variabel sein kann.


Gruß Daniel

Hi
wenn es eine Formellösung sein soll, dann vielleicht in Kombination mit VBA:

folgender Code in ein allgemeines Modul

Code:
Function Trennzeichen_Einfügen(Trennzeichen As String, Zeilenlänge As Long, Text As String) As String
Dim i As Long
Dim x As Long, y As Long
For i = 1 To Len(Text)
    x = x + 1
    If Mid(Text, i, 1) = " " Then
        If (x - 1) > Zeilenlänge Then
            x = 0
            i = y
            Mid(Text, y, 1) = Trennzeichen
        End If
        y = i
    End If
Next
Trennzeichen_Einfügen = Text
End Function

in die Zelle A2 dann folgende Formel:
25 ist die Anzahl der Zeichen pro Zeile
=TEXTTEILEN(Trennzeichen_Einfügen("|";25;A1);;"|")

Gruß Daniel
Antworten Top
#4
Hallo,

anbei eine mögliche Lösung mit dynamischen Arrays. In A1 steht der Text, in A2 die gewünschte Länge.

PHP-Code:
A3=LET(vnText; $A$1;
       vnLänge; $A$2;
       fnSplit; LAMBDA(T;N; WENN(LÄNGE(T) > N;
                LET(P; WENNFEHLER(XVERGLEICH(" "; TEIL(LINKS(T; N); SEQUENZ(LÄNGE(LINKS(T; N))); 1); 0; -1); LÄNGE(INDEX(TEXTTEILEN(T; " "); 1; 1)));
                    U; GLÄTTEN(LINKS(T; P));
                    V; GLÄTTEN(RECHTS(T; LÄNGE(T) - P)); HSTAPELN(U; V)); HSTAPELN(T; "")));
       vnMatrix; REDUCE(HSTAPELN(""; vnText); SEQUENZ(AUFRUNDEN(LÄNGE(vnText) / vnLänge; 0));
                 LAMBDA(A;V; VSTAPELN(A; fnSplit(INDEX(A; V; 2); vnLänge))));
       INDEX(WEGLASSEN(vnMatrix; 1); 0; 1))

Hierbei ist fnSplit eine Lambda-Funktion, die einen Text (Argument T) aufteilt, indem das erste Leerzeichen
von links aus gesehen gesucht wird, sofern die Textlänge > der gewünschten Länge (N) ist. Das Ergebnis
ist ein zweispaltiges Array mit den zwei Textanteilen. Der Anteil rechts ist dann immer der "Rest-Text".
Über REDUCE wird iteriert, wo dann der "Rest-Text" in der jeweiligen Iteration an fnSplit übergeben wird.
Zum Schluß wird dann nur die erste Spalte genommen.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
[-] Folgende(r) 1 Nutzer sagt Danke an maninweb für diesen Beitrag:
  • LCohen
Antworten Top
#5
in VBA

Code:
Sub M_snb()
  y = 25
  ReDim sp(Len(Cells(1, 1)) \ y + 1, 0)
  sn = Split(Cells(1, 1))

  For Each it In sn
    If Len(c01 & it) <= y Then
      c01 = c01 & it & " "
    Else
      sp(n, 0) = Trim(c01)
      n = n + 1
      c01 = it & " "
    End If
  Next
  sp(n, 0) = Trim(c01)

  Cells(1, 5).Resize(UBound(sp) + 1) = sp
End Sub
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#6
Hi,

man muss nicht immer alles in PQ lösen, aber man könnte das so erledigen. In PQ_1 mit etwas VBA.

Chappy


Angehängte Dateien
.xlsb   PQ_Trennen.xlsb (Größe: 31,87 KB / Downloads: 6)
Antworten Top


Gehe zu:


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