2

У меня есть следующий набор данных:

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

Мне нужно, чтобы это выводилось как:

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  

В основном мне нужно разделить запятые значения в столбце B на отдельные строки, что, я думаю, я могу сделать с помощью различных макросов, доступных на этом сайте, однако мне нужно добавить (еще один) столбец C, который присваивает числовую последовательность каждой строке разделения для каждый продукт, указанный в столбце А.

Я надеюсь это имеет смысл!

РЕДАКТИРОВАТЬ, чтобы добавить в VBA я использую:

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 

Дайте мне знать, если вам нужны какие-либо другие детали, заранее спасибо :-)

2 ответа2

1

С данными в столбцах A и B, выполнение этого короткого макроса даст желаемый результат в столбцах с C по 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

0

Ваш вопрос состоит из двух частей.
Это ответ на вторую часть вопроса.
Как посчитать и обновить количество раз, когда появился PRODx .
Я выполнил ваше требование, используя формулы (но не стесняйтесь попробовать свои силы в VBA)

Формула =COUNTIF($A$2:A2,A2) . Введите формулу для первой строки и просто перетащите по длине ваших данных, и вы сможете получить счетчик PRODx

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .