Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
936to940
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
936to940
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Text aufteilen

Text aufteilen
30.12.2007 22:24:00
Olaf
Guten Abend,
ich habe folgendes Probleme:
In einer Zelle stehen Beschreibungen die teilweise bis zu 200 Zeichen enthalten. Es dürfen aber nur 50 sein.
Ich suche eine Formel (habe schon den ganzen Tag mit Versuche verbracht) die den Text auf 3 Spalten aufteilt.
1. Spalte 50 zeichen
2. Spalte 50 Zeichen
3. Spalte beliebig viele
Da nach 50 Zeichen ein Wort abgeschnitten sein könnte, müsste die Formel, wenn sie über 50 Zeichen findet, zum vorherigen Leerzeichen zurückgehen und dort trennen.
Vielen Dank für Eure Hilfe!
Grüße
Olaf

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Text aufteilen
30.12.2007 22:41:21
Olaf
Hallo Hajo,
der die Liste ist schon fertig, laso nach der Eingabe.
Grüße
Olaf

AW: Text aufteilen
30.12.2007 22:49:48
Hajo_Zi
Hallo Olaf,
dann siehe Lösung von Boris.
Gruß Hajo

AW: Text aufteilen
30.12.2007 22:48:51
Olaf
Hallo Boris,
irgendwie klappt das nicht so, wird nur jede 2. Zeile bearbeitet und es steht dabei: In B4 steht.
Grüße
Olaf

AW: Dann hast Du es falsch umgesetzt...
30.12.2007 23:15:00
Olaf
Hi Boris,
Deine Formel schreibt den Text in die unten stehenden Zellen, ich wollte abere den Text auf weitere Spalten aufgeteilt haben:
Langertetxt 50 Zeichen| weiter im Text, auch 50 Zeichen| noch immer langer text, keine Zeichenbegrenzung mehr
Das geht dann noch 1000 Zeilen so weiter.
Grüße
Olaf

Anzeige
Würde dir eine Fkt helfen, die Text bis...
30.12.2007 23:35:00
Luc:-?
...ca 250 Zeichen Länge sinnvoll (also Trennung bei Satzzeichen u.ä.) in Zeilen aufteilt, Olaf?
Die potenziellen Zeilen könntest du dann mit einer umgebenden Formel ála excelformeln auf Spalten verteilen.
Gruß Luc :-?

AW: Würde dir eine Fkt helfen, die Text bis...
30.12.2007 23:39:00
Olaf
Hallo Luc:-?
sinnvoll ist immer gut :-) Satzzeichen gibt es aber leider nicht. Aber es sollen keine Wörter getrennt werden sondern ebene bei den Leerzeichen, die 50 Zeichen sollten aber so weit wie möglich ausgenutzt werden.
Hohe Ansprüche :-)
Grüße
Olaf

AW: Würde dir eine Fkt helfen, die Text bis...
31.12.2007 00:42:00
Daniel
Hi
da halte ich es für sinnvoll, sich selber eine kleine Text-Funktion zu schreiben, die diese Aufgabe erledigt.
Insbesondere deshalb, weil die hiefür benötigte InstrRev-Funktion keine Entsprechung in einer Excel-Funktion hat.
Das wäre der Code:

Function TextAufteilen(Txt As String, Pos As Integer, ParamArray AnzZeichen() As Variant) As  _
String
Dim arrTxt() As String
Dim i As Integer
Dim pt As Integer
Dim txt1 As String
ReDim arrTxt(UBound(AnzZeichen) + 1)
Pos = Pos - 1
Pos = WorksheetFunction.Min(Pos, UBound(arrTxt))
Pos = WorksheetFunction.Max(Pos, 0)
For i = 0 To UBound(AnzZeichen)
If Len(Txt) > AnzZeichen(i) Then
pt = InStrRev(Left(Txt, AnzZeichen(i)), " ")
arrTxt(i) = Left(Txt, pt)
Txt = Mid(Txt, pt + 1)
Else
arrTxt(i) = Txt
Txt = ""
End If
Next
arrTxt(i) = Txt
TextAufteilen = arrTxt(Pos)
End Function


Trennzeichen ist das Leerzeichen, das Leerzeichen an der Trennstelle bleibt erhalten und gehört zum linken Textteil.
die Parameter sind folgende
1. der Text, den du aufteilen willst
2. die Nummer des Teilstrings, den du zurückgeben willst, beginnend mit 1
3. die Anzahl Zeichen für Teilstring 1
4. die Anzahl Zeichen für Teilstring 2
5. ...
6. ...
formelbeispiel: =TextAufteilen(A1;2;50;50)
Die Menge der Parameter "Anzahl Zeichen" ist beliebigt und hängt davon ab, in wieviele Teilstrings du deinen Text zerlegen willst.
dabei wird immer ein Teilstring mehr angelegt, als Parameter angegeben werden, weil in den letzten Teilstring alle restlichen Zeichen reinkommen und er daher keine Vorgabe für "Anzahl Zeichen" bekommen darf.
Gruß, Daniel

Anzeige
Also dann die (abgespeckte) Fkt,...
31.12.2007 01:09:15
Luc:-?
...Olaf!

