2017-03-16 2 views
0

J'adore SliceNDice de sous brettdj de:SliceNDice pour 3 colonnes

Split comma separated entries to new rows

Je l'utilise tout le temps. J'ai maintenant une situation avec trois colonnes et pour la vie de moi - je ne peux pas comprendre comment changer le vba pour le faire fonctionner. La troisième colonne serait celle avec les valeurs délimitées par des virgules. Les deux premières colonnes sont des entrées uniques. La première fois que je poste pour moi, je saisis les bras de ma chaise au cas où j'aurais fait quelque chose de mal.

+1

suivre l'exemple du lien que vous avez publié. Publiez quelques données de test et le résultat attendu ainsi que le code que vous avez ajusté pour tenter de faire ce que vous voulez. Puis expliquez ce que c'est que le code fait par erreur. Nous ne sommes pas ici pour modifier le code de travail existant en fonction de vos besoins. –

Répondre

0

Si vous tentez de conserver les première et deuxième colonnes dans chaque ligne suivante tout en ajoutant chaque valeur séparée dans la troisième colonne, cela devrait fonctionner.

Sub SliceNDice() 
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 C:D 
[d1].Resize(lngCnt, 3).Value2 = Application.Transpose(Y) 
End Sub 

données de l'échantillon: enter image description here

+0

Merci RyanL. Il fonctionne comme un charme. J'ai essayé de modifier le code et j'étais très proche du vôtre, mais j'ai oublié de changer une ligne dans la boucle "For Each strArr ...". Quoi qu'il en soit, maintenant cela fonctionne correctement. Scott dans les prochains posts, je vais essayer d'être plus explicite. – mark52c

+0

@ mark52c Bon à entendre. Si cette réponse fonctionne pour vous, veuillez la marquer comme réponse. Je vous remercie. – RyanL