Это строит массив результатов из массива, содержащего исходные данные.См. Комментарии к коду для объяснения.
Sub Macro11()
Dim i As Long, j As Long, hdrs As Variant, arr1 As Variant, arr2 As Variant
Dim delim1 As String, delim2 As String, lwr As Long, upr As Long
'If 'results' worksheet exists, delete it
On Error Resume Next
Application.DisplayAlerts = False
Worksheets("results").Delete
Application.DisplayAlerts = True
On Error GoTo -1
'Collect original data
With Worksheets("sheet4")
hdrs = .Range(.Cells(1, "A"), .Cells(1, .Columns.Count).End(xlToLeft)).Value2
arr1 = .Range(.Cells(2, "A"), .Cells(.Rows.Count, "D").End(xlUp)).Value2
End With
'Preliminary variable values
delim1 = " - "
delim2 = "/"
ReDim arr2(LBound(arr1, 2) To UBound(arr1, 2), 1 To 1)
'Process single rows into multiple rows
For i = LBound(arr1, 1) To UBound(arr1, 1)
'lowest value
lwr = Split(Split(arr1(i, 4), delim1)(0), delim2)(0)
'highest value
upr = Split(Split(arr1(i, 4), delim1)(1), delim2)(1)
'from lowest to highest value in 4th column
For j = lwr To upr - 1 Step 12
'transpose arr1 to arr2 with split 4th column values
arr2(1, UBound(arr2, 2)) = arr1(i, 1)
arr2(2, UBound(arr2, 2)) = arr1(i, 2)
arr2(3, UBound(arr2, 2)) = arr1(i, 3)
arr2(4, UBound(arr2, 2)) = Chr(39) & j & Chr(47) & Application.Min(j + 12, upr)
'make room for next row
ReDim Preserve arr2(LBound(arr2, 1) To UBound(arr2, 1), _
LBound(arr2, 2) To UBound(arr2, 2) + 1)
Next j
Next i
'Remove last empty row
ReDim Preserve arr2(LBound(arr2, 1) To UBound(arr2, 1), _
LBound(arr2, 2) To UBound(arr2, 2) - 1)
'Put processed values into new worksheet
With Worksheets.Add(after:=Worksheets("sheet4"))
.Name = "results"
.Cells(1, "A").Resize(UBound(hdrs, 1), UBound(hdrs, 2)) = hdrs
.Cells(2, "A").Resize(UBound(arr2, 2), UBound(arr2, 1)) = Application.Transpose(arr2)
End With
End Sub