Microsoft Excel

Herbers Excel/VBA-Archiv

Problem mit countIf und Datum

Betrifft: Problem mit countIf und Datum von: reefgirl81
Geschrieben am: 16.09.2014 02:05:55

Liebe Mitglieder,

ich habe vor kurzem mit VBA begonnen. Ich muss dazu sagen, dass ich bereits seit Jahren in C# und Java entwickle. Ich weiß, nun aber trotzdem nicht mehr weiter.
Ich habe mir bereits sehr viel Hilfe von euch geholt, indem ich alte Forumsbeiträge durchstöbert habe, aber leider...
Ich weiß, dass die Frage bzgl. der WorksheetFunction.CountIf bereits öfters gestellt wurde und habe diese Beiträge bereits studiert und ich komme auch meinen Fehler nicht drauf.
Es geht um eine kleine Teilfunktion meines Programms. Ich habe in einer Spalte Range("A4:A" & lastRowData) lauter Daaten (formatiert als Datum kurz) gespeichert habe. Das mittels countIf, möchte ich herausfinden, ob es Daten gibt, welche größer als bspw. der 30.06.2014 sind. Die betreffenden Codezeilen sehen wie folgt aus:

Dim toDate As Date
Dim countIfs As Double
Dim rangeDates As range
Dim lastRowData As Integer ' ist die letzte Zeile in meinem Arbeitsblatt
toDate = Format("30.06.2014", "dd.mm.yyyy")
Set rangeDate = ActiveWorkbook.Sheets("Daten").range("A4:A" & lastRowData)
countIfs = WorksheetFunction.CountIf(rangeDates, ">" & toDate)

Nun das suspekte. Die Variable countIfs sollte das Ergebnis 307 zurückliefern, da ich 307 Daten in der Range habe, welche alle größer als der 30.06.2014 sind. Das komische ist, dass countIfs, beim durchsteppen aber den Wert 2 erhält, was genau zwei Datumsangaben entspricht, an denen der Tag der 31. ist.

Was mache ich falsch... komme wirklich schon den ganzen Tag nicht weiter und das witzige ist, dass ich die countIf-Funktion bereits mehrmals in meinem Projekt angewendet habe, nur ohne "<,>,..."-Operatoren.

Ich würde mich wirklich riesig freuen, wenn Ihr mir weiterhelfen könntet

  

Betrifft: AW: Problem mit countIf und Datum von: Luschi
Geschrieben am: 16.09.2014 05:05:58

Hallo reefgirl81,

zwei kleine Änderungen sind erforderlich:
- Dim toDate As String
- toDate = Format("30.06.2014", "M\/d\/yyyy")

In Vba ist eben alles amerikanisch und gerade bei der Datumssuche wird durch den Programmierer viel zu viel deutsch gedacht. In der Tabellenansicht ist das Datum zwar nationalisiert/regionalisiert, aber im Innersten doch amerikanisch gespeichert.

Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: Problem mit countIf und Datum von: reefgirl81
Geschrieben am: 16.09.2014 17:20:42

Hallo Luschi,

danke vielmals für deine rasche Antwort... mit so einer Geschwindigkeit habe ich nicht gerechnet.

Ich habe deinen Vorschlag übernommen, jedoch funktoniert es immer nocht nicht. Das Ergebnis ist 0 obwohl es 307 sein sollte.
Eigentlich will ich wissen, wieviele Feedbackbögen innerhalb einer angegebenen Zeitspanne ausgefüllt wurden. Deshalb frage ich mit dem ersten countIf ab, ob es Daten gibt die kleiner als das Startdatum sind und subtrahiere diese von der Variable numberOfFB. Die zweite countIf sollte das Ergebnis zurückliefern, wieviele nach dem Endedatum enthalten sind. Schlussendlich sollte die Variable numberOfFB die Anzahl der innerhalb in dieser Zeitspanne ausgefüllten Feedbackbögen ergeben.
Ich weiß, dass der Weg etwas kompliziert ist, aber mit countIfs hat gar nichts funktioniert und deshalb bin ich auf diesen Weg gekommen.

Die im Code unterhalb enthaltenen Variablen aktDatFrom und aktDatTo sind vom Typ Date im Format "dd.mm.yyyy"

Dim countIfs As Double
        Dim numberOfFB As Integer ' Anzahl der gesamten Feedbackbögen/Daten
        Dim fromDate As String 
        Dim rangeDate As range
        Dim toDate As String 
        Set rangeDate = ActiveWorkbook.Sheets("Daten").range("A4:A" & lastRowData)


fromDate = Format(aktDatFrom, "M\/d\/yyyy")
        toDate = Format(aktDatTo, "M\/d\/yyyy") ' Format("30.06.2014", "M\/d\/yyyy")
        numberOfFB = lastRowData - 3 ' da die ersten drei Zeilen im Arbeitsblatt die Ü _
berschriften 
                                       enthalten


countIfs = WorksheetFunction.CountIf(rangeDate, "<" & fromDate)
        numberOfFB = numberOfFB - countIfs
        countIfs = WorksheetFunction.CountIf(rangeDate, ">" & toDate)
        numberOfFB = numberOfFB - countIfs
Würde mich über weitere Hilfe freuen. Danke schonmal im voraus


  

Betrifft: AW: Problem mit countIf und Datum von: Luschi
Geschrieben am: 16.09.2014 18:32:57

Hallo reefgirl81,

hier mal ein Beispiel von mir. Die Datumswerte in Spalte 'A' können sortiert oder unsortiert ermittelt werden. Einige Datumswerte entsprechen nicht dem Standardformat - und funktioniert.

https://www.herber.de/bbs/user/92668.xlsm

Gruß von Luschi
aus klein-Paris


 

Beiträge aus den Excel-Beispielen zum Thema "Problem mit countIf und Datum"