In my testing this does exactly what you asked for.
You will need to rename the Sheets depending on what your sheet names for the original data sheet name is and your output / result sheet name is.
Option Explicit
Sub splittinghours()
Dim DataSheet As Worksheet
Dim ResultSheet As Worksheet
Set DataSheet = ThisWorkbook.Sheets("Sheet1")
Set ResultSheet = ThisWorkbook.Sheets("Sheet2")
Dim DataSheetLastRow As Long
With DataSheet
DataSheetLastRow = .Range("A1").SpecialCells(xlCellTypeLastCell).Row
End With
Dim ActualWarehouse As String
Dim ActualDate As String
Dim InTime As Date
Dim OutTime As Date
Dim Duration As Long
Dim CurrentRow As Long
Dim DurationCounter As Long
Dim SegmentedDuration As Date
Dim ResultSheetNextFreeLine As Long
ResultSheet.Range(Cells(2, "A"), Cells(ResultSheet.Rows.Count, ResultSheet.Columns.Count)).Delete
ResultSheetNextFreeLine = 0
For CurrentRow = 2 To DataSheetLastRow
ActualWarehouse = DataSheet.Cells(CurrentRow, "A").Value
ActualDate = DataSheet.Cells(CurrentRow, "B").Value
InTime = DataSheet.Cells(CurrentRow, "C").Value
OutTime = DataSheet.Cells(CurrentRow, "D").Value
Duration = DataSheet.Cells(CurrentRow, "E").Value
SegmentedDuration = (OutTime - InTime) / Duration
ResultSheetNextFreeLine = ResultSheet.Cells(ResultSheet.Rows.Count, "A").End(xlUp).Row
For DurationCounter = 1 To Duration
With ResultSheet
.Cells(ResultSheetNextFreeLine + DurationCounter, "A").Value = ActualWarehouse
.Cells(ResultSheetNextFreeLine + DurationCounter, "B").Value = ActualDate
.Cells(ResultSheetNextFreeLine + DurationCounter, "C").Value = InTime
.Cells(ResultSheetNextFreeLine + DurationCounter, "D").Value = InTime + SegmentedDuration
InTime = InTime + SegmentedDuration
End With
Next DurationCounter
Next CurrentRow
End Sub
2
solved Repeating Multiple Rows Multiple Times in Excel VBA, with Calculations [closed]