Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1192to1196
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

Unlösbar ???

Unlösbar ?
Franz
Hallo zusammen,
ein besserer Betreff fiel mir nicht ein. Kann gerne geändert werden.
In eine Zelle D1 wird ein längerer Fließtext eingetragen. Dieser soll per VBA bedarfsgerecht auf die Zellen A2 bis A20 aufgeteilt werden. Ist der Fliesstext zu lange, soll der der Rest notgedrungen dem gleichen Schema ab A21 eingetragen werden.
Folgende Vorgaben gibt es:
Jede Zelle darf maximl 60 Zeichen haben. Wörter dürfen nicht getrennt werden. Passt das Wort nicht mehr in die Zeile, so muss in die nächste Zeile.
Als weitere Schwierigkeit sollen die Eingaben oder immer alleine in einer Zelle stehen.
Wer kann mir bei diesem schier unlösbaren Problem helfen? Danke im Voraus!
Gruss Franz
Ergänzung
16.01.2011 14:51:35
Franz
als weitere Schwierigekit sollen die Eingaben
Kleiner Zeichen na Größer Zeichen
oder
Kleiner Zeichen nz Größer Zeichen
immer alleine in einer Zelle stehen. Bekomme die richtigen Zeichen nicht hin.
Formel, aber ohne die Ergänzung
16.01.2011 19:11:11
Erich
Hi Franz,
die Formeln in A3:B3 kannst du nach unten kopieren, die Formeln in Zeile 2 sind anders:
 AB
2In eine Zelle D1 wird ein längerer Fließtext eingetragen.59
3Dieser soll per VBA bedarfsgerecht auf die Zellen A2 bis57
4A20 aufgeteilt werden. Ist der Fliesstext zu lange, solle58
5der der Rest notgedrungen dem gleichen Schema ab A2153
6eingetragen werden. als weitere Schwierigekit sollen die57
7Eingaben Kleiner Zeichen na Größer Zeichen oder Kleiner56
8Zeichen nz Größer Zeichen immer alleine in einer Zelle55
9stehen. Bekomme die richtigen Zeichen nicht hin. Und die57
10Formel kanns auch nicht.25

Formeln der Tabelle
ZelleFormel
A2{=LINKS(D$1;-1+MAX(WENN(TEIL(D$1;ZEILE($1:$60); 1)=" ";ZEILE($1:$60); 1)))}
B2=LÄNGE(A2)+2
A3{=TEIL(D$1;SUMME(B$2:B2); MAX(WENN(TEIL(D$1; ZEILE(INDEX(A$1:A$9999;SUMME(B$2:B2)):INDEX(A$1:A$9999;SUMME(B$2:B2)+59)); 1)=" "; ZEILE(INDEX(A$1:A$9999;SUMME(B$2:B2)):INDEX(A$1:A$9999;SUMME(B$2:B2)+59)); 1)) -SUMME(B$2:B2))}
B3=LÄNGE(A3)+1
A4{=TEIL(D$1;SUMME(B$2:B3); MAX(WENN(TEIL(D$1; ZEILE(INDEX(A$1:A$9999;SUMME(B$2:B3)):INDEX(A$1:A$9999;SUMME(B$2:B3)+59)); 1)=" "; ZEILE(INDEX(A$1:A$9999;SUMME(B$2:B3)):INDEX(A$1:A$9999;SUMME(B$2:B3)+59)); 1)) -SUMME(B$2:B3))}
B4=LÄNGE(A4)+1
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen

@Walter: Die Nr. 326 scheint mir bei dieser Fragestellung nicht wirklich zu helfen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Formel, auch ohne die Ergänzung, kürzer
16.01.2011 19:17:27
Erich
Hi,
etwas küruer auch so:
 AB
2In eine Zelle D1 wird ein längerer Fließtext eingetragen.59
3Dieser soll per VBA bedarfsgerecht auf die Zellen A2 bis116
4A20 aufgeteilt werden. Ist der Fliesstext zu lange, solle174
5der der Rest notgedrungen dem gleichen Schema ab A21227
6eingetragen werden. als weitere Schwierigekit sollen die284
7Eingaben Kleiner Zeichen na Größer Zeichen oder Kleiner340
8Zeichen nz Größer Zeichen immer alleine in einer Zelle395
9stehen. Bekomme die richtigen Zeichen nicht hin. Und die452
10Formel kanns auch nicht.477

