Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1272to1276
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

WSFunction.Countif mit Datum und Zeit

WSFunction.Countif mit Datum und Zeit
Peter
Guten Tag
Im Range "rUebermittlungszeit" habe ich verschiedene Zeiten eingetragen (mit NOW - ergibt z.B. 16.08.2012 16:40:59)
Der Date-Variable TimeUE habe ich folgendes weise ich folgendes zu:
timeUE = tabSLA.Cells(zeEintrag, spDat) + Range("versand_vor") 'Datum und Uhrzeit
im Direktbereich abgefragt erhalte ich beispielsweise
?timeUE
06.08.2012 12:00:00
Nun meine Frage:
Was ist an den untenstehenden Codezeilen mit .Value falsch?
Das Ergebnis gibt beide Male null, obwohl ich vier Einträge habe.
Danke für jeden Hinweis.
Gruss, Peter
With tabSLA.Cells(zeEintrag, spIn)
.Value = Application.WorksheetFunction.CountIf(rUebermittlungszeit, " .HorizontalAlignment = xlRight
.NumberFormat = "0"
End With
With tabSLA.Cells(zeEintrag, spOff)
.Value = Application.WorksheetFunction.CountIf(rUebermittlungszeit, ">=" & timeUE)
.HorizontalAlignment = xlRight
.NumberFormat = "0"
End With

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: WSFunction.Countif mit Datum und Zeit
17.08.2012 10:51:47
hary
hallo
ungetestet.
CountIf(rUebermittlungszeit, "

gruss hary
AW: WSFunction.Countif mit Datum und Zeit
17.08.2012 11:04:53
{Boris}
Hi Peter,
rUebermittlungszeit ist wohl eine benamte Zelle - und somit musst Du sie auch mit Range("rUebermittlungszeit") ansprechen.
Tipp: Mit Option Explicit wär Dir das selbst aufgefallen ;-))
VG, Boris
AW:@Boris
17.08.2012 11:07:30
hary
Hallo Boris
da hab ich sowas von gepennt. ;-)
Trink noch ein Bier auf dem Balkon.
gruss hary
AW: WSFunction.Countif mit Datum und Zeit
17.08.2012 11:25:13
Peter
Hallo Boris
Danke für den Hinweis.
Hier habe ich jedoch der Variable rUebermittlungszeit einen Range zugewiesen:
Set rUebermittlungszeit = tabTag.Range(tabTag.Cells(Range("zeStartAll").Row, Range("spUE").Column), tabTag.Cells(Range("zeEndAll").Row, Range("spUE").Column))
und Option Explicit steht auch vorne im Code.
Der Vorschlag von Hary hat noch nicht die Lösung gebracht. Die CLng-Funktion wandelt einen Ausdruck in den Datentyp Long um. Ich muss jedoch genaue Zeiten vergleichen.
Ich habe daher meinen Code in der hochgeladenen Mappe nochmals nachgebaut.
Beide Abfragen müssten mir den Wert 2 ergeben.
Vielen Dank und Gruss, Peter
https://www.herber.de/bbs/user/81462.xlsm
Anzeige
Komma und Punkt
17.08.2012 13:45:15
Erich
Hi Peter,
VBA spricht englisch. Probier mal

With tabSLA.Cells(zeEintrag, spIn)
.Value = Application.WorksheetFunction.CountIf(rUebermittlungszeit, _
"=" & Replace(CDbl(timeUE), ",", "."))
.HorizontalAlignment = xlRight
.NumberFormat = "0"
End With
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
AW: Komma und Punkt
17.08.2012 14:01:58
Peter
Hallo Erich
Vielen Dank, das ist grossartig.
Beinahe hätte ich schon ein Workarround mit "Evaluate" erstellt; das ist jetzt glücklicherweise nicht mehr notwendig.
Trotzdem ist mir das mit Komma und Punkt noch nicht klar.
Wenn ich den Code anhalte und im Direktbereich
?CDbl(timeUE)
eingebe, erhalte ich 41127.5
Heist das, dass Excel die serielle Zahl zwar 41127.5 (mit Punkt) im Direktbereich ausgibt, intern aber mit 41127,5 (Komma) rechnet?
Gruss, Peter
Anzeige
AW: Komma und Punkt
17.08.2012 15:46:10
Hajo_Zi
Hallo Peter,
der Punkt ist ein Komma in VBA, mit Deutschen Excel.

