Zählen von sichtbaren Zellen in Excel mit SpecialCells
Schritt-für-Schritt-Anleitung
Um die Anzahl sichtbarer Zellen in einem gefilterten Bereich mithilfe von SpecialCells(xlCellTypeVisible)
in VBA zu zählen, folge diesen Schritten:
-
Öffne dein Excel-Dokument und drücke ALT + F11
, um den VBA-Editor zu öffnen.
-
Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject" > Einfügen > Modul.
-
Füge den folgenden Code ein:
Sub Count()
Dim Anzahl As Variant
With ActiveSheet
With .Range("A10:K" & .Cells(.Rows.Count, "A").End(xlUp).Row)
.AutoFilter Field:=8, Criteria1:=Array("Crit1", "Crit2"), Operator:=xlFilterValues
.AutoFilter Field:=9, Criteria1:=Month(Date)
Anzahl = .Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
End With
End With
MsgBox Anzahl
End Sub
-
Führe das Makro aus, um die Anzahl der gefilterten sichtbaren Zellen zu zählen.
Häufige Fehler und Lösungen
-
Problem: SpecialCells(xlCellTypeVisible)
wirft einen Fehler, wenn keine sichtbaren Zellen vorhanden sind.
- Lösung: Überprüfe, ob das Ergebnis des Autofilters sichtbar ist, bevor du die Zählung durchführst. Du kannst dies mit einer Fehlerbehandlung tun:
On Error Resume Next
Anzahl = .Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
If Err.Number <> 0 Then
MsgBox "Keine sichtbaren Zellen gefunden."
Err.Clear
End If
On Error GoTo 0
-
Problem: Laufzeitfehler '6' Überlauf.
- Lösung: Stelle sicher, dass deine Variablen korrekt deklariert sind, z. B. als
Long
.
Alternative Methoden
Wenn SpecialCells(xlCellTypeVisible)
nicht zuverlässig funktioniert oder du eine andere Methode verwenden möchtest, kannst du die Funktionen ZÄHLENWENN
oder ZÄHLENWENNS
in Excel direkt nutzen. Diese Funktionen sind oft einfacher und verhindern Probleme mit versteckten Zeilen.
Beispiel:
Dim Anzahl As Long
Anzahl = Application.WorksheetFunction.CountIfs(Range("A10:A100"), "Kriterium")
MsgBox Anzahl
Praktische Beispiele
Hier ist ein weiteres Beispiel, das ein Array für jeden Monat im Jahr füllt:
Sub CountByMonth()
Dim i As Long
Dim Anzahl(1 To 12) As Long
For i = 1 To 12
With ActiveSheet
With .Range("A10:K" & .Cells(.Rows.Count, "A").End(xlUp).Row)
.AutoFilter Field:=8, Criteria1:="Crit1"
.AutoFilter Field:=9, Criteria1:=i
On Error Resume Next
Anzahl(i) = .Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
On Error GoTo 0
End With
End With
Next i
' Ausgabe der Ergebnisse
For i = 1 To 12
MsgBox "Monat " & i & ": " & Anzahl(i) & " sichtbare Zeilen."
Next i
End Sub
Tipps für Profis
- Nutze
On Error Resume Next
, um Fehler zu ignorieren, wenn keine sichtbaren Zellen vorhanden sind.
- Verwende
.SpecialCells(xlVisible)
in Kombination mit .Count
für eine schnellere Zählung.
- Denke daran, dass
Selection.SpecialCells(xlCellTypeVisible)
nur auf die aktuell ausgewählte Zelle angewendet wird. Stelle sicher, dass du den richtigen Bereich auswählst.
FAQ: Häufige Fragen
1. Was passiert, wenn keine Zellen sichtbar sind?
In diesem Fall wird ein Fehler ausgelöst, wenn du SpecialCells(xlCellTypeVisible)
verwendest. Eine Fehlerbehandlung ist notwendig.
2. Kann ich SpecialCells(xlCellTypeVisible)
auch für andere Zelltypen verwenden?
Ja, du kannst es auch für andere Zelltypen verwenden, wie z.B. xlCellTypeFormulas
oder xlCellTypeConstants
.
3. Wie kann ich die Anzahl der sichtbaren Zeilen in einer bestimmten Spalte zählen?
Du kannst einfach die Spalte in deinem Range anpassen und dann SpecialCells(xlCellTypeVisible)
darauf anwenden.