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

Anzahl Zeilen in einer Zelle

Anzahl Zeilen in einer Zelle
Maik.F
Hallo Excel-Freunde,
ich habe eine Zelle so formatiert, daß Zeilenumbrüche zugelassen sind. In einigen Zellen können bis zu fünf Zeilen entstehen. Die Zeilenumbrüche werden NICHT durch ALT + ENTER erzeugt, sondern entstehen aufgrund der Textlänge.
Gibt es eine Möglichkeit, die Anzahl der Zeilen innerhalb der Zelle (z.B. A1) zu zählen?
Eine Idee, die leider nicht funktioniert war: Range("A1").Rows.Count
Viele Grüße
Maik
...Eigentlich nicht, denn was soll man da...
26.06.2009 18:24:20
Luc:-?
...zählen, Maik?
Die einzige Möglichkeit bestünde darin, ein Pgm "erraten" zu lassen, wieviele automatische Zeilenumbrüche wohl erfolgen wdn. Dazu müsste errechnet wdn, wieviele Zeichen des verwendeten Fonts unter Berücksichtigung ggf unterschiedlicher Zeichenbreiten in eine Zelle gegebener Breite passen würden (Achtung! Die Automatik nutzt selten die volle Breite! Ist auch von FontStyle abhängig!). Und dann muss es davon ausgehend evtl auch noch rückwärts nach der nächstnäheren Soll-Umbruchstelle suchen und... und...
So etwas machen die LayOut-Pgmm von Druckereien. Willst du das wirklich nachbauen? Und dann noch unter xlBedingungen...!
Einfacher ist es da, eine udFkt zu schreiben, die "harte" Zeilenumbrüche in Abhängigkeit von einer als Argument angebbaren maxTextzeilenlänge setzt. Das macht schon genug Arbeit, ist aber aufwandsmäßig noch zu vertreten.
Ich hatte sowas hier mal im Projektteil einer xlMappe gepostet. Da du das in der Recherche kaum finden würdest, könnte ich den Code bei Interesse hier noch mal posten. Du könntest dann mit einer anderen Fkt die "harten" Zeilenumbrüche zählen. +1 ergibt dann die Zeilenzahl. Evtl dann auch mit vbFkt Split bei vbLf trennen und die Anzahl der Elemente zählen [Ubound(...)+1].
Gruß Luc :-?
Anzeige
AW: ...Eigentlich nicht, denn was soll man da...
26.06.2009 20:03:48
Maik.F
Hallo Luc,
das hört sich furchtbar kompliziert an. Vielleicht könntest Du trotzdem mal die Mappe posten, denn ich habe tatsächlich in der Recherche nichts gefunden. Vielen Dank...
Gruß, Maik
Habe die Mappe im Archiv gefunden,...
26.06.2009 21:26:58
Luc:-?
...Maik;
findest du hier. Die Mappe selbst muss dich nicht interessieren, nur wie ich deren Fmln in Zellen dargestellt habe. Die udFktt dafür findest du im Projektteil der Mappe. Besonders TxRows sollte dich interessieren — die Texte sollten nur nicht zu lang wdn – ausprobieren! Mit der udFkt Splitt könntest du den Ergebnistext von TxRows dann bei ZEICHEN(10) in zählbare Einzelzeilen zerlegen, die du mit ANZAHL2 zählen kannst; also...
=ANZAHL2(Splitt(TxRows("deinText";maxZeilenlänge);ZEICHEN(10)))
maxZeilenlänge ist in Zeichen anzugeben (empirisch festlegen)!
Falls du das Ganze noch mit einem relativen Worttrennzeichen "aufpeppen" willst — das steht jetzt auch zV; habe gerade eben dabei aber noch einen kleinen Mangel entdeckt, den ich noch korrigieren will. Bei Interesse poste ich dann hier auch noch die erweiterte udFkt.
Gruß Luc :-?
Anzeige
AW: Habe die Mappe im Archiv gefunden,...
27.06.2009 15:52:49
Maik.F
Hallo Luc,
die Formeln (z.B. in der Y-Spalte) haben schon etwas "Hirnschmalz" gekostet! Respekt! Ich muss mir jetzt noch überlegen, wie ich das in meinen Formeln umsetzen kann.
Wenn Du was Aktualisiertes hast würde es mich natürlich freuen, wenn Du das posten könntest.
Gruß, Maik
Hier dann die aktuelle Vs1.2,...
01.07.2009 03:06:54
Luc:-?
...Maik;
hat etwas gedauert, weil ich noch an anderen udFktt gearbeitet habe...

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


Denke, die von der Forumssoftware leider zusätzlich umgebrochenen (mit _) Vorbemerkungen sagen alles, aber hier noch ein Anwendungsbsp zu deinem Problem (passt in die vorliegende Mappe)...
Userbild
Gruß Luc :-?