AW: Komma und Punkt
17.08.2012 15:50:28
Peter
Hallo Hajo und Erich
Das ist erstaunlich.
Selbst wenn mir im Direktbereich etwas anderes geliefert wird.
Was gibt es dann für einen Trick um festzustellen, dass das so ist.
Bei "normalen" Zahlen ist ja das nicht so. Gilt dies nur bei seriellen Zahlen oder gibt es andere Beispiele?
Gruss, Peter
AW: Komma und Punkt
17.08.2012 17:06:10
Erich
Hi Peter,
in der Gegend waren wir schon mal: https://www.herber.de/forum/archiv/1232to1236/t1235928.htm#1235979
Da steht u.a.:
der Begriff "serielle Zahl" taucht im Zusammenhang mit dem Datum (vor allem bei Office-Programmen) häufig auf.
Aber: Was eigentlich ist eine "serielle Zahl"? Und noch spannender: Was ist eine "nicht serielle Zahl"?
Du sollst mir diese Fragen nicht beantworten - ich wollte sie nur mal in den Raum stellen.
Und da stehen sie jetzt... :-)
sondern fälschlicherweise mit "serielle Zahl" übersetzt.
Tatsächlich sind die Zahlen ja Seriennummern der Tage ab 31.12.1899.
Schau dir mal die Ausgaben dieser Prozedur an:

Sub atPeter()
Dim dat As Date
dat = 41111.7
MsgBox dat
MsgBox CDbl(dat)
MsgBox CStr(CDbl(dat))    ' liefert ein Komma
' so ist der Vergleichswert richtig (ausführlich)
MsgBox Replace(CStr(CDbl(dat)), ",", ".")
' so steht er kürzer in der Formel - CStr() wird automatisch ausgeführt,
' denn Replace erwartet einen String, kein Double als Parameter.
MsgBox Replace(CDbl(dat), ",", ".")
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige
AW: Komma und Punkt
20.08.2012 22:11:46
Peter
Hallo Erich
Ich habe schon mehrmals gestaunt, wie du die vergangenen Einträge im Griff hast. Da bin ich schon etwas neugierig, wie du das schaffst ...
Vielen Dank auch für den Code.
Interessant ist, dass bei mir nachfolgende Zeile nicht ein Komma, sondern ein Punkt liefert - ich nehme an, dass hat mit der Ländereinstellung zu tun.
MsgBox CStr(CDbl(dat)) ' liefert ein Komma
Gruss, Peter
AW: Komma und Punkt - kleine Doku
21.08.2012 07:08:16
Peter
Hallo Erich
Ich habe die Ergebnisse mit Debug.Print ausgegeben. Unterhalt des Code sind die Ergebnisse aus dem Direktbereich aufgeführt.
Sub atPeter()
Dim dat As Date
dat = 41111.7
Debug.Print "A " & dat:  'MsgBox dat
Debug.Print "B " & CDbl(dat) ''MsgBox CDbl(dat)
Debug.Print "C " & CStr(CDbl(dat)) 'MsgBox CStr(CDbl(dat))    ' liefert ein Komma
' so ist der Vergleichswert richtig (ausführlich)
Debug.Print "D " & Replace(CStr(CDbl(dat)), ",", ".")  'MsgBox Replace(CStr(CDbl(dat)), ",",  _
".")
' so steht er kürzer in der Formel - CStr() wird automatisch ausgeführt,
' denn Replace erwartet einen String, kein Double als Parameter.
Debug.Print "E " & Replace(CDbl(dat), ",", ".")    '''MsgBox Replace(CDbl(dat), ",", ".")
End Sub
A 21.07.2012 16:48:00
B 41111.7
C 41111.7
D 41111.7
E 41111.7
Anzeige

311 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige