Discussion:
Zeiten in Excel/VBA
(zu alt für eine Antwort)
Jochen Walerka
2007-09-03 19:29:23 UTC
Permalink
Hallo,

habe mir eine kleine Aufgabe gestellt und komme nicht weiter, weil mir
das Zeitkonzept von Excel und das Handling per VBA nicht klar ist.
Es geht (wie oft) um Arbeitszeiten, dabei zählt Nachtschicht z.B. von
20:00 Uhr bis 6:00 Uhr.
Jetzt können sich Arbeitszeiten genau damit decken, die Nachtschicht
voll überlappen (19:00 - 7:00) oder nur teilweise überlappen.
Da stört schonmal bei der Umrechnung in Arbeitsstunden, dass 6:00 <
20:00 ist, also teile ich die Nachtschicht in 20:00 - 24:00 und 0:00 -
6:00. Also 4 + 6 = 10 Stunden.
Und hier gehts schon los: es gibt keine 24:00-Zeit in Excel, da gehts
nur bis 23:59:59.

Frage: ist mein Konzept schon vom Ansatz her falsch und wird das
gaaanz anders gemacht?
Zusatzfrage: Wenn ich eine Date-Variable tmpzeit = "23:00" habe, wie
addiere ich da Stunden oder Minuten drauf?

Danke für Wegweisungen
Jo
Peter Schürer
2007-09-03 22:15:02 UTC
Permalink
"Jochen Walerka" <***@gmx.de> schrieb im Newsbeitrag news:***@r34g2000hsd.googlegroups.com...
Hallo,

habe mir eine kleine Aufgabe gestellt und komme nicht weiter, weil mir
das Zeitkonzept von Excel und das Handling per VBA nicht klar ist.
Es geht (wie oft) um Arbeitszeiten, dabei zählt Nachtschicht z.B. von
20:00 Uhr bis 6:00 Uhr.
Jetzt können sich Arbeitszeiten genau damit decken, die Nachtschicht
voll überlappen (19:00 - 7:00) oder nur teilweise überlappen.
Da stört schonmal bei der Umrechnung in Arbeitsstunden, dass 6:00 <
20:00 ist, also teile ich die Nachtschicht in 20:00 - 24:00 und 0:00 -
6:00. Also 4 + 6 = 10 Stunden.
Und hier gehts schon los: es gibt keine 24:00-Zeit in Excel, da gehts
nur bis 23:59:59.

Frage: ist mein Konzept schon vom Ansatz her falsch und wird das
gaaanz anders gemacht?
Zusatzfrage: Wenn ich eine Date-Variable tmpzeit = "23:00" habe, wie
addiere ich da Stunden oder Minuten drauf?

Danke für Wegweisungen
Jo

Hallo Jochen,

hier mal eine kleine Wegweisung:
XL rechnet nicht mit Zeiten sondern mit Zahlen, auch wenn es nicht so
aussieht.
Formatiere mal Deine Zellen mit der Datumsangabe als Zahl und Du wirst etwas
in der Art von 39689 sehen.
XL beginnt mit der Zeit- und Datumsberechnung am 01.01.1900, ist gleich (als
Zahl) 1.
Genau so wird die Zeit berechnet.
A1 = (als Zeit formatiert) 1:00:00
B1 = (als Zahl formatiert) Formel =A1/1440 (1440 ergibt sich aus 24 h * 60
min.) ergibt die Zahl 0,000028935.
In C1 die Formel =b1*1440 und C1 als Zeit formatiert ergibt die Zeit 1:00.
Deine Formel zur Zeitberechnung mit Nachtstunden sollte also so aussehen,
z.B.:
In A2 steht die Kommt-Zeit und in B2 die Geht-Zeit, die Formel in C2:

=WENN(B2<A2;B2+1-A2;B2-A2)

Sollte eigentlich helfen (ansonsten "google" Zeitberechnung mit Excel)

MfG
Peter
Robert Jakob
2007-09-03 22:57:24 UTC
Permalink
Post by Jochen Walerka
Hallo,
habe mir eine kleine Aufgabe gestellt und komme nicht weiter, weil mir
das Zeitkonzept von Excel und das Handling per VBA nicht klar ist.
Es geht (wie oft) um Arbeitszeiten, dabei zählt Nachtschicht z.B. von
20:00 Uhr bis 6:00 Uhr.
Jetzt können sich Arbeitszeiten genau damit decken, die Nachtschicht
voll überlappen (19:00 - 7:00) oder nur teilweise überlappen.
Da stört schonmal bei der Umrechnung in Arbeitsstunden, dass 6:00 <
20:00 ist, also teile ich die Nachtschicht in 20:00 - 24:00 und 0:00 -
6:00. Also 4 + 6 = 10 Stunden.
Und hier gehts schon los: es gibt keine 24:00-Zeit in Excel, da gehts
nur bis 23:59:59.
Frage: ist mein Konzept schon vom Ansatz her falsch und wird das
gaaanz anders gemacht?
Zusatzfrage: Wenn ich eine Date-Variable tmpzeit = "23:00" habe, wie
addiere ich da Stunden oder Minuten drauf?
Danke für Wegweisungen
Jo
Hallo Jochen,

betrachten wir das Ganze mal als Tabelle.
Ich gebe Dir hier mal ein einfaches Beispiel.

In die Zelle A4 schreibst Du den Text Datum
In die Zelle A5 schreibst Du das Datum wie üblich: 03.09.2007

