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

Forumthread: VBA: Datumswerte mit Countif

VBA: Datumswerte mit Countif
13.02.2007 13:43:34
Düppi
Liebe Excel-Profis,
ich habe das Blatt "Redaktionen". Darin stehen ab Zelle A4 Datumswerte im Format "dd.mm." Ich möchte nun errechnen lassen, wiel viele Januar-Tage die Liste führt, wieviele Februrar-Tage etc. Wir arbeiten nicht an allen Tage, daher ist die Zahl mit mit den realen Monats-Tagen (Januar = 31, Februar = 28) identisch. So siehts im Sheet aus:
Spalte A
01.01.
02.01.
...
30.01.
31.01.
01.02.
...
31.12.
Hier mein Code:

Sub Zaehler()
Dim lz As Long
lz = Sheets("Redaktionen").Range("A65536").End(xlUp).Row
Set Suchbereich = Worksheets("Redaktionen").Range("A4:A" & lz)
Dim anz_janu, anz_febr, anz_marz As Integer
Dim Januar1, Februar1, Maerz1, April1 As Date
Januar1 = "01.01."
Februar1 = "01.02."
Maerz1 = "01.03."
April1 = "01.04."
anz_janu = Application.WorksheetFunction.CountIf(Suchbereich, "<=" & Maerz1)
End Sub

Hier mein Problem: Im (verkürzten) Beispiel soll die Variable anz_janu die Tage kleiner/gleich 01.03. lierfern - also die Summe alle Januar- und alle Februar-Tage. Tut sie aber nicht.
Wer kann meinen Code korrigieren, fragt Düppi?
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Datumswerte mit Countif
13.02.2007 15:01:00
Peter
Hallo Düppi,
zwei Dinge, die mich stören:
1. Dim anz_janu, anz_febr, anz_marz As Integer
Dim Januar1, Februar1, Maerz1, April1 As Date
da ist nur jeweils die letzte Variable das was du möchtest, die davor sind Variant.
2. Wenn ich mich nicht sehr irre, kann CountIf nicht mit kleiner/gleich arbeiten, sondern nur mit einem festen Suchwert.
Das musst du wohl mit einer Schleife abarbeiten, um zu einem Ergebnis zu kommen.
Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
Anzeige
AW: VBA: Datumswerte mit Countif
13.02.2007 15:20:00
Peter
Hallo Düppi,
meine Bedenken zu Punkt 2 ziehe ich zurück.
So könnte es gehen (hier nur für April - nicht als Date, sondern als Double)

Sub Zaehler()
Dim lz        As Long
Dim Suchbereich  As Range
Dim anz_janu  As Integer
Dim anz_febr  As Integer
Dim anz_marz  As Integer
Dim Januar1   As Date
Dim Februar1  As Date
Dim Maerz1    As Date
Dim April1    As Double
lz = Sheets("Redaktionen").Range("A65536").End(xlUp).Row
Set Suchbereich = Worksheets("Redaktionen").Range("A4:A" & lz)
Januar1 = "01.01.2007"
Februar1 = "01.02.2007"
Maerz1 = "01.03.2007"
April1 = CDbl("01.04.2007")
anz_janu = Application.WorksheetFunction.CountIf(Suchbereich, "<=" & April1)
MsgBox anz_janu
End Sub

Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
Anzeige
AW: VBA: Korrektur
13.02.2007 15:27:00
Peter
Hallo Düppi,
so geht es:


Option Explicit
Public Sub Zaehler()
Dim lLetzte      As Long
Dim Suchbereich  As Range
Dim anz_janu     As Integer
Dim anz_febr     As Integer
Dim anz_marz     As Integer
Dim Januar1      As Double
Dim Februar1     As Double
Dim Maerz1       As Double
Dim April1       As Double
   lLetzte = Sheets("Redaktionen").Range("A65536").End(xlUp).Row
   Set Suchbereich = Worksheets("Redaktionen").Range("A4:A" & lLetzte)
   Januar1 = CDbl(CDate("01.01.2007"))
   Februar1 = CDbl(CDate("01.02.2007"))
   Maerz1 = CDbl(CDate("01.03.2007"))
   April1 = CDbl(CDate("01.04.2007"))
   anz_janu = Application.WorksheetFunction.CountIf(Suchbereich, "<=" & Februar1)
   MsgBox anz_janu
End Sub 


Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
Anzeige
AW: VBA: Korrektur
13.02.2007 15:52:38
Düppi
Hallo Peter,
vielen Dank - beide Lösungen klappen. Während Du Lösung 3 entworfen hast, habe ich Deinen Vorschlag mit der For-next-Schleife umgesetzt. Läuft auch. Aber eleganter ist natürlich Lösung 3 - vielen Dank dafür und Gruß aus Oelde sagt Dir Düppi.
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA: Datumswerte mit Countif in Excel


