VBA CountIf mit <=
#1
Hallo zusammen,

ich versuche mit VBA Werte zu zählen. Folgendes funktioniert:


Code:
cells(7,2) =Application.countif(wks.Columns(5), cells(3,2) + 8)

das aber nicht:


Code:
cells(7,2) =Application.countif(wks.Columns(5), "<=" & cells(3,2) + 8)

in B3 steht ein Datum.

Was läuft hier schief?
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#2
Hallo Edgar

Ich bin ja nicht der VBA-Experte aber müsste es nicht Application.Worksheetfunction.Countif sein?

Ansonsten habe ich bei einer kurzen Websuche das gefunden:
Zitat:dieses Problem wurde hier im Forum schon zig-mal gepostet. Es liegt grundsätzlich an der Referenzierung des Arbeitsbereiches.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Top
#3
Hallo Detlef,

das Ergebnis ist bei beiden Schreibweisen gleich. Was  ich bisher nirgendwo finden konnte, ist ein Countif mit einem Vergleichsoperator & einer Range. Und genau das funktioniert bei mir nicht! Der erste Ausdruck bringt ja ein korrektes Ergebnis.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#4
Ich kann den Fehler reproduzieren.

Bei einer Zahl, die kein Datum ist (! sehr widersprüchlich, denn Datum ist Zahl !), klappt Dein Code aber. Es liegt also am Datum.

Referenzierungserfordernisse (jedesmal mit Worksheet) sind zwar natürlich und grundsätzlich zu beachten, aber hier nicht der Grund, schon aufgrund Boskos Schilderung.

Lösung gefunden: Hänge an die Zellreferenz .Value2 an; .Value geht nicht (VBA-Hilfe zu Value2).

Gelten tut die Anomalie auch für eine Variant-Variable statt eines Zellbezugs, da auch dort der Typ Datum (und Währung) jeweils als Information erhalten bleibt. Da muss statt .Value2 dann umgewandelt werden, da Variable nur Werte als Info haben, Zellen aber eben "alles" (Werte, Formeln, Formate, bed.F., Datenüberprüfung ...).

Ohne Gewähr. Single, Double, Long, Integer und Byte sollten demnach keine Probleme machen, weil sie bei .Value2 nicht aufgeführt sind. Boolean vermute ich bei Date und Currency, aber ich kann nicht alles testen.

Bei Variant sollte man in VBA daher immer .Value2 statt .Value oder (nichts als Default) nehmen, wenn Funktionsargumente in .Worksheetfunction.Funktion benötigt werden.
Top
#5
Hallo lupo,

danke für die Info. Ich dachte mir schon, dass es am Datum hängt. Bis jetzt habe ich mal Formeln in die Zellen geschrieben und die durch Werte ersezt, ist zwar eine Krücke, funktioniert aber. Jetzt kann ich Deinen Vorschlag noch testen.

Getestet! Funktioniert!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#6
Hallo Bosko, vielleicht noch als Nachfrage für alle:

Ist .Value2
a) nur am CountIf-Kriterium oder
b) zusätzlich am CountIf-Bereich nötig, oder auch
c) nur am CountIf-Bereich ausreichend?

Oder gibt es beim Versuch bei b) oder c) Fehler?

Ich hatte meine Testdaten nicht entsprechend ausgerüstet. Danke!
Top
#7
Hallo lupo,

ich habe es nur am Kriterium eingesetzt, das war ausreichend. Einsatz im Suchbereich führt zu einem Fehler.

Es gibt ja, soweit ich weiß,  auch bei anderen VBA-Funktionen (Match, Vlookup) Probleme mit dem Datum als Suchkriterium.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste