2013-12-19 42 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