Schritt-für-Schritt-Anleitung

Um die Anzahl der Datumswerte in Excel mit VBA zu zählen, kannst Du die Application.WorksheetFunction.CountIf oder Application.WorksheetFunction.CountIfs verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" > Einfügen > Modul.

  3. Füge den Code ein: Kopiere und füge den folgenden VBA-Code in das Modul ein:

    Sub Zaehler()
       Dim lz As Long
       Dim Suchbereich As Range
       Dim anz_janu As Integer
       Dim Januar1 As Double
       Dim Februar1 As Double
    
       lz = Sheets("Redaktionen").Range("A65536").End(xlUp).Row
       Set Suchbereich = Worksheets("Redaktionen").Range("A4:A" & lz)
    
       Januar1 = CDbl(CDate("01.01.2007"))
       Februar1 = CDbl(CDate("01.02.2007"))
    
       anz_janu = Application.WorksheetFunction.CountIf(Suchbereich, "<=" & Februar1)
       MsgBox anz_janu
    End Sub
  4. Führe das Makro aus: Gehe zurück zu Excel, drücke ALT + F8, wähle Zaehler und klicke auf Ausführen.

Dieser Code zählt die Anzahl der Datumswerte, die kleiner oder gleich dem letzten Tag im Februar sind.


Häufige Fehler und Lösungen

  • Fehler: CountIf funktioniert nicht wie erwartet.

    • Lösung: Stelle sicher, dass die Datumswerte im richtigen Format vorliegen. Verwende CDate für die Datumsumwandlung.
  • Fehler: Variablen werden nicht richtig deklariert.

    • Lösung: Überprüfe die Deklaration der Variablen. Beispielsweise wird nur die letzte Variable in einer Zeile als Integer deklariert, wenn mehrere Variablen in einer Zeile deklariert werden.

Alternative Methoden

Falls Du eine alternative Methode zur Zählung der Datumswerte benötigst, kannst Du auch eine For-Next-Schleife verwenden:

Sub ZaehlerMitSchleife()
    Dim lz As Long
    Dim Suchbereich As Range
    Dim anz_janu As Integer
    Dim i As Long

    lz = Sheets("Redaktionen").Range("A65536").End(xlUp).Row
    Set Suchbereich = Worksheets("Redaktionen").Range("A4:A" & lz)

    For i = 1 To lz - 3
        If Suchbereich.Cells(i, 1).Value <= CDate("01.02.2007") Then
            anz_janu = anz_janu + 1
        End If
    Next i

    MsgBox anz_janu
End Sub

Diese Methode zählt manuell die Datumswerte und kann nützlich sein, wenn Du spezifischere Bedingungen hast.


Praktische Beispiele

Hier sind einige weitere Beispiele zur Verwendung von CountIf und CountIfs in Excel VBA:

  1. Zählen von Datumswerten in einem bestimmten Jahr:

    anz_janu = Application.WorksheetFunction.CountIf(Suchbereich, ">=01.01.2007") - Application.WorksheetFunction.CountIf(Suchbereich, ">31.01.2007")
  2. Zählen von Datumswerten zwischen zwei Daten:

    anz_janu = Application.WorksheetFunction.CountIfs(Suchbereich, ">=01.01.2007", Suchbereich, "<=31.01.2007")

Diese Beispiele zeigen, wie flexibel die CountIf und CountIfs Funktionen in VBA sind.


Tipps für Profis

  • Nutze Option Explicit am Anfang Deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
  • Verwende Application.CountIf für einfache Zählungen, jedoch Application.WorksheetFunction.CountIf für komplexere Bedingungen.
  • Achte darauf, dass Datumsformate in VBA korrekt sind, um unerwartete Ergebnisse zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Bedingungen in CountIfs verwenden? Du kannst CountIfs verwenden, um mehrere Bedingungen zu kombinieren. Zum Beispiel:

anz_janu = Application.WorksheetFunction.CountIfs(Suchbereich, ">=01.01.2007", Suchbereich, "<=31.01.2007")

2. Was ist der Unterschied zwischen CountIf und CountIfs? CountIf ermöglicht das Zählen von Zellen, die einem einzigen Kriterium entsprechen, während CountIfs mehrere Kriterien gleichzeitig berücksichtigen kann.

3. Wie kann ich die Zählung für ein anderes Jahr durchführen? Ändere einfach die Datumswerte in Deinem Code, um die gewünschten Jahre zu berücksichtigen. Achte darauf, dass das Datumsformat korrekt 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