Anzeige
Archiv - Navigation
1388to1392
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

Zwischen Uhrzeiten volle Stunden eintragen mit VBA

Zwischen Uhrzeiten volle Stunden eintragen mit VBA
25.10.2014 16:42:49
Kasimir
Hallo an alle!
Ich grüble nun schon eine Weile und komme nicht weiter. Mit folgendem Makro füge ich Uhrzeiten untereinander in Spalte A ein. Die Differenz zwischen den Uhrzeiten ergibt sich aus der Minuteneingabe am Anfang des Makros.
Option Explicit
Sub Minuten() Dim dblZeitabstaende As Double Dim intMinute As Integer Dim i As Integer Dim cdTime As Date Dim cdZeit As Date intMinute = InputBox("Minutenzahl als Dezimalzahl (Beispiel für 25 Minuten: 25) eintragen...") dblZeitabstaende = CDate("00:" & intMinute) * 24 cdZeit = Format((dblZeitabstaende) / 24, "hh:mm") cdTime = CDate("00:00:00") For i = 1 To 24 / dblZeitabstaende Cells(i, 1) = Format(cdTime, "hh:mm") cdTime = cdTime + cdZeit Next End Sub Nachfolgend mal ein Auszug, wie das dann in der Tabelle in Spalte A aussieht.
Tabelle2

 ABCD
100:00 00:00 
200:25 00:25 
300:50 00:50 
401:15 01:00 
501:40 01:15 
602:05 01:40 
702:30 02:00 
802:55 02:05 
903:20 02:30 
1003:45 02:55 
1104:10 03:00 
1204:35 03:20 
1305:00 03:45 
1405:25 04:00 
1505:50 04:10 
1606:15 04:35 
1706:40 05:00 


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Nun möchte ich aber bei Eingabe von z.B. 25 Minuten, das, wie in der Abbildung in Spalte C gekennzeichnet, volle Stunden eingefügt werden. Also 00:50 die Uhrzeit 01:00, nach 01:40 die Uhrzeit 02:00 usw. und da hänge ich im Moment, weil ich keinerlei Ansatz habe, wie ich das anstellen könnte.
Daher meine Frage, ob jemand von Euch einen Lösungsweg wüsste?
Gruß,
Kasimir

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zwischen Uhrzeiten volle Stunden eintragen mit VBA
25.10.2014 17:30:36
Hajo_Zi
Hallo Kasimir,
ich habe es nicht bis zum Ende laufen lassen.
Option Explicit
Sub Minuten()
Dim dblZeitabstaende As Double
Dim intMinute       As Integer
Dim i               As Integer
Dim cdTime          As Date
Dim cdZeit          As Date
intMinute = InputBox("Minutenzahl als Dezimalzahl (Beispiel für 25 Minuten: 25) eintragen... _
")
dblZeitabstaende = CDate("00:" & intMinute) * 24
cdZeit = Format((dblZeitabstaende) / 24, "hh:mm")
cdTime = CDate("00:00:00")
For i = 1 To 24 / dblZeitabstaende + 23
If Hour(cdTime)  Hour(cdTime - cdZeit) And cdTime  0 Then
Cells(i, 1) = Format(CInt((cdTime) * 24) / 24, "hh:mm")
i = i + 1
End If
Cells(i, 1) = Format(cdTime, "hh:mm")
cdTime = cdTime + cdZeit
Next
End Sub

Anzeige
AW: Zwischen Uhrzeiten volle Stunden eintragen mit VBA
25.10.2014 18:06:00
Kasimir
Hallo Hajo!
Danke Dir für Deine Antwort und die Lösung, die tadellos funktioniert. Allerdings habe ich dazu noch eine Frage. Kann man in der Zeile
For i = 1 To 24 / dblZeitabstaende + 23
die Zahl 23 irgendwie variabel halten? Denn bei Eingabe von 25 Minuten funktioniert‘s damit ja, aber wenn ich z.B. 35 Minuten eintrage, dann ist das Endresultat, das ich haben möchte, nicht mehr richtig. Es sollen immer nur Uhrzeiten für 24 Stunden eingefügt werden. Mit Deiner Lösung und der Eingabe 25 Minuten funktioniert das. Gebe ich nun aber 35 Minuten ein, werden Uhrzeiten nach 00:00 eingetragen, was ich nicht haben möchte. Es sollen nur Uhrzeiten von einem Tag abgebildet werden.
Dann hätte ich da noch eine Frage, wenn ich so frech sein darf? ;-)
Wie müsste das Makro geändert werden, damit nach der vollen Stunde erneut mit der Minutenzahl der Eingabe gearbeitet wird. Als Beispiel mal wieder eine Grafik mit 25 Minuten:
Tabelle2

 AB
100:00 
200:25 
300:50 
401:00 
501:25hier dann wieder mit 25 Minuten beginnen
601:50 
702:00 
802:25hier dann wieder mit 25 Minuten beginnen
902:50 
1003:00 
1103:25hier dann wieder mit 25 Minuten beginnen
1203:50 
1304:00 
1404:25 
1504:50 
1605:00 
1705:25 


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
oder mit 35 Minuten
Tabelle2

 AB