Formeln der Tabelle
ZelleFormel
A2{=LINKS(D$1;-1+MAX(WENN(TEIL(D$1;ZEILE($1:$60); 1)=" ";ZEILE($1:$60); 1)))}
B2=LÄNGE(A2)+2
A3{=TEIL(D$1;B2;MAX(WENN(TEIL(D$1;ZEILE(INDEX(A$1:A$9999;B2):INDEX(A$1:A$9999;B2+59)); 1)=" "; ZEILE(INDEX(A$1:A$9999;B2):INDEX(A$1:A$9999;B2+59)); 1)) -B2)}
B3=B2+LÄNGE(A3)+1
A4{=TEIL(D$1;B3;MAX(WENN(TEIL(D$1;ZEILE(INDEX(A$1:A$9999;B3):INDEX(A$1:A$9999;B3+59)); 1)=" "; ZEILE(INDEX(A$1:A$9999;B3):INDEX(A$1:A$9999;B3+59)); 1)) -B3)}
B4=B3+LÄNGE(A4)+1
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: lösbar per Formel
16.01.2011 16:27:51
Franz
Ach Du Scheisse. Wer wird denn daraus schlau und vor allem wer kommt auf solche Ideen? Das würde bei mir im Chaos enden. Hut ab.
Ich steig da leider aber überhaupt nicht durch.
AW: lösbar per Formel
16.01.2011 19:34:58
Franz
Hallo Erich,
vielen Dank für Deine Super-Formel. Damit hast Du mir sehr geholfen, es klappt einwandfrei.
Meinst Du, Du kriegst das auch mit der weiteren Schwiergkeit, dass
Kleiner Zeichen na Größer Zeichen
oder
Kleiner Zeichen nz Größer Zeichen
immer alleine in einer Zelle stehen noch hin. Bekomme die Zeichen hier im Dialog nicht angezeigt.
Auf alle FÄlle schon einmal ein großes danke schön an Dich!
Gruß Franz
Anzeige
Offen
16.01.2011 21:35:13
Franz
AW: Offen
16.01.2011 21:35:34
Franz
@ Sepp: Letzte Rettung. Hast Du
17.01.2011 19:30:36
Franz
nicht eine Idee?
Vielen Dank!
Gruß Franz
@ Sepp: Noch eine Schwiergigkeit
17.01.2011 20:16:02
Franz
Hallo Sepp,
vielen Dank für die schnelle Antwort. Ich habe noch eine Baustelle (also die angesprochene weitere Schwierigkeit im Verlauf des Beitrages).
In der hochgeladenen Datei habe ich das Problem - da hier im Dialog die Zeichen nicht angezeigt werden - einmal dargestellt.
https://www.herber.de/bbs/user/73118.xls
Vielen Dank für Deine Hilfe!
Gruß Franz
Anzeige
AW: @ Sepp: Noch eine Schwiergigkeit
17.01.2011 20:56:17
Josef

Hallo Franz,
will nicht sagen, das man das nicht per Formel lösen kann, aber da würde ich auf VBA ausweichen.
Ist die Vorgabe, max 60 Zeichen pro Zeile, wenn > im Text, dieses in separate Zeile?

Gruß Sepp

AW: @ Sepp: Noch eine Schwiergigkeit
17.01.2011 21:03:21
Franz
Hallo Sepp,
das ist nett, dass Du mir hilfst.
Es gibt zwei Vorgaben:
60 Zeichen pro Zeile, wobei Wörter nicht getrennt werden dürfen (optimal wäre, wenn man die Zahl im Code leicht ändern könnte)
Die beiden Zeichen müssen immer alleine in einer Zelle stehen. D.h. eine Zelle kann auch weniger als 60 Zeichen haben, wenn eins der beiden Zeichen dann auftaucht.
Soll ich noch eine Beispieldatei hochladen?
Gruß Franz
Anzeige
AW: @ Sepp: Noch eine Schwiergigkeit
17.01.2011 22:07:09
Josef

Hallo Franz,
teste mal.

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Sub franz()
  Dim vntText As Variant, strTmp As String
  Dim lngIndex As Long, lngPos As Long, lngC As Long
  Dim strOutput() As String
  
  Const MAXLEN As Integer = 60 'maximale Textlänge
  
  With ActiveSheet
    .Columns(1).ClearContents 'Spalte A leeren
    
    vntText = Split(.Range("D1").Text, " ")
    
    Do
      If vntText(lngC) Like "<*>" Then
        Redim Preserve strOutput(lngIndex)
        strOutput(lngIndex) = vntText(lngC)
        lngIndex = lngIndex + 1
      Else
        Do While Not vntText(lngC) Like "<*>" And Len(Trim$(strTmp) & vntText(lngC)) <= MAXLEN
          strTmp = strTmp & vntText(lngC) & " "
          lngC = lngC + 1
          If lngC > UBound(vntText) Then Exit Do
        Loop
        If Len(strTmp) Then
          Redim Preserve strOutput(lngIndex)
          strOutput(lngIndex) = Trim$(strTmp)
          lngIndex = lngIndex + 1
          lngC = lngC - 1
        End If
      End If
      lngC = lngC + 1
      strTmp = ""
    Loop While lngC <= UBound(vntText)
    
    .Range("A1").Resize(UBound(strOutput) + 1, 1) = Application.Transpose(strOutput)
  End With
  
