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

Zeilen 3verbunden bei 1 Ausblenden

Forumthread: Zeilen 3verbunden bei 1 Ausblenden

Zeilen 3verbunden bei 1 Ausblenden
13.08.2025 12:48:14
Robert Pilz
Hallo liebe Exelprofis;

bräuchte nun noch mal Eure Hilfe für welche ich sehr Dankbar wäre.
Habe ein Makro gebastelt wo jeweils 3 verbundene Zeilen bei einer 1 darin ausgeblendet werden sollen. Das funktioniert auch gut aber dauert sehr lange da das Makro die Spalte bis zur letzten beschriebenen Zeile durchsucht und dann ausblendet. Eigentlich müsste es aber bloß den den Bereich A5:A106 durchsuchen und bearbeiten. Hier mal das Makro
Sub VerbundeneZeilenMit1Ausblenden()

Dim ws As Worksheet
Dim rng As Range
Dim cell As Range
Dim firstRow As Long, lastRow As Long
Dim colToCheck As Integer
Dim i As Long

' Arbeitsblatt festlegen (hier: Aktives Blatt)
Set ws = ActiveSheet

' Spalte, die auf "1" geprüft werden soll (hier: Spalte A)
colToCheck = 1 ' A=1, B=2 usw.

' Bereich festlegen (hier: verwendet Spalte A bis zur letzten befüllten Zelle)
lastRow = ws.Cells(ws.Rows.Count, colToCheck).End(xlUp).Row
Set rng = ws.Range(ws.Cells(1, colToCheck), ws.Cells(lastRow, colToCheck))

Application.ScreenUpdating = False

For Each cell In rng
' Prüfen, ob die Zelle den Wert "1" enthält
If cell.Value = 1 Then
' Prüfen, ob die Zelle Teil einer verbundenen Zelle ist
If cell.MergeCells Then
' Erste und letzte Zeile der verbundenen Zelle ermitteln
firstRow = cell.MergeArea.Row
lastRow = cell.MergeArea.Row + cell.MergeArea.Rows.Count - 1

' Sicherstellen, dass die verbundene Zelle genau 3 Zeilen umfasst
If cell.MergeArea.Rows.Count = 3 Then
' Die 3 Zeilen ausblenden
ws.Rows(firstRow & ":" & lastRow).Hidden = True
End If
End If
End If
Next
End Sub
Wie kann ich das anweisen im Makro.

Für Eure Mühe danke ich Euch im voraus.


MfG Robert
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilen 3verbunden bei 1 Ausblenden
13.08.2025 13:05:15
GerdL
Hallo Robert,
ungetestet:
' Bereich festlegen (hier: verwendet Spalte A bis zur letzten befüllten Zelle)


'lastRow = ws.Cells(ws.Rows.Count, colToCheck).End(xlUp).Row
'Set rng = ws.Range(ws.Cells(1, colToCheck), ws.Cells(lastRow, colToCheck)
Set rng = ws.Range("A5:A106")
'................


Gruß Gerd
Anzeige
AW: Zeilen 3verbunden bei 1 Ausblenden
13.08.2025 14:57:00
GerdL
Noch ein Gedicht mit der 1
Sub Unit()


Const cstrBereich As String = "A5:A106"
Dim Zelle As Range


For Each Zelle In ActiveSheet.Range(cstrBereich).Cells
With Zelle
If .Value = 1 Then
If .MergeArea.Address = .Resize(3).Address Then
.Parent.Rows(.Row).Resize(3).Hidden = True
End If
End If
End With
Next

End Sub

Gruß Gerd
Anzeige
AW: Zeilen 3verbunden bei 1 Ausblenden
13.08.2025 16:36:10
Uduuh
Hallo,
wie kommt die 1 denn in die Zellen?
Wenn von Hand:
Sub Ausblenden()

Dim rngZelle As Range, rngCheck As Range
Const lngCol As Long = 1

On Error Resume Next
Set rngCheck = Columns(lngCol).SpecialCells(xlCellTypeConstants, xlNumbers)
On Error GoTo 0

If Not rngCheck Is Nothing Then
For Each rngZelle In rngCheck
If rngZelle.MergeCells Then
If rngZelle.MergeArea.Rows.Count = 3 Then
If rngZelle = 1 Then
rngZelle.MergeArea.EntireRow.Hidden = True
End If
End If
End If
Next rngZelle
End If
End Sub

Gruß aus'm Pott
Udo
Anzeige
AW: Zeilen 3verbunden bei 1 Ausblenden
13.08.2025 16:52:46
daniel
hi

probier mal diese Änderung.

