Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

WorksheetFunction.CountA(...)

Forumthread: WorksheetFunction.CountA(...)

WorksheetFunction.CountA(...)
26.03.2015 16:18:30
Frederik
Hallo!
Ich versuche mittels der untenstehenden Formel die Anzahl der gefüllten bzw. non-Blank Zellen zu ermitteln.
Dim TodayD As Integer, TodayM As Integer, Workdays As Integer
TodayD = DatePart("d", Date)
TodayM = DatePart("m", Date)
Sheets("Database").Activate
Workdays = WorksheetFunction.CountA(Range(Cells(TodayM + 4, 1), Cells(TodayM + 4, 31)))
TodayD und -M geben jeweils Tag und Monat in Zahlenform aus.
Der Bereich A7:AE7 sollte in diesem Fall nach gefüllten Zellen durchsucht werden.
Leider wird mir durch Debug.Print immer nur 2 ausgegeben.
Ich habe schon mit Range() und Cells() rumgespielt. Aber auf den richtigen Wert kam ich nie - sollte 21 sein.
Was mache ich hier falsch?
Danke!
Fred

Anzeige

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

Betreff
Datum
Anwender
Anzeige
Nichts! Muss an Daten liegen! Gruß owT
26.03.2015 20:41:41
Luc:-?
:-?

AW: Nichts! Muss an Daten liegen! Gruß owT
27.03.2015 13:18:47
Frederik
Habe den Fehler gefunden:
Workdays = WorksheetFunction.CountA(Range(Cells(TodayM + 4, 1), Cells(TodayM + 4, 31)))

Vor

Range
muss noch das definiert

Worksheets("")
werden.
Also:

Workdays = WorksheetFunction.CountA(Worksheets("Testname").Range(Cells(TodayM + 4, 1), Cells(TodayM + 4, 31)))

Ansonsten wird immer das erste Tabellenblatt verwendet!

Anzeige
AW: Nichts! Muss an Daten liegen! Gruß owT
27.03.2015 13:31:46
Frederik
Hier ist doch etwas falsch.
Workdays = WorksheetFunction.CountA(Worksheets("Testname").Range(Cells(TodayM + 4, 1), Cells(TodayM + 4, 31)))
gibt mir einen Run-time error '1004': Aplication-defined or object-defined error aus.
Mit
Workdays = WorksheetFunction.CountA(Worksheets("Testname").Range("A7:AE7")
passiert das nicht und ich bekomme das richtige Ergebnis.

Anzeige
AW: Nichts! Muss an Daten liegen! Gruß owT
27.03.2015 13:43:41
Daniel
Hi
mal wieder der Klassiker:
das Worksheet muss auch vor den beiden Cells innerhalb der Range stehen!
(dafür darf es vor der Range entfallen, wenn der Code in einem allgemeinen Modul steht)
Excel setzt bei fehlendem Worksheet vor einem Range- oder Cells das aktive Blatt ein.
(in einem Tabellenblattmodul das Blatt des Moduls)
Das gilt auch, wenn das Range oder Cells innerhalb einer Funktion.
Gruß Daniel

Anzeige
AW: Nichts! Muss an Daten liegen! Gruß owT
27.03.2015 14:44:54
Frederik
Perfekt!
Ich danke dir Daniel!
Ein angenehmes Wochenende! :)
;
Anzeige

Infobox / Tutorial

Verwendung von WorksheetFunction.CountA in VBA


Schritt-für-Schritt-Anleitung

