Microsoft Excel

Herbers Excel/VBA-Archiv

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

Zwischen Uhrzeiten volle Stunden eintragen mit VBA

Betrifft: Zwischen Uhrzeiten volle Stunden eintragen mit VBA von: Kasimir
Geschrieben am: 25.10.2014 16:42:49

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

  

Betrifft: AW: Zwischen Uhrzeiten volle Stunden eintragen mit VBA von: Hajo_Zi
Geschrieben am: 25.10.2014 17:30:36

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
GrußformelHomepage


  

Betrifft: AW: Zwischen Uhrzeiten volle Stunden eintragen mit VBA von: Kasimir
Geschrieben am: 25.10.2014 18:06:00

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


  

Betrifft: AW: Zwischen Uhrzeiten volle Stunden eintragen mit VBA von: Gerold
Geschrieben am: 25.10.2014 18:09:57

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.


  

Betrifft: AW: Zwischen Uhrzeiten volle Stunden eintragen mit VBA von: Kasimir
Geschrieben am: 25.10.2014 18:13:56

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


  

Betrifft: AW: Zwischen Uhrzeiten volle Stunden eintragen mit VBA von: Hajo_Zi
Geschrieben am: 25.10.2014 19:07:53

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


  

Betrifft: AW: Zwischen Uhrzeiten volle Stunden eintragen mit VBA von: Kasimir
Geschrieben am: 26.10.2014 07:57:30

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


  

Betrifft: AW: Zwischen Uhrzeiten volle Stunden eintragen mit VBA von: Hajo_Zi
Geschrieben am: 26.10.2014 08:22:54

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


  

Betrifft: AW: Zwischen Uhrzeiten volle Stunden eintragen mit VBA von: Kasimir
Geschrieben am: 26.10.2014 08:44:54

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


  

Betrifft: eine Variante zum testen von: Tino
Geschrieben am: 26.10.2014 14:06:40

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


  

Betrifft: Perfekt, Danke! von: Kasimir
Geschrieben am: 26.10.2014 15:04:08

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


 

Beiträge aus den Excel-Beispielen zum Thema "Zwischen Uhrzeiten volle Stunden eintragen mit VBA"