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

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

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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige