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

Forumthread: Countif in VBA

Countif in VBA
28.10.2005 14:23:49
Tinu
Liebe VBA Könner
Ich möchte in einem Arbeitsblatt diejenigen Zellen im Bereich C3 bis C"letzteZeile" zählen, welche nicht Null und nicht leer sind und habe dazu folgenden Code geschrieben:
NuRes = WorksheetFunction.CountIf(.Range("C3:C" & lz2), ("&lt&gt0" And "&lt&gt"))
Leider kommt aber immer die Meldung "Type mismatch". Ohne die "And" Funktion funktioniert es. Der Fehler muss also irgendwo in dieser und-Verknüpfung der Kriterien liegen.
Für Euere Hilfe wäre ich sehr dankbar.
Gruss
Tinu
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Countif in VBA
28.10.2005 14:31:37
Herbert
Hi,
Zählenwenn nach leeren Zellen liefert abenteuerliche Ergebnisse.
mfg Herbert
AW: Countif in VBA
28.10.2005 14:39:32
Tinu
Hi Herbert
Ich zähle nicht leere Zellen, sondern nichtleere.
Gruss
Tinu
AW: Countif in VBA
28.10.2005 14:49:32
Herbert
Hi,
einzeln zählen und addieren.
mfg Herbert
Anzeige
AW: Countif in VBA
28.10.2005 15:49:10
Tinu
Hallo Herbert
Nicht ganz korrekt, aber Du hast mir den entsprechenden Denkanstoss gegeben. Nullen zählen, Nichtleere zählen und Nullen von Nichtleeren abzählen:
lz2 = .Range("C200").End(xlUp).Row
NuNull = WorksheetFunction.CountIf(.Range("C3:C" & lz2), "=0")
NuNiLeer = WorksheetFunction.CountIf(.Range("C3:C" & lz2), "&lt&gt")
NuRes = NuNiLeer - NuNull
besten Dank
Tinu
Anzeige
AW: Countif in VBA
28.10.2005 15:17:45
UweD
Hallo
Zählenwenn geht nur mit einer Bedingung.
In der Tabelle ginge aber z.B.
=SUMMENPRODUKT((C1:C100"")*(C1:C100"0"))
Bekomme es aber gerade nicht ins VBA übersetzt.
Hier hänge ich..
NuRes = WorksheetFunction.SumProduct _
((Range("C1:C100") """") * (Range("C1:C100") ""0""))
Gruß UweD
(Rückmeldung wäre schön)
Anzeige
AW: Countif in VBA
28.10.2005 15:55:44
Tinu
Hallo Uwe
Danke für Deinen Hinweis, dass Zählenwenn nur EINE Bedingung erlaubt. Dies ist offenbar nicht nur bei VBA so. Mit dem Summenprodukt gige es wahrscheinlich auch, aber ich habe immer meine liebe Mühe mit den vielen Anführungszeichen, wenn Worksheet Funktionen in VBA übersetzt werden. Ich habe nun die Lösung gemäss meiner Antwort an Herbert "eingebaut"
Nochmals besten Dank
Tinu
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Countif in VBA: So zählst Du nicht leere Zellen


Schritt-für-Schritt-Anleitung

  1. Initialisiere Deine Variablen: Du benötigst eine Variable für die letzte Zeile und eine für das Ergebnis.

    Dim lz2 As Long
    Dim NuRes As Long
  2. Bestimme die letzte Zeile: Finde die letzte Zeile in der Spalte C, die Daten enthält.

    lz2 = .Range("C200").End(xlUp).Row
  3. Zähle nicht leere Zellen: Verwende die WorksheetFunction.CountIf, um die nicht leeren Zellen zu zählen. Achte darauf, die richtigen Kriterien zu verwenden.

    NuRes = Application.WorksheetFunction.CountIf(.Range("C3:C" & lz2), "<>") - Application.WorksheetFunction.CountIf(.Range("C3:C" & lz2), "=0")
  4. Gib das Ergebnis aus: Zeige das Ergebnis an oder speichere es in einer Variablen.

    MsgBox "Anzahl nicht leerer Zellen: " & NuRes

Häufige Fehler und Lösungen

  • Type mismatch: Dieser Fehler tritt häufig auf, wenn die Kriterien nicht korrekt formatiert sind. Stelle sicher, dass Du die Kriterien in Anführungszeichen setzt und die richtige Syntax verwendest.

  • Falsche Berechnung: Wenn Du nicht die erwartete Anzahl erhältst, überprüfe, ob der Bereich korrekt definiert ist und ob Du die richtigen Kriterien verwendest.


Alternative Methoden

Eine Alternative zur Verwendung von CountIf ist die Verwendung von SumProduct, um mehrere Bedingungen zu zählen:

NuRes = Application.WorksheetFunction.SumProduct((.Range("C3:C" & lz2) <> "") * (.Range("C3:C" & lz2) <> 0))

Diese Methode eignet sich gut, wenn Du mehrere Bedingungen kombinieren möchtest.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie Du eine CountIf-Funktion in einer Excel-Makro verwenden kannst:

Sub CountNonEmptyCells()
    Dim lz2 As Long
    Dim NuRes As Long

    lz2 = Range("C200").End(xlUp).Row
    NuRes = Application.WorksheetFunction.CountIf(Range("C3:C" & lz2), "<>") - Application.WorksheetFunction.CountIf(Range("C3:C" & lz2), "=0")

    MsgBox "Anzahl nicht leerer Zellen: " & NuRes
End Sub

Vergewissere Dich, dass Du das Makro in der richtigen Excel-Version ausführst, die VBA unterstützt.


Tipps für Profis

  • Verwende With-Anweisung: Um den Code leserlicher zu gestalten, kannst Du die With-Anweisung verwenden:

    With ThisWorkbook.Sheets("Sheet1")
      ' Dein Code hier
    End With
  • Fehlerbehandlung einfügen: Füge eine Fehlerbehandlung ein, um unerwartete Probleme elegant zu lösen.

  • Dokumentiere Deinen Code: Schreibe Kommentare zu Deinem Code, damit Du und andere Benutzer die Logik nachvollziehen können.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Bedingungen in VBA verwenden?
Du kannst CountIf nicht mit mehreren Bedingungen verwenden, aber Du kannst SumProduct nutzen, um mehrere Kriterien zu zählen.

2. Warum erhalte ich einen Fehler, wenn ich CountIf verwende?
Ein häufiger Grund ist, dass die Kriterien nicht korrekt formatiert sind oder dass Du versuchst, mit falschen Datentypen zu arbeiten. Überprüfe die Kriterien und stelle sicher, dass sie in Anführungszeichen gesetzt sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige