Sub SplitColumns2()
AR = [A1].CurrentRegion.Resize(, 7).Value 'your data
With CreateObject("scripting.dictionary")
For r = 2 To UBound(AR) 'loop starting 2nd row
splits1 = Split(AR(r, 2), ";") 'split col2
splits2 = Split(AR(r, 3), ";") 'split col3
i = WorksheetFunction.Max(0, UBound(splits1), UBound(splits2)) 'max possibilities-1
ReDim arr(1 To 1, 1 To UBound(AR, 2)) 'redim output array
For i1 = 1 To UBound(arr, 2) 'write constant stuff to array
Select Case i1
Case 2, 3 'this columns change
Case 7: arr(1, 7) = CDbl(AR(r, 7)) 'convert date to dbl
Case Else: arr(1, i1) = AR(r, i1)
End Select
Next
For i2 = 0 To i
If UBound(splits1) = -1 Then arr(1, 2) = Empty Else arr(1, 2) = splits1(WorksheetFunction.Min(UBound(splits1), i2))
If UBound(splits2) = -1 Then arr(1, 3) = Empty Else arr(1, 3) = splits2(WorksheetFunction.Min(UBound(splits2), i2))
.Item(.Count) = arr
Next
Next
Range("A12").Resize(.Count, UBound(arr, 2)).Value = Application.Index(.items, 0, 0) 'output your data
End With
End Sub
Bookmarks