Um die Anzahl der gefüllten Zellen in einem bestimmten Bereich mit WorksheetFunction.CountA in VBA zu ermitteln, kannst du folgende Schritte befolgen:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Ein neues Modul hinzufügen: Klicke mit der rechten Maustaste auf einen der Einträge im Projektfenster und wähle Einfügen > Modul.

  3. Code eingeben: Füge den folgenden Code in das Modul ein:

    Sub CountFilledCells()
        Dim TodayD As Integer, TodayM As Integer, Workdays As Integer
        TodayD = Day(Date)
        TodayM = Month(Date)
    
        ' Sicherstellen, dass das richtige Arbeitsblatt verwendet wird
        Workdays = Application.WorksheetFunction.CountA(Worksheets("Testname").Range(Cells(TodayM + 4, 1), Cells(TodayM + 4, 31)))
    
        ' Ergebnis ausgeben
        Debug.Print Workdays
    End Sub
  4. Arbeitsblatt anpassen: Stelle sicher, dass der Blattname ("Testname") mit dem tatsächlichen Namen deines Arbeitsblatts übereinstimmt.

  5. Makro ausführen: Drücke F5, um das Makro auszuführen und die Anzahl der gefüllten Zellen zu ermitteln.


Häufige Fehler und Lösungen

  • Run-time error '1004': Wenn du die Fehlermeldung "Application-defined or object-defined error" erhältst, könnte dies daran liegen, dass du das Arbeitsblatt nicht korrekt angegeben hast. Achte darauf, dass du Worksheets("Blattname") vor Range und Cells angibst.

  • Falsche Ergebnisse: Wenn du unerwartete Werte erhältst, überprüfe, ob der genannte Zellbereich tatsächlich gefüllte Zellen enthält. Es kann auch hilfreich sein, den Zellbereich direkt anzugeben, anstatt Cells zu verwenden.


Alternative Methoden

Neben WorksheetFunction.CountA gibt es auch andere Methoden, um die Anzahl gefüllter Zellen zu zählen:

  • Verwendung der CountA-Funktion in einer Formel: Du kannst die Funktion direkt in einer Excel-Zelle verwenden, z.B. =COUNTA(A1:A10).

  • Verwendung von Application.CountA: Diese Methode kann auch verwendet werden, um die Anzahl von nicht-leeren Zellen zu zählen:

    Workdays = Application.CountA(Worksheets("Testname").Range("A7:AE7"))

Praktische Beispiele

Hier sind einige Beispiele, die zeigen, wie CountA in verschiedenen Szenarien verwendet wird:

  1. Zählen in einer festen Zeile:

    Dim count As Integer
    count = Application.WorksheetFunction.CountA(Worksheets("Testname").Range("A7:AE7"))
  2. Zählen in einer Spalte:

    Dim count As Integer
    count = Application.WorksheetFunction.CountA(Worksheets("Testname").Range("A:A"))
  3. Zählen in einem dynamischen Bereich:

    Dim count As Integer
    Dim lastRow As Long
    lastRow = Worksheets("Testname").Cells(Rows.Count, 1).End(xlUp).Row
    count = Application.WorksheetFunction.CountA(Worksheets("Testname").Range("A1:A" & lastRow))

Tipps für Profis

  • Verwende Option Explicit: Füge Option Explicit am Anfang deines Moduls hinzu, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.

  • Fehlerbehandlung einfügen: Nutze On Error Resume Next, um Laufzeitfehler abzufangen und zu behandeln, was besonders nützlich ist, wenn du mit dynamischen Bereichen arbeitest.

  • Testen in einer sicheren Umgebung: Probiere deinen Code in einer Kopie deiner Arbeitsmappe aus, um unerwünschte Änderungen zu vermeiden.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen CountA und Count?
CountA zählt alle nicht-leeren Zellen, während Count nur numerische Werte zählt.

2. Wie kann ich CountA in einer Schleife verwenden?
Du kannst CountA innerhalb einer Schleife verwenden, um mehrere Bereiche zu zählen. Beispiel:

For i = 1 To 10
    Debug.Print Application.WorksheetFunction.CountA(Worksheets("Testname").Range("A" & i & ":E" & i))
Next i

3. Was bedeutet der Fehler "Run-time error '1004'"?
Dieser Fehler tritt auf, wenn ein Problem mit dem Referenzieren von Objekten in deinem VBA-Code auftritt, z.B. wenn ein Arbeitsblatt nicht existiert oder der Zellbereich ungültig ist.

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