In die Zelle B4 schreibst Du den Text Anfang
In die Zelle B5 schreibst Du die Uhrzeit mit Doppelpunkten
z.B. 9:00 und notfalls formatierst Du diese Zelle als hh:mm

In die Zelle C4 schreibst Du den Text Ende
In die Zelle C5 schreibst Du die Uhrzeit 12:00

In die Zelle D4 schreibst Du den Text Stunden
In die Zelle D5 schreibst Du die Formel =C5-B5 und bekommst das
Ergebnis (formatiert hh:mm) von 3:00

In die Zelle E3 schreibst Du die Uhrzeit 22:00
In die Zelle E4 schreibst Du den Text Überstunden
In die Zelle E5 schreibst Du die Formel =WENN(C5>$E$3;C5-$E$3;"")

In die Zelle F4 schreibst Du den Text DezimalZeit
In die Zelle F5 schreibst Du die Formel =D5+24 und formatierst
diese Zelle als normale Dezimalzahl 0,00 "h" und bekommst das
Ergebnis 3,00 h

So diese Formeln kannst Du beliebig nach unten ziehen und
Für die Überstunden kannst Du das gleiche wie in Spalte F
in der Spalte G machen und dann mit den Dezimalzahlen beliebig
weiter rechnen.

Ich habe das bei mir noch etwas ausgefeilter aber für den
Anfang müstest Du damit mal klar kommen.

MfG
Robert
Jochen Walerka
2007-09-04 18:32:52 UTC
Permalink
Hallo Peter, hallo Jakob,

danke für eure Wegweisungen, das hat mir zum Verständnis sehr
weitergeholfen.

Jo
Claus Busch
2007-09-04 18:44:33 UTC
Permalink
Hallo Jochen,

dann noch einen Tipp von mir:
Angenommen die Startzeit steht in A2 und die Endzeit in B2. Dann in C2:
=REST(B2-A2;1)
Dann braucht du nicht abfragen, welche dieser Zeiten kleiner ist.


Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate
Robert Jakob
2007-09-04 22:21:46 UTC
Permalink
Post by Peter Schürer
Hallo Jochen,
=REST(B2-A2;1)
Dann braucht du nicht abfragen, welche dieser Zeiten kleiner ist.
Mit freundlichen Grüssen
Claus Busch
Hallo Claus,

Dein Tipp ist nicht nur gut, sondern sehr gut, man spart sich wirklich
die WennFormel.

Da ich fast alle Formeln mit VBA an Ort und Stelle bringe
habe ich Deinen Tipp mal nachgebaut und mußte leider
feststellen, daß der Code nicht auf Anhieb läuft.

Hier die Beispiele:
(Bei mir steht Anfang in Spalte 3 und Ende in Spalte 4)

VarianteA
Range("E" & ActiveCell.Row).FormulaR1C1 = "=Rest(RC[-1]-RC[-2],1)"

VarianteB
Range("E" & ActiveCell.Row).FormulaR1C1 = "=Rest(RC4-RC3,1)"

Sowohl VarianteA als auch VarianteB bringen zunächst eine
Fehlermeldung,
erst dann wenn ich die Zelle in SpalteE nochmals anwähle
und dann mit Return abschließe, dann funktioniert der Code.
Kannst Du mir sagen woran das liegen könnte ?

MfG
Robert
Claus Busch
2007-09-05 09:09:10 UTC
Permalink
Hallo Robert,
Post by Robert Jakob
VarianteA
Range("E" & ActiveCell.Row).FormulaR1C1 = "=Rest(RC[-1]-RC[-2],1)"
VarianteB
Range("E" & ActiveCell.Row).FormulaR1C1 = "=Rest(RC4-RC3,1)"
Sowohl VarianteA als auch VarianteB bringen zunächst eine
Fehlermeldung,
erst dann wenn ich die Zelle in SpalteE nochmals anwähle
und dann mit Return abschließe, dann funktioniert der Code.
Kannst Du mir sagen woran das liegen könnte ?
VBA spricht Englisch ;-), außer du würdest FormulaLocal nehmen.
Ändere die Zeile so:
Range("E" & ActiveCell.Row).FormulaR1C1 = "=Mod(RC[-1]-RC[-2],1)"


Mit freundlichen Grüssen
Claus Busch
--
Win XP Prof SP2 / Vista Ultimate
Office 2003 SP2 / 2007 Ultimate
Robert Jakob
2007-09-05 13:32:09 UTC
Permalink
Am Wed, 5 Sep 2007 11:09:10 +0200 schrieb Claus Busch:


snip-
Post by Claus Busch
VBA spricht Englisch ;-), außer du würdest FormulaLocal nehmen.
Range("E" & ActiveCell.Row).FormulaR1C1 = "=Mod(RC[-1]-RC[-2],1)"
Hallo Claus,

danke für Deinen Hinweis ich habe einfach zu lange Excel mit VBA
auf gut deutsch dressiert und daher ist es mir nicht aufgefallen.
Statt Rest muß ich halt Mod nehmen und es funktioniert.

Ich habe allerdings noch "IF" und "AND" einbauen mussen, damit
die Formel wenn mal keine Werte da sind unsichtbar ist.

"=IF(AND(RC3<>0,RC4<>0),Mod(RC4-RC3,1),"""")"


MfG
Robert

Lesen Sie weiter auf narkive:
Loading...