The code I have takes cells containing the delimiter (; ) from a column, and creates new rows (everything except the column is duplicated) to separate those values.

What I have  

[![enter image description here](https://i.stack.imgur.com/x1y2r.png)](https://i.stack.imgur.com/x1y2r.png)

I need this for multiple columns in my data, but I don't want the data to overlap (ex: for 3 columns, I want there to be only one value per row in those 3 columns). It would be ideal if I could select multiple columns instead of only one as my code does now.

What I want  

[![enter image description here](https://i.stack.imgur.com/MpLqt.png)](https://i.stack.imgur.com/MpLqt.png)

```vb
Sub splitByCol()
    Dim r As Range, i As Long, ar
    Set r = Worksheets("Sheet").Range("J2000").End(xlUp)
    Do While r.Row > 1
        ar = Split(r.Value, "; ")
        If UBound(ar) >= 0 Then r.Value = ar(0)
        For i = UBound(ar) To 1 Step -1
            r.EntireRow.Copy
            r.Offset(1).EntireRow.Insert
            r.Offset(1).Value = ar(i)
        Next
        Set r = r.Offset(-1)
    Loop
End Sub

```