Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

WSFunction.Countif mit Datum und Zeit | Herbers Excel-Forum


Betrifft: WSFunction.Countif mit Datum und Zeit von: Peter
Geschrieben am: 17.08.2012 10:41:23

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, "<" & timeUE)
.HorizontalAlignment = xlRight
.NumberFormat = "0"
End With

With tabSLA.Cells(zeEintrag, spOff)
.Value = Application.WorksheetFunction.CountIf(rUebermittlungszeit, ">=" & timeUE)
.HorizontalAlignment = xlRight
.NumberFormat = "0"
End With

  

Betrifft: AW: WSFunction.Countif mit Datum und Zeit von: hary
Geschrieben am: 17.08.2012 10:51:47

hallo
ungetestet.

CountIf(rUebermittlungszeit, "<" & Clng(timeUE))

gruss hary


  

Betrifft: AW: WSFunction.Countif mit Datum und Zeit von: {Boris}
Geschrieben am: 17.08.2012 11:04:53

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


  

Betrifft: AW:@Boris von: hary
Geschrieben am: 17.08.2012 11:07:30

Hallo Boris
da hab ich sowas von gepennt. ;-)
Trink noch ein Bier auf dem Balkon.
gruss hary


  

Betrifft: AW: WSFunction.Countif mit Datum und Zeit von: Peter
Geschrieben am: 17.08.2012 11:25:13

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


  

Betrifft: Komma und Punkt von: Erich G.
Geschrieben am: 17.08.2012 13:45:15

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

With tabSLA.Cells(zeEintrag, spOff)
   .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


  

Betrifft: AW: Komma und Punkt von: Peter
Geschrieben am: 17.08.2012 14:01:58

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


  

Betrifft: AW: Komma und Punkt von: Hajo_Zi
Geschrieben am: 17.08.2012 15:46:10

Hallo Peter,

der Punkt ist ein Komma in VBA, mit Deutschen Excel.

GrußformelHomepage


  

Betrifft: AW: Komma und Punkt von: Peter
Geschrieben am: 17.08.2012 15:50:28

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


  

Betrifft: AW: Komma und Punkt von: Erich G.
Geschrieben am: 17.08.2012 17:06:10

Hi Peter,
in der Gegend waren wir schon mal: https://www.herber.de/forum/archiv/1232to1236/t1235928.htm#1235979

Da steht u.a.:
Betrifft: Nebenbemerkung zu seriell von: Erich G. Geschrieben am: 30.10.2011 18:41:27

Hi Peter,
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... :-)

Betrifft: Versuch einer Antwort von: Erich G. Geschrieben am: 30.10.2011 18:45:32

Der engl. Begriff "serial number" wurde und wird nicht mit "Seriennummer",
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


  

Betrifft: AW: Komma und Punkt von: Peter
Geschrieben am: 20.08.2012 22:11:46

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


  

Betrifft: AW: Komma und Punkt - kleine Doku von: Peter
Geschrieben am: 21.08.2012 07:08:16

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