Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zeilenhöhe verbundene Zellen

Zeilenhöhe verbundene Zellen
03.09.2014 11:34:11
DirkR
Hallo Excelgemeinde,
ich brauche eure Hilfe!
Folgendes Problem beschäftigt mich seit STUNDEN!!!
Ich möchte in einer Tabelle die Zeilenhöhe von verbundenen Zellen automatisch einstellen. Ich habe im Forum auch schon einiges gefunden aber leider nicht passend genug.
Ich möchte, wenn ich in der Tabelle Angebotstext, nur die Zeilen automatisch anpassen, in dennen in Spalte H ein x steht. in den meisten fällen ist der verbundene Bereich in den Spalten A:F, kann aber auch schon mal E:F sein. In den verbundenen Zellen sind Verkettungen, mal mehr mal weniger.
Ich möchte nun, dass er zeile für zeile durchgeht, und in den Zeilen mit dem x in Spalte H die Zeilenhöhe automatisch ermittelt. Das ganze soll bei dem Ereignis Worksheet_Activate ausgelöst werden.
Habe den folgenden Lösungsansatz aus dem Forum gefunden, den ich aber nur teilweisse umgebaut bekomme:
Option Explicit
' nach: www.herber.de/mailing/137101h.htm
' "Zeilenhöhe bei verbundenen Zellen anpassen"
Sub ZeilenhoeheVerbundene(lngZeileNr As Long)
' Parameter ist die Zeilennummer.
' In einer Zeile kann es mehrere verbundene Zellen geben.
Dim sngHoehe As Single, cc As Integer, rngC As Range
Dim sngActWid As Single, rngM As Range, sngMergWid As Single
Application.ScreenUpdating = False
With Rows(lngZeileNr)
.AutoFit
sngHoehe = .RowHeight ' Mindesthöhe (insbes. nicht-verbundene Zellen)
End With
For cc = 1 To Cells(lngZeileNr, Columns.Count).End(xlToLeft).Column
If Cells(lngZeileNr, cc) > "" And Cells(lngZeileNr, cc).MergeCells Then
Set rngC = Cells(lngZeileNr, cc)
If Len(rngC) > 1000 Then
MsgBox "Der Text in " & rngC.Address(0, 0) & " hat über 1000 Zeichen !" _
& vbLf & vbLf & "Bitte kürzen!", vbCritical, "ZeilenhoeheVerbundene"
rngC.Select
Exit Sub
End If
With rngC.MergeArea
If .Cells(1).Address = rngC.Address And .WrapText = True Then
sngActWid = rngC.ColumnWidth ' Merken zum Wiederherstellen
' ---------------------------------------- Gesamtbreite rechnen
For Each rngM In .Cells
sngMergWid = rngM.ColumnWidth + sngMergWid
Next
sngMergWid = sngMergWid + (.Count - 1) * 0.71
' ----------------- Merge aufheben, Zellbreite auf Gesamtbreite
.MergeCells = False
rngC.ColumnWidth = sngMergWid
' ---------------------------------- max. optim. Höhe ermitteln
.EntireRow.AutoFit
sngHoehe = Application.Max(sngHoehe, rngC.Height)
' --------------------------- Breite und Merge wiederherstellen
rngC.ColumnWidth = sngActWid
.MergeCells = True
End If
End With
End If
Next cc
Rows(lngZeileNr).RowHeight = sngHoehe ' max. optim. Höhe einstellen
Application.ScreenUpdating = True
End Sub Sub test()
ZeilenhoeheVerbundene 20
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, arrZ, colZ As New Collection, ii As Long
arrZ = Array(13, 20, 28, 15)     ' Nummern der überwachten Zeilen anpassen
For Each rng In Target           ' falls mehrere Zellen auf einmal geändert
If Not IsError(Application.Match(rng.Row, arrZ, 0)) Then
On Error Resume Next
colZ.Add rng.Row, CStr(rng.Row)     ' hier werden Dubletten vermieden
On Error GoTo 0
End If
Next rng
For ii = 1 To colZ.Count
ZeilenhoeheVerbundene colZ(ii) ' Höhen der gesammelten Zeilen optimieren
Next ii
Set colZ = New Collection
End Sub