Rem Aufteilung eines Langtextes in Zeilen innerhalb einer Zelle -
'   TextLgLimit bei num or Aufruf aus and Pgm: 255 Zeichen - sonst nur xlWorksheetTextLgLimit
'   Autor LSr.CyWorX    -CDate 2003/4   -LUpdate 20070424t  -Anpass f.Pub auf herber 20071231
Function TxInLines(ByVal Text As String, Optional ByVal MaxZLänge, Optional ByVal RefZelle)
Dim fs As Integer, i As Integer, j As Integer, k As Integer, p As Integer, mzl As Integer,  _
_
a As String, b As String, c As String, z As Boolean
Const UbrZ = "([{-)]};:=%!?_+*/&| ,."
On Error Resume Next
If IsError(Application.Caller) Then z = True
If IsMissing(RefZelle) Then
Set RefZelle = ActiveCell
End If
With RefZelle
fs = IIf(.Font.Size = 0, 1, .Font.Size)
If IsMissing(MaxZLänge) Then
mzl = CInt(.Width * 1.888 / fs - .Font.Size / 4)
mzl = IIf(mzl  0 Then mzl = MaxZLänge Else TxInLines = CVErr(2015): GoTo ex
Else: TxInLines = CVErr(2036): GoTo ex
End If
End With
k = WorksheetFunction.RoundUp(Len(Text) / mzl, 0)
If k  255) Then              'TextLgLimit bei num or  _
Aufruf aus anderem Pgm
TxInLines = Text
ElseIf Len(Text) > mzl Then
For i = 0 To k
j = 0
If Len(TxInLines) - i + 1 > Len(Text) Then Exit For
a = Mid(Text, Len(TxInLines) - i + 1, mzl)
Do While IsNumeric(a)                                       'Sicherung gg Zerreißen  _
v.Zahlen
j = j + 1
a = Mid(Text, Len(TxInLines) - i + 1, mzl + j)
If Not IsNumeric(Right(a, 1)) Then
a = Left(a, Len(a) - 1)
Exit Do
ElseIf Mid(Text, Len(TxInLines) - i + Len(a) + 1, 1) = "" Then Exit Do
End If
Loop
For j = 0 To mzl - 1
b = Left(a, mzl - j)
c = Mid(a, mzl - j + 1)
If Len(a)  19
If IsNumeric(Mid(a, mzl - j - 1, 1)) And IsNumeric(Mid(a, mzl - j + 1, 1))  _
Then
Rem bei numerischen Textteilen entfallen `, .´ als UbrZ
Else: Exit For
End If
Case Else
Exit For
End Select
Next j
If j = mzl And c  "" Then
TxInLines = TxInLines & b & vbLf
If a = b & Left(c, Len(a) - Len(b))  "" Then
c = Mid(c, Len(a) - Len(b) + 1)
End If
ElseIf c = "" And Len(TxInLines) + Len(a) - i 


Die zusätzlichen Trenntiefstriche wdn von der Forumssoftware eingefügt. Ich habe nur einen bei der Dim-Anweisung eingefügt. Die anderen kannst du entfernen!
Das Ganze hat ein wenig gedauert, weil ich die udFkt noch um 1 Argument, etliche dann unnötige Variablen, 2 weitere verwendete udFktt und einige Codezeilen "erleichtern" musste... ;-)
Falls du dazu noch Anwendungshinweise und -beispiele benötigst, kann ich dir auch noch den Hilfetext dazu aus meinem FktPaket posten.
Für deinen Zweck musst du die Fkt auf jeden Fall noch in eine Formel einbinden, die nach den erzeugten Zeilenumbrüchen (Zeichen(10)) fragt.
Du (und alle anderen Leser) kannst die Fkt natürlich auch noch vielseitiger einsetzen... ;-)
Gruß und schon mal Guten Rutsch!
Luc :-?
PS: Wenn du das auch für Zellbezüge geltende TextLgLimit umgehen willst, musst du die Fkt direkt "um den Text herum" schreiben (dafür habe ich auch eine Subroutine...).

Anzeige
AW: Auf Spaltenebene
31.12.2007 00:11:00
Olaf
Hallo Boris,
meisten funktioniert das gut, aber teilweise werden in der 2. Spalte nur 10 oder 15 Zeichen genommen un der Rest in die 3. geschrieben obwohl in der 2. genug platz ist.
Auch verschwinden manche Wörter einfach. Und in den Zellen in denen kein Text ist weil eben nur kurzer Text da war erscheint Wert, was aber nur ein schönheitsfehler ist mit dem ich leben kann.
Gruß
Olaf

Beispiele?
31.12.2007 00:16:14
{Boris}
Hi Olaf,
gib doch mal 2 Beispiele für nicht funktionierende Texte (bin jetzt zu faul, das selbst zu testen).
Grüße Boris

Anzeige
AW: Beispiele?
31.12.2007 00:27:41
Olaf
ACE 2 Client Gold Support/Subscription for 2 years EDU
ACE 2 Client Gold Support/Subscription for 3 years EDU
Wird getrennt ACE 2 Client Gold Support/Subscription for 3 | year |EDU
ACE 2 Client License
Hier fehlt dann License also:
ACE 2 Client
Gibt auch noch andere, aber die Symtome sind immer gleich .-)
Grüße
Olaf

Ändere nur die Formel...
31.12.2007 00:35:00
{Boris}
Hi Olaf,
in C2 ab, indem Du vorab auf die Restlänge überprüfst:
{=WENN(LÄNGE(A2)-LÄNGE(B2)<51;TEIL(A2;LÄNGE(B2)+2;999);LINKS(TEIL(A2;LÄNGE(B2)+2;999); MAX((TEIL(LINKS(TEIL(A2;LÄNGE(B2)+2;999);$B$1);SPALTE($1:$1);1)=" ")*SPALTE($1:$1))-1)) }
Denk dran: Arrayformel!
Grüße Boris

Anzeige
AW: Beispiele?
31.12.2007 00:36:55
Olaf
Noch ein Nachtrag,
wenn ich ein Leerzeichen an das Ende des urspürnlichen texts mache, also
Texteil 60 Zeichen +Lerrzeichen
dann wird richtig Textteil 50 Zeichern | restlichen 10 Zeichen
getrennt
Grüße
Olaf

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige