Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Stunden über VBA runden

Stunden über VBA runden
17.04.2008 20:05:42
Uwe
Hallo!
Ich stehe vor einem, derzeit für mich schier unlösbaren, Problem. Mit einem kleinen Programm gilt es Stunden zu summieren (kein Problem) die Summe dann aber zu runden. Wie funktioniert das ausschließlich über VBA? Es darf also weder Formel noch Funktion sein...
Zur Verdeutlichung ein Beispiel:
Von 0:00 bis 7:00 und von 15:30 bis 24:00 ergibt insgesamt 15:30 Stunden (logo...) Nun muß in diesem Fall das Ergebnis aber zwingend 16:00 Stunden ergeben. Wie das? Es gilt die Regel, das bei = 30 Min aufzurunden ist.
Selbstverstäbdlich bin ich für des Rätsels Lösung super dankbar.
Besten Dank
Uwe

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Stunden über VBA runden
17.04.2008 20:43:28
Tino
Hallo,
hier mal zwei Möglichkeiten
Formel:
 ABCD
115:3024:00:008:30 
200:0009:009:00 
3  17:3018:00:00

Formeln der Tabelle
ZelleFormel
C1=B1-A1
C2=B2-A2
C3=SUMME(C1:C2)
D3=WENN(MINUTE(C3)>=30;ZEIT(STUNDE(C3)+1;0;0); ZEIT(STUNDE(C3); 0;0))

gleiches mit VBA:

Dim Zeit As Date
Zeit = _
[=IF(MINUTE(C3)>=30,TIME(HOUR(C3)+1,0,0),TIME(HOUR(C3),0,0))]


Gruß
Tino

Anzeige
AW: Stunden über VBA runden
17.04.2008 20:57:54
Erich
Hallo Uwe,
oder so?

Sub RundStunden()
Dim datD As Date
datD = TimeValue("15:30")
MsgBox "vorher:   " & Format(datD, "hh:mm")
datD = TimeSerial(Hour(datD) - (Minute(datD) >= 30), 0, 0)
MsgBox "nachher1: " & Format(datD, "hh:mm")
' oder
datD = TimeValue("15:30")
datD = Round(24 * datD + 0.000000000001, 0) / 24
MsgBox "nachher2: " & Format(datD, "hh:mm")
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
P.S.: An deinem Level musst du vielleicht noch etwas arbeiten?

Anzeige
AW: Stunden über VBA runden
18.04.2008 18:03:00
Uwe
Hallo Erich!
Dein erstes Beispiel trifft genau (m)einen Nagel auf den Kopf! Besten Dank dafür. Nun ja, mein Level... So ganz "dummi" isser sicher nicht, der Uwe. Aaaaber...
Die aufwendigsten Kalendermodule, z.B. zudem die Umstellung von Winter- auf Sommerzeit, allesamt die aufwendigsten Module hinkriegen, aber noch nicht mal "rechnen" können (via VBA) das sind so meine Baustellen. Na ja, ich gestehe freiwillig...
Aber ganz ganz aufrichtig BESTEN DANK für Deine Hilfe!!!
Gruß aus dem sonnigen Kleve (KLE)
Uwe
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Stunden über VBA runden


Schritt-für-Schritt-Anleitung

Um Stunden über VBA zu runden, kannst du eine einfache Subroutine verwenden. Hier ist ein Beispiel, wie das geht:

Sub RundStunden()
    Dim datD As Date
    datD = TimeValue("15:30")

    MsgBox "vorher:   " & Format(datD, "hh:mm")

    ' Aufrunden, wenn die Minuten >= 30 sind
    datD = TimeSerial(Hour(datD) + (Minute(datD) >= 30), 0, 0)

    MsgBox "nachher: " & Format(datD, "hh:mm")
End Sub

In diesem Beispiel wird die Zeit in datD gespeichert, und je nach Minutenwert wird die Stunde aufgerundet. Wenn die Minuten 30 oder mehr betragen, wird zur nächsten vollen Stunde aufgerundet.


Häufige Fehler und Lösungen

  1. Fehler: Falsche Zeitformatierung

    • Lösung: Stelle sicher, dass du TimeValue oder TimeSerial korrekt verwendest. Falsches Format kann zu Fehlern führen.
  2. Fehler: VBA-Code funktioniert nicht

    • Lösung: Überprüfe, ob du die richtige Excel-Version verwendest, die VBA unterstützt. Manchmal kann das Makro durch Sicherheitsrichtlinien blockiert werden.

Alternative Methoden

Wenn du nicht nur mit VBA arbeiten möchtest, gibt es auch alternative Ansätze, um Stunden zu runden. Eine Möglichkeit ist die Verwendung von Excel-Formeln:

=WENN(MINUTE(C3)>=30;ZEIT(STUNDE(C3)+1;0;0);ZEIT(STUNDE(C3);0;0))

Diese Formel überprüft die Minuten in C3 und rundet entsprechend auf. Es ist eine einfache Methode, die ohne VBA funktioniert, jedoch nicht die Flexibilität eines VBA-Skripts bietet.


Praktische Beispiele

Hier sind einige Beispiele, die zeigen, wie du das Runden in verschiedenen Szenarien anwenden kannst:

  • Beispiel 1: Runden von 15:30 auf 16:00
  • Beispiel 2: Runden von 8:15 auf 8:00
  • Beispiel 3: Runden von 9:45 auf 10:00

Diese Beispiele verdeutlichen, wie die Regeln für das Runden in der Praxis umgesetzt werden können.


Tipps für Profis

  • Verwende Application.Ontime, um VBA-Programme automatisch zu bestimmten Zeiten auszuführen.
  • Füge Fehlerbehandlungen in deinen Code ein, um unerwartete Probleme zu vermeiden.
  • Experimentiere mit benutzerdefinierten Funktionen, um das Runden flexibler zu gestalten.

FAQ: Häufige Fragen

1. Wie kann ich Stunden abrunden?
Du kannst eine ähnliche Logik wie beim Aufrunden verwenden, aber anstelle von +1 in der Hour-Funktion, ziehe -1 ab, wenn die Minuten unter 30 sind.

2. Funktioniert dieser Code in allen Excel-Versionen?
Ja, solange deine Version VBA unterstützt, sollte der Code problemlos funktionieren. Beachte jedoch, dass die Benutzeroberfläche je nach Version variieren kann.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige