【问题标题】:How to insert multiple records based on two columns of comma-separated values如何根据两列逗号分隔值插入多条记录
【发布时间】:2013-12-19 00:29:27
【问题描述】:

我正在尝试基于具有逗号分隔值的多个单元格创建记录。

拿这个:

    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

任何帮助将不胜感激。

【问题讨论】:

    标签: excel vba csv comma delimited


    【解决方案1】:

    这是一种使用多个循环的蛮力方法。

    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
    

    起始数据如下所示:

    结果会像这样放在新列中:

    【讨论】:

    • 我们可以摆脱各种尺寸的价格逻辑吗?我意识到我的一些记录具有非常不同的大小,所以我只想简化并从价格列中获取我将为该记录手动分配的值。此外,我已将其应用于一张包含大约 100 条不同颜色和大小变体的记录的工作表,它会将一些颜色/大小/价格作为标题,以及一些奇怪的行为。我可能只是将宏错误地应用于整个工作表。这是我改变的: Set rng = Range("A2:E259")
    • 查看更新后的代码修改代码以删除价格逻辑。尝试将范围更改为Set rng = Range("A2:A259"),因为我只查看A 列的大小并假设列数固定。还有其他方法可以做到这一点,但这实际上取决于您的布局。
    • 这很棒,正是我需要的。非常感谢!!
    • 我们可以再做一个改变吗?似乎我对基于尺寸的不同价格需要发生什么有了更好的理解。我们可以为各种尺寸的价格添加逻辑吗?可以说如果大小> 6,我们要添加 + 15 美元。我不需要美元符号。
    • 您当前有两个价格值,是否要在两个价格值上加 $15 并显示 $214/$234?
    猜你喜欢
    • 2021-05-29
    • 1970-01-01
    • 2013-05-08
    • 2015-09-24
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多