2016-09-11 2 views
2

я быть_наст этот данные enter image description hereизвлекать данные из строки с VBA

Я хотел бы, чтобы извлечь размер и цвет, как это:

ID Color Size 
1 Blue S 
1 Blue M 
1 Blue L 
1 Blue XL 
1 Blue XXL 

я могу иметь также два значение для цвета, разделенного запятой. Я хотел бы иметь результаты, как это:

ID Color Size 
18 Rose S 
18 Rose M 
18 Rose L 
18 Rose XL 
18 Rose XXL 
18 White S 
18 White M 
18 White L 
18 White XL 
18 White XXL 

Я пробовал это в VBA:

Sub MG11Sep42() 
Dim Rng As Range, Dn As Range, Sp As Variant, Sp1 As Variant, Sp2 As Variant, Sp3 As Variant 
Dim n As Long, Col As Variant, Sz As Variant, c As Long 
Set Rng = Range("B1", Range("B" & Rows.Count).End(xlUp)) 
Cells(1, "D").Resize(, 3) = Array("ID", "Color", "Size") 
c = 1 
For Each Dn In Rng 
    Sp = Split(Dn.Value, ":") 
    Sp1 = Split(Sp(1), ";") 
    Sp2 = Split(Sp(UBound(Sp)), ",") 
    Sp3 = Split(Sp1(0), ",") 
     For Each Sz In Sp2 
      For Each Col In Sp3 
       c = c + 1 
       Cells(c, "D") = Dn.Offset(, -1).Value 
       Cells(c, "E") = Sz 
       Cells(c, "F") = Col 
      Next Col 
     Next Sz 
Next Dn 
End Sub 

но ошибки: индекс выходит за пределы диапазона

enter image description here

+0

Вам необходимо пропустить первую строку, поскольку в ней есть только метки столбцов. Иначе вы получите эту ошибку. –

ответ

1

Похоже, вам нужно пропустить первую строку. Возможно (не отлаживается):

For Each Dn In Rng.offset(1,0).resize(rowsize:=rng.rows.count-1) 
    Sp = Split(Dn.Value, ":") 
    Sp1 = Split(Sp(1), ";") 
+0

thxxxxx работа наконецyyyy !! :))))) – Popolitus