aus
Set rng = ws.Range(ws.Cells(1, colToCheck), ws.Cells(lastRow, colToCheck)) 


wird:
Set rng = ws.Range("A5:A106")


die Zeilen, in denen die Variablen, die jetzt nicht mehr benötigt werden, gefüllt werden, kannst du löschen.


wenn dir keine der gezeigten Lösungen weiterhilft, solltest du die Datei hochladen, am besten mit 2 Blättern, Blatt1 zeigt die Ausgangslage und Blatt2 zeigt, wie das Ergebnis des Makros aussehen soll (dann von Hand erstellt)

Gruß Daniel
Anzeige
AW: Zeilen 3verbunden bei 1 Ausblenden
13.08.2025 15:33:06
Yal
Hmm... ich fürchte, dass es in dem Fall, wo die Zellverbund mehr als eine Spalte hat (in der Fragestellung nicht klargestellt) die Prüfung
If .MergeArea.Address = .Resize(3).Address Then
fehlschlagen wird.

Bsp: Verbund A1:C3, aus A1 wird resize(3) A1:A3

Man könnte zwar daraus
If Z.MergeArea.Rows.Count = Z.Resize(3).Rows.Count Then
wäre aber witzfrei, weil Z.Resize(3).Rows.Count immer 3 ist.

VG
Yal
Anzeige
AW: Zeilen 3verbunden bei 1 Ausblenden
13.08.2025 13:36:50
Yal
Hallo Robert,

ein paar Ideen für eine bessere Lesbarkeit von Code:
- unbedingt auf das Einrücken achten!! Das A&O von sauberen Code. Verhindert sofort viele Fehler.
- Variablen sind gut, um den Zustand in Schritt-Modus beim offenen Direktfenster zu verfolgen. Jedoch idealerweise, so wenig Variable wie möglich.
- Variable, die keine Änderung im Verlauf haben, kann man als "Const" definieren. Spart einen "Dim" und reduziert den Analysebedarf.
- lange oder oft wiederholende Präfix mit With kürzen
- if .. then mit einer einzigen Anweisung kann man auf einer Zeile schreiben. Muss nicht. Achte dabei aufs Einrücken.
- leere Zeilen tragen nur zur Lesbarkeit bei, wenn sie sparsam eingesetzt werden. Sonst verlängert unnötig den Code
- Kommentar sind gut, aber hier auch so wenig wie möglich. U.a. nicht das offensichtlich kommentieren.
- nicht das "was" kommentieren, sondern das "warum"
- Einzelzeile-Kommentar am Ende der Zeile setzen.
- Kommentarzeile ein Einrücken nach vorn. Da spart man eine leere Zeile.

Nicht vergessen: wenn ScreenUpdating auf False gesetzt wird, muss am Ende wieder auf True gesetzt werden. Immer beiden gleichzeitig setzen.

Dein Code könnte so aussehen:
Sub VerbundeneZeilenMit1Ausblenden()

Dim ws As Worksheet
Dim cell As Range
Const colToCheck = "A" ' Cells erlaubt eine Spaltenüberschrift als zweiten Param: .Cells(1, "C")

Set ws = ActiveSheet
Application.ScreenUpdating = False
'hier wird der ganzen belegten Bereich der Spalte A verarbeitet
For Each cell In Range(ws.Cells(1, colToCheck), ws.Cells(Rows.Count, colToCheck).End(xlUp))
If cell.Value = 1 Then
If cell.MergeCells Then ' Prüfen, ob die Zelle Teil einer verbundenen Zelle ist
With cell.MergeArea
If .Rows.Count = 3 Then ws.Rows(.Row & ":" & .Row + 2).Hidden = True ' Wenn genau 3 geb.Zeilen, dann ausblenden
End With
End If
End If
Next
Application.ScreenUpdating = True
End Sub

fügt man den Vorschlag von Gerd dazu, dann so:
Sub VerbundeneZeilenMit1Ausblenden()

Dim ws As Worksheet
Dim cell As Range

Set ws = ActiveSheet
Application.ScreenUpdating = False
'hier wird nur A5:A106 verarbeitet
For Each cell In ws.Range("A5:A106")
If cell.Value = 1 Then
If cell.MergeCells Then ' Prüfen, ob die Zelle Teil einer verbundenen Zelle ist
With cell.MergeArea
If .Rows.Count = 3 Then ws.Rows(.Row & ":" & .Row + 2).Hidden = True ' Wenn genau 3 geb.Zeilen, dann ausblenden
End With
End If
End If
Next
Application.ScreenUpdating = True
End Sub


VG
Yal
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige