Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1832to1836
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA - ZählenWenn mit Datum

VBA - ZählenWenn mit Datum
03.06.2021 22:31:13
Magnus92
Hallo
ich versuche mich gerade in VBA einzuarbeiten. Einige kleine Erfolge habe ich schon erzielt, aber bei folgendem Problem komme ich einfach nicht weiter.
Gegeben ist eine Tabelle mit mehreren Daten in Spalte A mit der Zeichenfolge "tt.mm.jj" im Format "Standard". In dieser Spalte sollen die Daten gezählt werden, die neuer oder älter sind als ein bestimmtes Vergleichsdatum.
Damit ich auf dem Tabellenblatt zum Ziel komme, muss ich folgendes tun: (einen kürzeren Weg habe ich nicht gefunden)
1. in Spalte A das Format auf "Datum" ändern,
2. die Spalte A mit der Funktion

=Wert(A2)
nach Spalte B übertragen,
3. die Werte mit

=ZählenWenn(B2:B16;"
auszählen.
Versuche ich den Prozess im VBA-Editor zu schreiben, bekomme ich immer nur "0" heraus.
Ich habe schon einige Foren abgegrast und vieles versucht (z.B. Format, CDate, FormatNumber, Clng, ...).
Es funktioniert einfach nix.
Für Unterstützung wäre ich sehr dankbar.
Grüße

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

Betreff
Datum
Anwender
Anzeige
AW: VBA - ZählenWenn mit Datum
04.06.2021 00:31:44
Yal
Hallo Magnus,
Wenn dein Ziel die Eintragung einer Formel Mithilfe von VBA zu erreichen, muss Du etwas wie

Range("B1").FormulaR1C1 = "=COUNTIF(R2C1:R16C1,""
verwenden.
Es basiert auf die Spalte A, wo die Datum als Datum formatiert sind.
Wenn Du aber versuchst ein Funktion zu herstellen, das genau dasselbe macht aber mit VBA:

Public Function Datum_zählen(Target, Jahr, Monat, Tag) As Long
Dim Z As Range
For Each Z In Target.Cells
Datum_zählen = Datum_zählen - CInt(DateValue(Z) 
Diese Funktion Datum_zählen kannst Du auch als normale Excel-Formel verwenden, wenn Du diese in einem Modul (anstatt Tabellenblatt-Codepane) ablegst.
VG
Yal
Anzeige
AW: VBA - ZählenWenn mit Datum
04.06.2021 18:51:08
Magnus92
Hallo,
Danke für eure Beiträge, allerdings kann ich nur teilweise etwas damit anfangen.
Mir ist nicht klar, ...
1. wo oder wie bei der Excel-Funktion "Datum_zählen" das Vergleichsdatum eingetragen wird,
2. wie man so eine Funkion in eine Prozedur einbaut.
Vielleicht kann mir auch jemand erklären, warum folgende Prozedur nicht funktioniert:
(ein Problem: wie erkläre ich VBA, dass das Suchdatum ein Datum ist ohne dass es in einer Zelle steht?)

Sub Datum_Vergleich()
Dim shTab As Worksheet
Dim suchDatum As Date
Dim Bereich As Range
Dim ZeilenAnzahl As Integer
Set shTab = Sheets("Tab")
Set Bereich = shTab.Range("a2:a16")
Bereich.NumberFormat = "dd/mm/yyyy"
suchDatum = "01.01.2021"
ZeilenAnzahl = Application.WorksheetFunction.CountIf(Bereich, "
Grüße
Anzeige
AW: VBA - ZählenWenn mit Datum
04.06.2021 19:07:49
Daniel
Hi
Das hängt damit zusammen, dass es in VBA manchmal zwischen "Datumsdarstellung im amerikanischen" und "Datumsdarstellung im deutschen Format" Probleme gibt.
Dh das Datum wird in einem anderen Format über geben, als es die Funktion benötigt.
Ich würde hier den Ganzzalwert des Datums in die Funktion einsetzen:

Dim suchDatum as long
suchDatum = CLng(Dateserial(2021, 1, 1))
...CountIf(Bereich, "
Bei Datumserstellung mit DateSerial gibts auch keine Missverständnisse in bezug auf die einzelnen Datumsbestandteile.
Gruß Daniel
AW: VBA - ZählenWenn mit Datum
05.06.2021 00:05:17
Magnus92
Danke für die Hinweise. Sie haben mich auf Ideen gebracht, mit denen ich das Problem lösen konnte.
Für alle, die vielleicht auch auf das Problem stoßen...

Sub Datum_Vergleich()
Dim shTab As Worksheet
Dim Bereich As Range
Dim rng As Range
Dim ZeilenAnzahl As Integer
Dim Eingabe As String
Dim suchDatum As Long
Set shTab = Sheets("Tab")
Set Bereich = shTab.Range("a2:a16")
For Each rng In Bereich
rng = CDate(rng)
Next
Bereich.NumberFormat = "dd/mm/yy"
Eingabe = "01.01.2021"
suchDatum = DateValue(Eingabe)
ZeilenAnzahl = Application.WorksheetFunction.CountIf(Bereich, "

Anzeige
Du hast keine Daten …
04.06.2021 06:10:41
RPP63
Moin!
… sondern TEXTE, die so aussehen wie Daten.
Zunächst mal solltest Du die Texte in echte Daten umwandeln.
Du machst es mit =WERT() in einer Hilfsspalte.
Sehr viel einfacher ist
► Spalte A markieren
► Daten, Text in Spalten
► sofort "fertigstellen"
dann funktioniert auch ZÄHLENWENN() oder SUMMENPRODUKT()
Wenn Du versuchst, ein echtes Datum in VBA abzufragen, solltest Du, wenn Du einen String verwendest, wissen, dass VBA ein deutsches Datum nicht erkennt!
entweder Du nutzt das US-Format "mm/dd/yyyy" oder einfacher Yals Variante mit DateSerial(y, m, d)
Gruß Ralf
Anzeige

311 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige