Sub Rearrange_v2()
Dim Data, Results, Bits
Dim nr As Long, rws As Long, i As Long, j As Long, k As Long, r As Long
Dim s As String
Const HdrRow As Long = 4 '<-Header row
Const IMax As Long = 10 '<-Max number of items expected in a single cell in col I
'Use range from col A header row to last data in col A & expand to col I
With Range("A" & HdrRow, Range("A" & Rows.Count).End(xlUp)).Resize(, 9)
'Read all the values into an array in memory
Data = .Value
'Calculate how many rows of data by how many rows in the array
rws = UBound(Data, 1)
'Make a new array, big enough to hold the max expected results
ReDim Results(1 To rws * IMax + 1, 1 To 9)
'Start a row counter for the Results array
nr = 1
'Work through each row of the array/data
For i = 1 To rws
'Put the col I value into a string variable
s = Data(i, 9)
'If there is a string to deal with (len > 0)
If Len(s) Then
'Split the string into bits (see further notes in my post)
Bits = Split(Replace(s, ".", ",", 1, -1, 1), ",")
'r is 1 less than the number of bits (bits are numbered from 0, 1, 2, ..)
r = UBound(Bits)
'Col I cell is empty if we get to process this section
Else
Bits(0) = vbNullString
r = 0
End If
'For each 'Bit'
For j = 0 To r
'Put original data from cols A:H into Results array ..
For k = 1 To 8
Results(nr + j, k) = Data(i, k)
Next k
'.. and the next 'Bit' into the 9th col of the Results array
Results(nr + j, 9) = Bits(j)
Next j
'Calculate what row in the Results array the next section will start
nr = nr + r + 1
Next i
'Write the Results array back to the worksheet
.Resize(nr - 1).Value = Results
End With
End Sub