J'utilise le code suivant pour hacher une colonne de listes séparées par des virgules et retourner chaque entrée dans une nouvelle ligne:Excel 2010 VBA - Split chaîne par Virgule, Passer Résultats Blank
Sub SliceNDice()
'
' Splits the locations cells according to commas and pushes to new rows
' Code courtesy of brettdj (http://stackoverflow.com/questions/8560718/split-comma-separated-entries-to-new-rows)
'
Dim objRegex As Object
Dim x
Dim Y
Dim lngRow As Long
Dim lngCnt As Long
Dim tempArr() As String
Dim strArr
Set objRegex = CreateObject("vbscript.regexp")
objRegex.Pattern = "^\s+(.+?)$"
'Define the range to be analysed
x = Range([a1], Cells(Rows.Count, "c").End(xlUp)).Value2
ReDim Y(1 To 3, 1 To 1000)
For lngRow = 1 To UBound(x, 1)
'Split each string by ","
tempArr = Split(x(lngRow, 3), ",")
For Each strArr In tempArr
lngCnt = lngCnt + 1
'Add another 1000 records to resorted array every 1000 records
If lngCnt Mod 1000 = 0 Then ReDim Preserve Y(1 To 3, 1 To lngCnt + 1000)
Y(1, lngCnt) = x(lngRow, 1)
Y(2, lngCnt) = x(lngRow, 2)
Y(3, lngCnt) = objRegex.Replace(strArr, "$1")
Next
Next lngRow
'Dump the re-ordered range to columns E:G
[e1].Resize(lngCnt, 3).Value2 = Application.Transpose(Y)
End Sub
Bien que cette code fonctionne parfaitement, il a une faille fatale en ce que toute double virgule dans les cellules de la colonne C se traduira par des cellules vides poussés vers les nouvelles lignes dans la colonne G.
Est-ce que quelqu'un sait comment éditer le code de sorte qu'il ne crée pas de nouvelles lignes avec des cellules vides dans la colonne G, mais les saute et entre les lignes suivantes à leur place comme si les virgules superflues n'étaient jamais incluses dans la colonne C?
Bien mais je ne pense pas qu'il couvre les virgules commençant ou finissant la chaîne concaténée. Pourquoi ne pas simplement tester la longueur de strArr comme première chose à l'intérieur de la boucle For each strArr In tempArr? – Jeeped