100:00 
200:35 
301:00 
401:35hier dann wieder mit 35 Minuten beginnen
502:00 
602:35hier dann wieder mit 35 Minuten beginnen
703:00 
803:35hier dann wieder mit 35 Minuten beginnen
904:00 
1004:35hier dann wieder mit 35 Minuten beginnen
1105:00 


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Nochmal danke für die Hilfe und Gruß
Kasimir

Anzeige
AW: Zwischen Uhrzeiten volle Stunden eintragen mit VBA
25.10.2014 18:09:57
Gerold
Hallo Kasimir
Von mir mal etwas abgeändert
in Spalte c nur volle Stunden

Sub Minuten()
Dim dblZeitabstaende As Double
Dim intMinute       As Integer
Dim i               As Integer
Dim cdTime          As Date
Dim cdTimeC         As Date
Dim cdZeit          As Date
Dim Std            As Integer
intMinute = InputBox("Minutenzahl als Dezimalzahl (Beispiel für 25 Minuten: 25) eintragen...")
dblZeitabstaende = CDate("00:" & intMinute) * 24
cdZeit = Format((dblZeitabstaende) / 24, "hh:mm")
cdTime = CDate("00:00:00")
For i = 1 To 24 / dblZeitabstaende
cdTimeC = cdTime
If Minute(cdTime) > 0 Then
Std = Hour(cdTime) + 1
If Std > 23 Then Std = 0
cdTimeC = CDate(Std & ":00:00")
End If
Cells(i, 1) = Format(cdTime, "hh:mm")
Cells(i, 3) = Format(cdTimeC, "hh:mm")
cdTime = cdTime + cdZeit
Next
End Sub
Gruß Gerold
Rückmeldung wäre nett.

Anzeige
AW: Zwischen Uhrzeiten volle Stunden eintragen mit VBA
25.10.2014 18:13:56
Kasimir
Hallo Gerold!
Danke Dir für Deine Antwort, allerdings sollten die Stunden nicht in Spalte C, sondern zwischen die entsprechenden Uhrzeiten in Spalte A eingefügt werden, so wie in Hajo's Lösung.
Gruß,
Kasimir