End Sub

Gruß Sepp

Anzeige
@ Sepp: Noch ein Fehler
18.01.2011 08:02:44
Franz
Hallo Sepp,
es sieht ganz gut aus. Nur werden die Sonderzeichen
na (kleiner / größer kriege ich hier nicht rein)
nz (kleiner / größer kriege ich hier nicht rein)
nicht alleine in eine Zeile eingefügt. Vielmehr so verstehe ich das ganze, wird ein Zeilenumbruch erzeugt.
Es steht dann beispielsweise in einer Zelle (z.B. A10) so:
Franz hat keine Ahnung.
nz
Nur Sepp kann das Problem lösen.
Es sollte aber so aussehen:
in A10 = Franz hat keine Ahnung.
in A11 = nz
in A12 = Nur Sepp kann das Problem lösen.
Kannst Du noch einmal schauen.
Vielen Dank!
Anzeige
AW: @ Sepp: Noch ein Fehler
18.01.2011 10:36:17
Josef

Hallo Franz,
dann entsprechen deine Originaltexte aber nicht deinen Beispieltextetn!
Lade einen entsprechenden Text hoch.
P.S.: das < bzw. > kannst du so & lt ; bzw. & gt ; (ohne Leerzeichen) eingeben.

Gruß Sepp

Datei hochgeladen
18.01.2011 12:15:04
Franz
Hallo Sepp,
guck mal, habe auf der Arbeit mal was gebastelt (siehe Reiter neu).
https://www.herber.de/bbs/user/73125.xls
Kannst Du damit was anfangen?
Gruß Franz
Anzeige
andere Voraussetzungen
18.01.2011 12:48:58
Erich
Hi Franz,
ich bin zwar nicht Sepp, kann aber vielleicht doch etwas beitragen.
Deine "Sonderzeilen" mit <xyz> werden in deinem Text nicht durch Leerzeichen (davor und dahinter) begrenzt.
Das Leerzeichen war ist aber das Trennungszeichen zwischen Wörtern.
Sepps Code habe ich ein wenig ergänzt. Vorab werden Chr(13) und Chr(10) durch Leerzeichen ersetzt.
Probier mal

Sub franz2()
Dim arrT As Variant, strTmp As String
Dim lngE As Long, lngC As Long, lngT As Long
Dim strErg() As String
Const MAXLEN As Integer = 60 'maximale Textlänge
With ActiveSheet
.Columns(1).ClearContents 'Spalte A leeren
strTmp = .Range("D1").Text
strTmp = Replace(Replace(strTmp, Chr(13), " "), Chr(10), " ")
arrT = Split(strTmp, " ")
ReDim Preserve strErg(UBound(arrT))
For lngC = 0 To UBound(arrT)
strTmp = ""
If arrT(lngC) Like "" Then
strErg(lngE) = arrT(lngC)
lngE = lngE + 1
Else
lngT = lngC
Do While Not arrT(lngT) Like "" And Len(Trim$(strTmp) & arrT(lngT))  UBound(arrT) Then Exit For
Loop
strErg(lngE) = Trim$(strTmp)
lngE = lngE + 1
lngC = lngT - 1
End If
Next lngC
ReDim Preserve strErg(lngE)
If Len(strTmp) Then
strErg(lngE) = Trim$(strTmp)
lngE = lngE + 1
End If
.Cells(1, 1).Resize(UBound(strErg) + 1, 1) = Application.Transpose(strErg)
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: andere Voraussetzungen
18.01.2011 13:45:39
Franz
Hallo Erich,
da biste ja auch wieder.
Ich glaube, das funzt so wie es haben will. Habe auch mal die Zellenlänge geändert. Das sieht sehr gut aus.
Vielen Dank Euch beiden! Das war doch eine klasse Teamarbeit - ich selbst konnte nur nicht viel beitragen, denn ich verstehe nicht was da passiert. Hut ab!
Gruß Franz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige