2013-12-19 38 views
1

我正在尝试使用逗号分隔值基于多个单元格创建记录。如何根据两列逗号分隔值插入多条记录

采取此:

Handle  |  Title | Color | Size  |  Price 
       |    |   |   | (0-04/06-08) 
--------------------------------------------------------------------------- 
Jovani-JVN86957 |  Jovani | Black, | 0, 02,  | $199 (if size > 06 then +15) 
        JVN86957 | Red, White | 04, 06, 08 |  

我试图做的是有颜色和尺寸列生成新的记录,而包括手柄和价格(也可能的话,但没有必要有依据的价格变化在尺寸值,即:大小0-4 = $ 199尺寸6-8 = $ 219)

转到此:

Handle    Title   Color Size Price(0 04/06 08 +$15) 

Jovani-JVN86957 Jovani-JVN86957 Black 0  $199 
Jovani-JVN86957      Black 2  $199 
Jovani-JVN86957      Black 4  $199 
Jovani-JVN86957      Black 6  $199 +$15 = $214 
Jovani-JVN86957      Black 8  $199 +$15 = $214 
Jovani-JVN86957      Red  0  $199 
Jovani-JVN86957      Red  2  $199 
Jovani-JVN86957      Red  4  $199 
Jovani-JVN86957      Red  6  $199 +$15 = $214 
Jovani-JVN86957      Red  8  $199 +$15 = $214 
Jovani-JVN86957      White 0  $199 
Jovani-JVN86957      White 2  $199 
Jovani-JVN86957      White 4  $199 
Jovani-JVN86957      White 6  $199 +$15 = $214 
Jovani-JVN86957      White 8  $199 +$15 = $214 

任何帮助将非常感激。

回答

0

这里有一种方法是使用多个循环来进行更多的强力方法。

Sub SplitEntries() 
    Dim rng As Range 
    Set rng = Range("A2:A5") 

    'Copy over header 
    Range("G1:K1").Value = Range("A1:E1").Value 

    Dim sizeSplit As Variant 
    Dim colorSplit As Variant 
    Dim rowCntr As Integer: rowCntr = 2 

    'Loop thru range 
    For Each cell In rng 
     Range("H" & rowCntr).Value = cell.Offset(0, 1).Value 

     'Get all the colors 
     colorSplit = Split(cell.Offset(0, 2), ",") 

     'Loop through each color 
     For i = LBound(colorSplit) To UBound(colorSplit) 
      'Get all the sizes 
      sizeSplit = Split(cell.Offset(0, 3), ",") 

      'Loop through each size 
      For j = LBound(sizeSplit) To UBound(sizeSplit) 
       Range("G" & rowCntr).Value = cell.Value 
       Range("I" & rowCntr).Value = Trim(colorSplit(i)) 
       Range("J" & rowCntr).Value = Trim(sizeSplit(j)) 
       'Range("K" & rowCntr).Value = cell.Offset(0, 4).Value 

       If Trim(sizeSplit(j)) < 6 Then 
        Range("K" & rowCntr).Value = cell.Offset(0, 4).Value 
       Else 
        Range("K" & rowCntr).Value = cell.Offset(0, 4).Value + 15 
       End If 

       rowCntr = rowCntr + 1 
      Next j 
     Next i 
    Next cell 
End Sub 

的起始数据如下:

enter image description here

并将结果放到新列如下:

enter image description here

+0

我们能否摆脱各种尺寸的价格逻辑。我意识到我的一些记录有很大不同的大小,所以我只想简化并从价格列中获取我将为该记录手动分配的值。 此外,我已经将它应用于约100张具有不同颜色和大小变体的记录的表单,并且它将一些颜色/尺寸/价格作为标题和一些奇怪的行为。我可以将宏应用到整张纸上。这是我改变了:设置rng =范围(“A2:E259”) – otasi

+0

请参阅更新后的代码修改后删除价格逻辑。尝试将范围改为设置rng = Range(“A2:A259”),因为我只查看列“A”的大小并假设有固定数量的列。还有其他方法可以做到这一点,但这取决于你的布局。 –

+0

这很棒,正是我需要的。非常感谢!! – otasi