' eine der möglichen Alternativen:
'

Private Sub xWorksheet_Change(ByVal Target As Range)
Dim rng As Range, colZ As New Collection, ii As Long
For Each rng In Target           ' falls mehrere Zellen auf einmal geändert
If (rng.Row >= 15 And rng.Row = 35 And rng.Row 
Habe auch schon folgenden Lösungsansatz versucht, der aber nicht bei jeder Zeile funktioniert!?!?
Er funktioniert nur dann, wenn die verbundene Zelle von A beginnt.
Private Sub Worksheet_Activate()
Dim I As Long
Dim ArrRows As String
ActiveSheet.DisplayPageBreaks = True
Application.ScreenUpdating = False
Rows("1:1200").EntireRow.Hidden = False
For I = 405 To 1200
If UCase(Cells(I, 7).Value) = "X" And _
Cells(I, 1).Value = "" Then Rows(I).Hidden = True
If UCase(Cells(I, 8).Value) = "X" Then ZeilenhoeheVerbundene I
Next I
Application.ScreenUpdating = True
End Sub

kann mir bitte jemand helfen?
Danke schon mal!!!
Gruß DirkR

Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilenhöhe verbundene Zellen
03.09.2014 11:41:16
{Boris}
Hi,
bevor es hier an Bastelei geht: Sind die verbundenen Zellen UNBEDINGT nötig?
Die Dinger machen nämlich an allen Ecken und Enden mächtig Ärger.
Meist gibt es auch andere Lösungen.
Am Besten zeigst Du mal Deine Beispieldatei.
VG, Boris

AW: Zeilenhöhe verbundene Zellen
03.09.2014 12:11:59
DirkR
Hallo Boris,
ja leider!!!
Gruß DirkR

Anzeige
AW: Zeilenhöhe verbundene Zellen
03.09.2014 11:46:07
Daniel
Hi
bei verbundenen Zellen funktioniert die Automatische Ermittlung von Zeilenhöhe und Spaltenbreite nicht.
Der Workaround wäre folgender:
1. lege ein Dummy-Tabellenblatt an. Die Spaltenbreite und die Formatierung der Zellen sollte so sein wie im Originalblatt (vorallem Schriftart und Schriftgrad)
Ausnahem: im Dummyblatt dürfen die Zellen nicht verbunden sein.
2. kopiere jetzt den Inhalt der Verbundenen Zellen in dieses Dummyblatt.
und lasse die Zeilenhöhe automatisch einstellen (das geht, weil die Zellen nicht verbunden sind)
3. frage jetzt die Zeilenhöhe der Zelle ab.
im Origignalblatt müssen dann die Zeilen, die zum Zellverbund gehören, in Summe diese Höhe ergeben.
Gruß Daniel

Anzeige
AW: Zeilenhöhe verbundene Zellen
03.09.2014 12:22:05
DirkR
Hallo Daniel,
über diese Option habe ich auch schon nachgedacht. Möchte ich allerdings nicht so gerne machen.
Der Beispielcode funktioniert in den Fällen, wenn die verbundene Zelle von A:F verbunden ist.
Ich hätte gerne diesen Code verbessert, wenn möglich.
Gruß DirkR

Anzeige
AW: Zeilenhöhe verbundene Zellen
03.09.2014 12:22:35
DirkR
-- noch offen ---

AW: Beispieldatei ? owt
03.09.2014 12:51:06
Daniel
Gruß Daniel

AW: Beispieldatei ? owt
03.09.2014 14:02:02
DirkR
Hallo Daniel,
ich habe mal eine abgespeckte Version als Beispielmappe hochgeladen:
https://www.herber.de/bbs/user/92455.xlsm
Jetzt kommt das Saltsame, was ich nicht verstehe:
In Tabelle1 funktioniert der Code einwandfrei.
In der Tabelle Angebotstext habe ich einen Ausschnitt aus der Originaldatei. Dort funktioniert es in den Zeilen 8 und 9 nicht so wie in der Tabelle1. Obwohl ich keinen Unterschied erkennen kann.
WARUM ist das so?
In den Zeilen 8 und 9 der Tabelle Angebotstext ist doch das selbe Beispiel wie in Tabelle1 in der Zeile 3!
Oder nicht?
Warum verhält sich unterschiedlich?
Gruß DirkR

Anzeige
AW: Beispieldatei ? owt
03.09.2014 14:44:36
Daniel
Hi
also bei mir passiert nichts, wenn ich in Angebotstexte auf den Button klicke.
wenn das Blatt so aufgebaut ist, wie die Seite angebot, dann ist das von mir beschriebene Verfahren doch deutlich einfacher vorallem weil du nicht jede Zelle einzeln bearbeiten musst, sondern für die ganze Spalte auf einen Schlag:
1. Spalte C kopieren und als Wert in eine freie Spalte einfügen (z.B. Spalte J)
2. Spalte J so breit machen wie die Zellen C-F (also die Spalten, die verbunden sind) und den Zeilenumbruch aktivieren
3. Automatsich für alle Zeilen die Zeilenhöhe einstellen
4. Spalte J wieder löschen.
die Formatierung der Spalte J kannst du ja vorab von Hand einstellen, dann brauchs du für das ganze nur 4 Zeilen Code
Gruß Daniel

Anzeige
AW: Beispieldatei ? owt
03.09.2014 15:23:31
DirkR
Hallo Daniel,
bei mir werden die Zeilenhöhen von Zeile 8 und 9 verkleinert wenn ich auf den Button im Tabellenblatt Angebotstext klicke.
Habe aber wahrscheinlich das Problem gefunden. in den verbunden Zellen in dem Bereich war nicht in allen Zellen das Häckchen für Zeilenumbruch gesetzt. So scheint es zu funktionieren. Allerdings bin ich mir nicht sicher, ob es bei allen Eventualitäten auch einwandfrei funktioniert.
Deine Lösung wäre schon etwas umständlich für mich, da wir über 800 Zeilen immer wieder bearbeiten müssen.
Und nicht in jeder Zeile die Anpassung stattfinden soll.
Für den Fall, dass noch jemand eine Verbesserung oder einen Fehler sieht, lasse ich den Beitrag noch offen.
Grüße
DirkR

Anzeige
Ich sehe nach wie vor...
03.09.2014 16:01:02
{Boris}
Hi,
...keinen Grund, warum die Zellen verbunden sein müssen.
Wenn du beispielsweise die Zellen C4:F4 ENTbindest und stattdessen über die Zellen das Format "Über Auswahl zentrieren" anwendest, dann funktioniert auch die automatische Zeilenhöhe und alle Bastelei ist völlig überflüssig.
VG; Boris

Anzeige
AW: Ich sehe nach wie vor...
03.09.2014 17:24:05
DirkR
Hallo Boris,
wo finde ich: Über Auswahl zentrieren?
Gruß DirkR

AW: Ich sehe nach wie vor...
03.09.2014 17:27:07
DirkR
Hallo Boris,
habe es gefunden. Die Lösung geht leider auch nicht.
Der Text muss links ausgerichtet sein!
Gruß
DirkR

AW: Ich sehe nach wie vor...
03.09.2014 18:01:54
Daniel
Hi
ich würde weiterhin dafür plädieren, dass du die Inhalte der Spalte C in eine freie Spalte kopierst, deren Breite der Breite der verbundenen Zellen entspricht um dann hierfür automatisch die Zeilenhöhe zu ermitteln.
Wenn du das nicht für alle Zeilen machen willst, sondern nur für bestimmte, kannst du das ja trotzdem machen.
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zeilenhöhe von verbundenen Zellen in Excel automatisch anpassen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und gehe zu dem Arbeitsblatt, in dem du die Zeilenhöhe von verbundenen Zellen automatisch anpassen möchtest.

  2. Füge den folgenden VBA-Code in das Modul des Arbeitsblatts ein, wo du die Anpassungen vornehmen möchtest:

    Private Sub Worksheet_Activate()
       Dim I As Long
       Application.ScreenUpdating = False
       For I = 1 To ActiveSheet.UsedRange.Rows.Count
           If UCase(Cells(I, 8).Value) = "X" Then
               ZeilenhoeheVerbundene I
           End If
       Next I
       Application.ScreenUpdating = True
    End Sub
    
    Sub ZeilenhoeheVerbundene(lngZeileNr As Long)
       Dim sngHoehe As Single
       Application.ScreenUpdating = False
       Rows(lngZeileNr).AutoFit
       sngHoehe = Rows(lngZeileNr).RowHeight
       Rows(lngZeileNr).RowHeight = sngHoehe
       Application.ScreenUpdating = True
    End Sub
  3. Aktiviere das Arbeitsblatt, um die Zeilenhöhe automatisch anzupassen, wenn du in Spalte H ein "X" einträgst.

  4. Speichere deine Arbeit und teste die Funktionalität.


Häufige Fehler und Lösungen

  • Automatische Zeilenhöhe funktioniert nicht: Überprüfe, ob die Zeilenumbruch-Option in den verbundenen Zellen aktiviert ist. Dies ist notwendig, damit Excel die Höhe korrekt anpassen kann.

  • Code funktioniert nicht für alle Zeilen: Stelle sicher, dass alle relevanten Zellen tatsächlich verbunden sind und die Bedingungen im Code korrekt definiert sind.


Alternative Methoden

Eine alternative Methode besteht darin, ein Dummy-Tabellenblatt zu verwenden:

  1. Erstelle ein neues Tabellenblatt ohne verbundene Zellen.
  2. Kopiere den Inhalt der verbundenen Zellen in das Dummy-Blatt.
  3. Lass die Zeilenhöhe dort automatisch anpassen.
  4. Übertrage die ermittelte Höhe zurück in die ursprünglichen verbundenen Zellen.

Diese Methode kann die Zeilenhöhe automatisch anpassen, auch wenn Excel bei verbundenen Zellen Schwierigkeiten hat.


Praktische Beispiele

Ein einfaches Beispiel zur Anpassung der Zeilenhöhe:

Sub BeispielAnpassung()
    Dim Zeile As Long
    For Zeile = 1 To 10
        If Cells(Zeile, 2).Value = "X" Then
            ZeilenhoeheVerbundene Zeile
        End If
    Next Zeile
End Sub

In diesem Beispiel wird die Zeilenhöhe für die ersten 10 Zeilen angepasst, wenn in der zweiten Spalte ein "X" steht.


Tipps für Profis

  • Überlege, ob du wirklich verbundene Zellen verwenden möchtest, da diese oft Probleme mit der automatischen Zeilenhöhe verursachen können.
  • Nutze die Funktion "Über Auswahl zentrieren" anstelle von verbundenen Zellen. Dies kann die Handhabung von Zeilenhöhen erheblich vereinfachen und die Anpassung erleichtern.
  • Teste den VBA-Code gründlich in einer Kopie deiner Datei, um Datenverluste zu vermeiden.

FAQ: Häufige Fragen

1. Warum funktioniert die automatische Anpassung bei verbundenen Zellen nicht?
Die automatische Anpassung funktioniert oft nicht, weil Excel Schwierigkeiten hat, die Höhe von verbundenen Zellen zu ermitteln, besonders wenn der Zeilenumbruch nicht aktiviert ist.

2. Gibt es eine Möglichkeit, die Zeilenhöhe ohne VBA anzupassen?
Ja, du kannst die Zeilenhöhe manuell anpassen, aber das erfordert mehr Aufwand, insbesondere wenn zahlreiche Zellen betroffen sind.

3. Was kann ich tun, wenn der VBA-Code nicht wie erwartet funktioniert?
Überprüfe die Bedingungen im Code und stelle sicher, dass die Zellen korrekt verbunden sind und alle erforderlichen Einstellungen vorgenommen wurden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige