Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1188to1192
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 splitten III.

Text splitten III.
bernie
Hallo,
ich hatte bereits zum Thema mehrere Antworten bekommen. Gerd L hatte gefragt, was ich denn von Luc verwendet hatte, um Text (mehr als 265 Zeichen) splitten zu können.
Luc hatte auf verweisen:
Rem Fkt fügt Zeilenumbrüche in Text an prädest Stelle ein (teilw erweit Var zu TinLines aus _
FXss)
' Max Länge von Bezug ist 255 Zeichen (ggf Bezug teilen), wenn er keinen Bereich reprä _
sentiert;
' wenn Arg2 fehlt, ergibt sich maxZeilenlänge als 2xQuotient aus FmlZellBreite u.-Schriftgröß _
e;
' wenn Argg3-5 fehlen, entfallen die entsprd Operationen - Arg3 ist Relativ- _
Silbentrennzeichen,
' Arg4 gibt evtl Einzug nach Zeilenumbruch an (mfache Leerzeichenzahl, MindLeerzAnzahl ca 1-3) _
,
' Arg5 gibt an, ob es sich um Nicht-Proportionalschrift handelt (Courier wird automat erkannt) _
.
' Vs1.2 - Autor: LSr - 1pub: Herber 20090513(1.0)/0701(1.2) - cd: 20090513 - lupd: 20090626n
Function TxRows(ByVal Bezug As String, Optional ByVal maxZeilLg As Integer, Optional ByVal  _
relTrennZ _
As String, Optional ByVal relEinzug As Integer, Optional npFont As Boolean)
Const nZtrenn As String = "&/}])>|=\*+~;,:._-", vZtrenn As String = "&/{[( "")
c = vbLf & String(CInt(relEinzug * (Qws / rezMp) ^ (1 + npFont)), " ")
While i + t  0 Then
For j = 1 To i + t: t = t - CInt(Mid(a, j, 1) = relTrennZ): Next j
If t > 0 Then
For j = 1 To t: t = t - CInt(Mid(b, j, 1) = relTrennZ): Next j
a = Left(b, i + t)
End If
End If
b = Mid(b, i + t + 1)
If Left(b, 1) = " " Then
TxRows = TxRows & a & c: b = Mid(b, 2)
ElseIf Right(a, 1) = " " Then
TxRows = TxRows & Left(a, Len(a) - 1) & c
ElseIf Left(b, 1) = relTrennZ Then
TxRows = TxRows & a & "-" & c
ElseIf Right(a, 1) = relTrennZ Then
TxRows = TxRows & Left(a, Len(a) - 1) & "-" & c
ElseIf InStr(vZtrenn, Left(b, 1)) > 0 Or InStr(nZtrenn, Right(a, 1)) > 0 Then
TxRows = TxRows & a & c
Else: i = i - 1: w = True: b = a & b
End If
If w Then
If i + t  0 Then
maxZeilLg = CInt((maxZeilLg - relEinzug) * mzlRd ^ (1 + npFont))
relEinzug = 0
End If
Wend
TxRows = TxRows & b: Set ac = Nothing
If r Then TxRows = Replace(TxRows, relTrennZ, "")
End Function
Die Funktion läuft perfect - nur werden eben hier nur die ersten (bis 265 Zeichen) getrennt bzw. in B1 übernommen.
Um die

Function anzusteuern, hatte ich die Formel
=LINKS(TxRows(LINKS(a1;255);245);SUCHEN(ZEICHEN(10);TxRows(LINKS(a1;255);245))-1)
verwendet. Da in A1 aber Text - blödsinnigerweise bis 900 Zeichen steht - möchte ich diesen so  _
trennen, daß in B1, C1 usw. der weitere Text mit max. Länge von 265 Zeichen steht.
Ich könnte mir als VBA laie das Ganze so verstellen, daß zunächst der Text als gesamtes  _
ausgelesen und dann gesplittet und die Nachbarzellen (B1, C1 ...)   bis zum Textende ausgegeben wird.
Leider fehlt mir da jede Peilung.
Bernie


		

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Gerade hat der Mist-Lap meinen Text vernichtet!
30.11.2010 02:27:52
Luc:-?
Diese saudämlichen Browser-Tastenfktt! Wehe man erwischt mal zufällig die falsche. Außerdem ist jetzt sowieso Server-Zeit…
Also viel später nochmal! Wird aber fmlaufwendig u.nur ein Vorschlag!
Gruß Luc :-?
Zweitversuch
02.12.2010 02:40:46
Luc:-?
Morn, Bernie,
mit Xl12 würde das wahrscheinl klappen und du könntest den Text so mit einer MatrixFml in ungefähr gleichlange Teile sinnvoll geteilt in unter- bzw nebeneinander liegenden Zellen unterbringen…
Für Vss<12 hatte ich auch mal was entwickelt (damit irgendwie auch längere TextArgumente akzeptiert wdn), aber das ist nur bedingt praxistauglich u.sicher zu kompliziert…
Deshalb schlage ich vor, dass du den Text grob in maximal 4 (gleichlange) Teile teilst (mit Fml u. Zeichen­abzählung) und die mit TxRows nachbehandelst. Den Text, der jeweils rechts übrig bleibt, dem nächsten Teil voranstellen, davon einen Text in ungefährer Differenzlänge zu 265 abschneiden und den ebenfalls mit TxRows behandeln (entsprd Zeilenlänge einstellen), so dass beim Zusammen­setzen beider Textteile Länge 265 nicht überschritten wird. Ggf bekommst du das ja mit nur 1er Fml hin, sonst musst du halt Hilfszellen benutzen.
Evtl findest du auf ExcelFormeln noch 'ne FmlLösung mit StandardFmln, denn auf so etwas wie TxRows wird dort leider verzichtet…
Gruß Luc :-?
Anzeige
AW: Zweitversuch
02.12.2010 11:22:02
bernie
Hallo Luc,
habe mir schon gedacht, daß das zu aufwändig wird.
Verwende jetzt in B1 Dein TxRows dann in C1 =RECHTS(A1;LÄNGE(A1)-LÄNGE(B1)), dann in D1 wieder TxRows usw.
Ist zwar etwas mühsam, aber erfolgreich. Nochmals vielen Dank für Deine Hilfe
Bernie
Bitte! Gern geschehen! ;-) owT
02.12.2010 15:51:21
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige