Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Wert falsch -SpecialCells(xlCellTypeVisible).Count

Wert falsch -SpecialCells(xlCellTypeVisible).Count
07.03.2016 08:35:09
Herbert
Hallo zusammen,
ich möchte einen Datensatz - beginnend mit der Spaltenüberschrift in Zeile 10 - nach bestimmten Kriterien ("Crit1" & "Crit2" sowie dem aktuellen Monat) filtern und die Anzahl der Ergebnisse in der Variablen "Anzahl" speichern.
Dies funktioniert soweit ganz gut. Solange der Autofilter Zeilen liefert, wird die Anzahl der gefilterten Zeilen korrekt gezählt. Liefert der Autofilter keine Zeilen als Ergebnis, so erhalte ich allerdings für die Variable "Anzahl" den Wert "1", obwohl dieser doch eigentlich "0" sein müsste. Habt ihr eine Idee woran das liegen kann?

Sub Count()
Dim Anzahl As Variant
Range("A10:K" & ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row).Select
Selection.AutoFilter Field:=8, Criteria1:=Array("Crit1", "Crit2"), Operator:=xlFilterValues
Selection.AutoFilter Field:=9, Criteria1:=Month(Date)
Anzahl = Range("A11:A" & ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row). _
SpecialCells(xlCellTypeVisible).Count
MsgBox Anzahl
End Sub

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wert falsch -SpecialCells(xlCellTypeVisible).Count
07.03.2016 09:36:08
Daniel
Hi
das End(xlup) überspringt alle ausgeblendeten Zellen und berücksichtigt nur die sichtbaren
dh wenn der Autofilter alle Zeilen ausgeblendet hat, springt das End(xlup) bis in die Überschriftenzeile 10 und damit zählst du die sichtbaren Zellen im Range A11:A10 und das ergibt dann an.
du solltest aber generell die Überschriftenzeile mit einbeziehen, denn das SpecialCells() bricht mit einem Fehler ab, wenn es keine Zellen finden kann.
Du musst dann halt vom Ergebnis noch 1 für die Überschriftenezeile abziehen, aber das sollte nicht das das Problem sein.
ich würde das ganze so Programmieren:

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
Gruß Daniel

Anzeige
AW: Wert falsch -SpecialCells(xlCellTypeVisible).Count
07.03.2016 10:08:26
Herbert
Hallo Daniel,
dein Lösungsvorschlag hat mein Problem gelöst. Vielen Dank!

AW: Wert falsch -SpecialCells(xlCellTypeVisible).Count
07.03.2016 11:06:59
Herbert
Hallo Daniel,
jetzt bekomme ich leider einen "Laufzeitfehler '6' Überlauf", wenn der Autofilter keine Zeilen als Ergebnis liefert. Das Makro soll eigentl. einen Array für jeden Monat im Jahr mit der Anzahl der gefilterten Zeilen befüllen.
Google hat diesbezüglich leider keine Lösung zu Tage gefördert. Ich habe die Variablen sowohl als Variant und als Long deklariert - leider ohne Erfolg. Vllt. hast du oder andere ja noch einen Tipp ;)

Sub Count ()
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
Anzahl(i) = .Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
End With
End With
Next
End Sub

Anzeige
AW: Wert falsch -SpecialCells(xlCellTypeVisible).Count
07.03.2016 11:49:11
Daniel
Hi
Kann ich jetzt nicht nachvollziehen.
Aber warum ermittelst du die Anzahl nicht mit ZählenWenns bzw Worksheefunction.Countifs anstelle des Filters?
Gruß Daniel

AW: Wert falsch -SpecialCells(xlCellTypeVisible).Count
07.03.2016 12:15:25
Herbert
Weil ich diese Funktion bisher noch nicht kannte. :D Danke für den Hinweis - damit sollte das ganze wesentlich schlanker werden.
Der Vollständigkeit halber:
Das Problem mit dem Laufzeitfehler habe ich gelöst wie folgt gelöst:
Anzahl(i) = (.SpecialCells(xlCellTypeVisible).Count - 11) / 11 'Bei 11 Spalten
Damit taucht der Fehler nicht mehr auf, warum auch immer... Dann mache ich mich mal an die Countif-Funktion.
Gruß Herbert
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

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:

  1. Öffne dein Excel-Dokument und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject" > Einfügen > Modul.

  3. 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
  4. 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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige