Poste A e B le tue colonne di origine, in C e D troverai i risultati.
codice:
Sub splitta()
Dim ultimaRiga As Long, k As Long, i As Long, j As Long
Dim inferiore As Variant, superiore As Variant
Dim cella As Range
Dim arr1() As String, arr2() As String
Dim objRegExp As Object
Dim prefisso As String
Set objRegExp = CreateObject("Vbscript.RegExp")
objRegExp.Pattern = "\d+$"
ultimaRiga = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row
k = 1
For Each cella In Range("a1:a" & ultimaRiga) 'tieni A1 se non hai riga di intestazione o metti A2 in caso contrario
arr1 = Split(cella.Offset(0, 1), ",")
For i = 0 To UBound(arr1)
If InStr(arr1(i), "-") = 0 Then
ActiveSheet.Range("c" & k).Value = cella
ActiveSheet.Range("d" & k).Value = arr1(i)
k = k + 1
Else
arr2 = Split(arr1(i), "-")
Set inferiore = objRegExp.Execute(arr2(0))
Set superiore = objRegExp.Execute(arr2(1))
prefisso = Left(arr2(0), InStr(arr2(0), inferiore(0)) - 1)
For j = inferiore(0) To superiore(0)
ActiveSheet.Range("c" & k).Value = cella
ActiveSheet.Range("d" & k).Value = prefisso & j
k = k + 1
Next j
End If
Next i
Next cella
Set objRegExp = Nothing
End Sub