AW: Zwischen Uhrzeiten volle Stunden eintragen mit VBA
25.10.2014 19:07:53
Hajo_Zi
Hallo Kasimir,
ich habe in dem Zusammenhang noch paar Fehler beseitigt, das die volle Stunde mehrmals angezeigt wird.
Option Explicit
Sub Minuten()
Dim dblZeitabstaende As Double
Dim intMinute       As Integer
Dim i               As Integer
Dim cdTime          As Date
Dim cdZeit          As Date
intMinute = InputBox("Minutenzahl als Dezimalzahl (Beispiel für 25 Minuten: 25) eintragen... _
")
dblZeitabstaende = CDate("00:" & intMinute) * 24
cdZeit = Format((dblZeitabstaende) / 24, "hh:mm")
cdTime = CDate("00:00:00")
Application.ScreenUpdating = False
Cells(1, 1) = Format(cdTime, "hh:mm")
cdTime = cdTime + cdZeit
i = 2
Do
If Application.RoundDown(cdTime * 24, 0)  _
Application.RoundDown((cdTime - cdZeit) * 24, 0) _
And Application.RoundDown((cdTime) * 24, 0)  _
Application.RoundDown((cdTime + cdZeit) * 24, 0) Then
Cells(i, 1) = Format(Application.RoundDown((cdTime) * 24, 0) / 24, "hh:mm")
i = i + 1
End If
Cells(i, 1) = Format(cdTime, "hh:mm")
i = i + 1
If Day(cdTime + cdZeit)  30 Then
Exit Do
End If
cdTime = cdTime + cdZeit
Loop
Application.ScreenUpdating = False
End Sub

Gruß Hajo

Anzeige
AW: Zwischen Uhrzeiten volle Stunden eintragen mit VBA
26.10.2014 07:57:30
Kasimir
Hallo Hajo!
Sorry, dass ich mich erst jetzt für Deine erneute Hilfe bedanke. Allerdings werden nun keine vollen Stunden mehr eingefügt. Das war ja das, was ich erreichen wollte. Schön wäre es auch noch, wenn eben nach dem Einfügen der vollen Stunde mit dem Intervallwert, z.B. 25 Minuten, wieder begonnen wird.
Tabelle2

 ABCD
1Beispiel bei z.B. 25 Minuten Beispiel bei z.B. 35 Minuten 
200:00 00:00 
300:25 00:35 
400:50 01:00 
501:00 01:35 
601:25 02:00 
701:50 02:35 
802:00 03:00 
902:25   
1002:50   
1103:00   
12    


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Nochmal Danke für Deine Hilfe,
Kasimir

Anzeige
AW: Zwischen Uhrzeiten volle Stunden eintragen mit VBA
26.10.2014 08:22:54
Hajo_Zi
Hallo Kasimir,
das mit der stunde lag wohl daran, das ich mit einer anderen Zeit getestet habe, das Habe ich noch eingebaut.
Option Explicit
Sub Minuten()
Dim dblZeitabstaende As Double
Dim intMinute       As Integer
Dim i               As Integer
Dim cdTime          As Date
Dim cdZeit          As Date
intMinute = InputBox("Minutenzahl als Dezimalzahl (Beispiel für 25 Minuten: 25) eintragen... _
")
dblZeitabstaende = CDate("00:" & intMinute) * 24
cdZeit = Format((dblZeitabstaende) / 24, "hh:mm")
cdTime = CDate("00:00:00")
Application.ScreenUpdating = False
Cells(1, 1) = Format(cdTime, "hh:mm")
cdTime = cdTime + cdZeit
i = 2
Do
If Application.RoundDown(cdTime * 24, 0)  _
Application.RoundDown((cdTime - cdZeit) * 24, 0) Then
If Application.RoundDown((cdTime) * 24, 2) = _
Application.RoundDown((cdTime + cdZeit) * 24, 2) Then
Cells(i, 1) = Format(cdTime, "hh:mm")
Else
Cells(i, 1) = Format(Application.RoundDown((cdTime) * 24, 0) / 24, "hh:mm")
If Format(Application.RoundDown((cdTime) * 24, 0) / 24, "hh:mm")  _
Format(cdTime, "hh:mm") Then
i = i + 1
Cells(i, 1) = Format(cdTime, "hh:mm")
End If
End If
Else
Cells(i, 1) = Format(cdTime, "hh:mm")
End If
i = i + 1
If Day(cdTime + cdZeit)  30 Then
Exit Do
End If
cdTime = cdTime + cdZeit
Loop
Application.ScreenUpdating = False
End Sub

Ich erstelle die Lösung für das was im Beitrag dargestellt wurde. Wird diese Darstellung geändert, überlasse ich anderen die Lösung, da ich schon eine Lösung erstellt hatte und dafür Zeit investiert habe. Ich arbeite nicht für den Papierkorb.
Gruß Hajo

Anzeige
AW: Zwischen Uhrzeiten volle Stunden eintragen mit VBA
26.10.2014 08:44:54
Kasimir
Hallo Hajo!
Danke Dir für Deine erneute Hilfe. Sie funktioniert bestens.
Gestatte mir eine Anmerkung zu Deinem Abschlußsatz. Ich sehe das etwas anders als Du. Du hast in meinen Augen nicht für den Papierkorb gearbeitet, wenn mir im Zuge des Erstellens der Lösungen noch einige Feinheiten einfallen. Das passiert sicherlich jedem, der sich etwas vorstellt. Wenn diese Person, hier meine ich mich, dann sieht, was es für Möglichkeiten gibt, dass man diese Lösung dann noch etwas verfeinern oder anpassen möchte. Ich glaube das ist bei Dir genauso. Trotzdem nochmal Danke für Deine Hilfe. Eventuell kann mir ja noch jemand eine Lösung zu dem 2. Teil aufzeigen?
Schönes Wochenende noch,
Kasimir

Anzeige
eine Variante zum testen
26.10.2014 14:06:40
Tino
Hallo,
kannst mal diese Version testen!
Sub Bsp()
Dim varTime, intNewTime%
Dim ArDaten()
Dim n&


varTime = Application.InputBox("Zeit in Min als Ganzzahl", , 25, , , , , 1)
If VarType(varTime) = vbBoolean Then Exit Sub
Redim Preserve ArDaten(1 To 1, 1 To 1440)
ArDaten(1, 1) = TimeSerial(0, 0, 0) 'erste immer 0 
'Info 1 Tag = 24h = 1440min 
For n = 2 To 1440
    'nur max einen Tag (24h) 
    If intNewTime + varTime > 1440 Then Exit For
    
    If ((intNewTime + varTime) Mod 60) = 0 Then
        intNewTime = intNewTime + varTime
    ElseIf ((intNewTime + varTime) Mod 60) < varTime Then
        intNewTime = (intNewTime + varTime) - ((intNewTime + varTime) Mod 60)
    Else
        intNewTime = intNewTime + varTime
    End If
    
    ArDaten(1, n) = TimeSerial(0, intNewTime, 0)
Next n

Redim Preserve ArDaten(1 To 1, 1 To n)

With Tabelle1 'Tabelle wo Daten hinkommen 
    'Bereich ab erste einfügezelle leer machen 
    .Range("A2", .Cells(.Rows.Count, 1)).Clear
    'Bereich für einfügen 
    With .Range("A2").Resize(Ubound(ArDaten, 2))
        'Zeitformat 
        .NumberFormat = "hh:mm:ss"
        'Einfügen 
        .Value = Application.Transpose(ArDaten)
    End With
End With
End Sub
Gruß Tino

Anzeige
Perfekt, Danke!
26.10.2014 15:04:08
Kasimir
Hallo Tino!
Recht herzlichen Dank. Genau so war das von mir gemeint. Perfekt!
Wünsche Dir und auch Hajo noch ein schönes Wochenende,
Kasimir

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige