Dodaj numer sekwencji do podzielonych wartości oddzielonych przecinkami w nowych wierszach

3

Mam następujący zestaw danych:

Col A    Col B
Prod1    SKU-A, SKU-B
Prod2    SKU-C, SKU-D, SKU-E

Potrzebuję tego jako:

Col A    Col B    Col C
Prod1    SKU-A      1
Prod1    SKU-B      2
Prod2    SKU-C      1
Prod2    SKU-D      2
Prod2    SKU-E      3  

Zasadniczo muszę podzielić wartości oddzielone przecinkami w kolumnie B na osobne wiersze, co myślę, że mogę to zrobić za pomocą różnych makr dostępnych na tej stronie, jednak muszę dodać (inną) kolumnę C, która przypisuje sekwencję numeryczną do każdego podzielonego wiersza dla każdy produkt podany w kolumnie A.

Mam nadzieję, że to ma sens!

EDYTUJ, aby dodać w VBA Używam:

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, "b").End(xlUp)).Value2 
Redim Y(1 To 2, 1 To 1000) 
For lngRow = 1 To UBound(X, 1) 
     'Split each string by ","
    tempArr = Split(X(lngRow, 2), ",") 
    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 2, 1 To lngCnt + 1000) 
        Y(1, lngCnt) = X(lngRow, 1) 
        Y(2, lngCnt) = objRegex.Replace(strArr, "$1") 
    Next 
Next lngRow 
 'Dump the re-ordered range to columns C:D
[c1].Resize(lngCnt, 2).Value2 = Application.Transpose(Y) 
End Sub 

Daj mi znać, jeśli potrzebujesz innych szczegółów, z góry dziękuję :-)

Satpaul
źródło
+1 za dobrze napisane pytanie. Zachęcam do napisania algorytmu (w postaci zwykłego tekstu) i próby pobrania części kodu VBA z zasobów online i złożenia ich razem. Kiedy utkniesz, możesz zaktualizować swoje pytanie o konkretny punkt ... To przyciągnie wiele uwagi!
Prasanna,
To nie jest usługa pisania kodu. Tak jak zasugerował Prasanna, podziel się tym, co już wypróbowałeś i nad którym obecnie pracujesz. Postaramy się pomóc w tym konkretnie.
CharlieRB

Odpowiedzi:

1

W przypadku danych w kolumnach A i B uruchomienie tego krótkiego makra da pożądany wynik w kolumnach od C do E.

Sub reorg()
    Dim i As Long, N As Long
    Dim K As Long, KK As Long

    N = Cells(Rows.Count, 1).End(xlUp).Row
    K = 1

    For i = 1 To N
        prod = Cells(i, 1).Value
        ary = Split(Cells(i, 2).Value, ", ")
        For KK = LBound(ary) To UBound(ary)
            Cells(K, 3).Value = prod
            Cells(K, 4).Value = ary(KK)
            Cells(K, 5).Value = KK + 1
            K = K + 1
        Next KK
    Next i
End Sub

wprowadź opis zdjęcia tutaj

Uczeń Gary'ego
źródło
Czy masz kilka minut na rozmowę
Prasanna
Działa to jak sen i jest o wiele bardziej zwięzłe niż kod, którego używałem!
Satpaul
Dziękuję .... Podoba mi się twoje podejście, ale nigdy nie opanowałem Wyrażeń regularnych .......... jak większość składni opartych na UNIX, zapada mi w pamięć na kilka godzin.
Gary's Student
1
Twoje jest czystsze i jeszcze raz dziękuję za szybką i dokładną odpowiedź :-)
Satpaul
0

Twoje pytanie składa się z dwóch części.
To jest odpowiedź na drugą część pytania.
Jak liczyć i aktualizować liczbę wyświetleń PRODx.
Zaimplementowałem Twoje wymagania za pomocą formuł (ale możesz spróbować swoich sił z VBA)
wprowadź opis zdjęcia tutaj

Wzór jest następujący =COUNTIF($A$2:A2,A2). Wprowadź formułę dla pierwszego wiersza i po prostu przeciągnij wzdłuż długości danych, a będziesz w stanie uzyskać liczbęPRODx

Prasanna
źródło
Dziękuję Prasanna, gdyby nie kod Studenta Gary'ego, użyłbym tego, ponieważ miałem już podział danych, po prostu nie miałem sekwencji!
Satpaul