Anzeige
AW: ggf über Zeilenhöhe
26.06.2009 18:38:10
Daniel
Hi
was funktionieren könnte, wäre die Zeilenhöhe für die Zeile automatisch einzustellen und dann über die Zeilenhöhe und Fontgrösse bzw die Zeilenhöhe einer Zelle mit einer Textzeile versuchen, auf die Anzahl der Textzeilen zu schließen.
funktioniert aber nur, wenn es in der Zeile keine weitere Zelle mit mehr Textzeilen gibt und die Schriftgrösse einheitlich ist.
du brauchst dann folgende Befehle:
Zeilenhöhte einstellen: Cells.EntireRow.Autofilt
Zeilenhöhge abfragen: Cells(1,1).Height
Gruß, Daniel
Gruß, Daniel
AutoFit nicht AutoFilt! Gruß owT
26.06.2009 19:35:04
Luc:-?
:-?
AW: ggf über Zeilenhöhe
26.06.2009 20:00:11
Maik.F
Hallo Daniel,
in Zeile 80 habe ich dieses Problem. Also habe ich es mit
Cells.EntireRow(80).AutoFit
oder
Cells(80, 1).Select
Cells.EntireRow.AutoFit
probiert.
Dabei stellt Excel aber auf die Standardhöhe 12,75 (17 Pixel) um, unabhängig davon, wieviele Zeilen vorhanden sind. Lediglich die Zellen, in denen mehrzeilige Texte (durch ALT + TAB erzeugt) stehen, werden auch angepaßt.
Hat jemand noch eine weitere Idee?
Viele Grüße
Maik
Anzeige
AW: Zellenformat "Zeilenumbruch"
27.06.2009 01:37:31
Daniel
Hi
ist in den entsprechenden Zellen auch die Zellenformateigenschaft "Zeilenumbruch" aktiviert worden?
diese wird nämlich nur bei der verwendung von ALT+ENTER automatisch vergeben und muss ansonsten von Hand über FORMAT - ZELLEN - AUSRICHTUNG oder per Makro mit Range(xy).WrapText = True gesetzt werden.
Ansonsten erfolgt kein Zeilenumbruch innerhalb der Zelle.
Gruß, Daniel
AW: Zellenformat "Zeilenumbruch"
27.06.2009 15:39:00
Maik.F
Hallo Daniel,
ja, ich habe unter "Zellen formatieren" auf dem Register "Ausrichtung" im Teil "Textsteuerung" den Wert "Zeilenumbruch" auf WAHR gesetzt.
Somit sind die Zeilenumbrüche aufgrund der Textlänge entstanden und nicht (wie bereits erwähnt) durch ALT + ENTER.
Viele Grüße
Maik
Anzeige
AW: Zellenformat "Zeilenumbruch"
28.06.2009 18:25:59
Daniel
Hi
keine Ahnung, mit .Wraptext und .Autofit klappst normalerweise beim mir.
Gruß, Daniel
AW: Zellenformat "Zeilenumbruch"
29.06.2009 10:07:02
Maik.F
Hallo Daniel,
poste mal bitte Deinen Code dazu. Ich habe es mit Deiner Hilfe so versucht:

Sub Test()
Range("B80").WrapText = True
Rows(80).AutoFit                     'oder: Cells.EntireRow.AutoFit
End Sub


Leider ohne Erfolg...
Und auch wenn ich über das Menü gehe (Format \ Zeile \ Optimale Höhe) stellt Excel wieder 12,75 als Zeilenhöhe ein, obwohl diese Zeilenhöhe alles andere als optimal ist!
Gruß, Maik

AW: Zellenformat "Zeilenumbruch"
29.06.2009 20:01:36
Daniel
Hi
wenns dir was hilft:

Sub test()
Cells(1, 1).WrapText = True
Cells(1, 1).EntireRow.AutoFit
End Sub


bei Fehlern ist es aber im allgemeinen sinnvoller, die Datei mit dem Fehler hier hochzuladen.
sonst beibt die Fehlersuche Glaskugellesen
Gruß, Daniel

Anzeige
AW: Zellenformat "Zeilenumbruch"
29.06.2009 23:43:40
Maik.F
Hallo Daniel,
ich glaube, den Fehler gefunden zu haben: Ich habe die Zellen B80 und C80 verbunden und wahrscheinlich bewirkt dadurch die Funktion AutoFit nur noch ein Reset auf die Standardhöhe 12,75!
Jetzt muss ich also die Tabelle so umstricken, daß ich auf das Verbinden der Zellen verzichte. Das wird zwar nicht ganz easy, aber naja...
Wiedereinmal bin ich an eine Grenze von Excel gestoßen. Warum muss mir das immer passieren?
Gruß, Maik
AW: ZellenVerbinden ist schlecht
30.06.2009 00:22:21
Daniel
HI
neeee mit Verbundenen Zellen klappt sowas nicht, damit kann Excel keine Zellhöhen automatisch berechnen.
besser gehts, wenn du statt Zellen-Verbinden die Formatierung Über-Spalten-zentrieren verwendest, damit kann Excel besser umgehen und auch Zeilenhöhen berechnen.
Kleiner Nachteil ist, daß die Zellinhalte nur zentriert dargestellt werden können.
Gruß, Daniel
ps. womit wieder mal bewiesen wäre, daß eine kleine Beispieldatei viel Zeit und Diskussion gespart hätte, die verbundenen Zellen fallen einem eigentlich sofort auf, weil die eh nur Ärger machen.
Anzeige
Die Lösung...
30.06.2009 10:16:27
Maik.F
Hallo Daniel,
das mit der Beispieldatei sollte ich mir fürs nächste Mal merken. Für alle, die es vielleicht interressiert, steht hier jetzt mein Code:

Sub ZellhoeheAnpassen()
Range("B70:C70").MergeCells = False
Columns("B:B").ColumnWidth = 85.14
Range("B70").Rows.AutoFit
Hoehe = Range("B70:C70").Height
Columns("B:B").ColumnWidth = 42.57
Range("B70:C70").MergeCells = True
Rows("70:70").RowHeight = Hoehe + 9
End Sub


Vielen Dank an alle, die mitgegrübelt haben.
Gruß, Maik

Bitte sehr, aber ich halte diese Lösung für...
01.07.2009 03:13:31
Luc:-?
...nur begrenzt tauglich, Maik...
Aber wenn du damit leben kannst... Professionell wird's aber nur horizontal, nicht vertikal, weil wir nun mal nicht klassisches Chinesisch schreiben, sondern seit nahezu 5000 Jahren (die Ursprünge sind so alt!) horizontal...
Gruß Luc :-?
Anzeige

364 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige