【问题标题】:Creating unique rows of SKUs on Excel from single rows在 Excel 上从单行创建唯一的 SKU 行
【发布时间】:2018-12-08 09:48:24
【问题描述】:

我在 Excel 中有很多行数据,每行对应一个产品。例如,我的第一行是“Lady's Black Dress”,然后它在另一个单元格中,尺寸用逗号分隔,颜色也在一个单元格中。

Title           Size          Colour                 Price Before  Price After
Ladies Dress    S,M,L,XL,XXL  Blue, Black, Red       19.99          29.99
Men's Trousers  S,M,L,XL,XXL  Brown, Yellow, Orange  39.99          59.99

hj

所以我需要的是一个 VBA,它为每个产品变体创建一个唯一的行(本质上是 SKU),所以我的数据看起来像这样:

我之前确实问过这个问题,但只问了两列,一个善良的灵魂提供了这个确实有效的 VBA,但我需要其他列。我不太明白如何调整这个 VBA,并将字母“B”更改为“E”,但这似乎不起作用。

Option Explicit

Sub sizeExpansion()
    Dim i As Long, szs As Variant

    With Worksheets("sheet1")
        For i = .Cells(.Rows.Count, "B").End(xlUp).Row To 2 Step -1
            szs = Split(.Cells(i, "B").Value2, ",")
            If CBool(UBound(szs)) Then
                .Cells(i, "A").Resize(UBound(szs), 1).EntireRow.Insert
                .Cells(i, "A").Resize(UBound(szs) + 1, 1) = .Cells(UBound(szs) + i, "A").Value2
                .Cells(i, "B").Resize(UBound(szs) + 1, 1) = Application.Transpose(szs)
            End If
        Next i
    End With

End Sub

【问题讨论】:

    标签: excel vba macos excel-formula


    【解决方案1】:

    尝试使用额外的拆分变体和一些数学调整进行此修改。

    Option Explicit
    
    Sub sizeAndColorExpansion()
        Dim i As Long, s As Long, c As Long
        Dim ttl As String, pb As Double, pa As Double
        Dim szs As Variant, clr As Variant
    
        With Worksheets("sheet1")
            For i = .Cells(.Rows.Count, "E").End(xlUp).Row To 2 Step -1
                ttl = .Cells(i, "A").Value2
                pb = .Cells(i, "D").Value2
                pa = .Cells(i, "E").Value2
                szs = Split(.Cells(i, "B").Value2, ",")
                clr = Split(.Cells(i, "C").Value2, ",")
                If CBool(UBound(szs)) Or CBool(UBound(clr)) Then
                    .Cells(i, "A").Resize((UBound(szs) + 1) * (UBound(clr) + 1) - 1, 1).EntireRow.Insert
                    For s = 0 To UBound(szs)
                        For c = 0 To UBound(clr)
                            .Cells(i + (s * (UBound(clr) + 1)) + c, "A").Resize(1, 5) = _
                                Array(ttl, Trim(szs(s)), Trim(clr(c)), pb, pa)
                        Next c
                    Next s
                End If
            Next i
        End With
    
    End Sub
    

    【讨论】:

    • 这会正确放置所有尺寸,然后创建另一行来显示颜色并且不复制颜色,只在正确的列中显示一个条目。每个组的价格也只出现一次,而不是复制整个组。在这里展示有点困难!
    • 在上面的示例数据的新工作簿中尝试。似乎对我有用。
    • 这很好用,谢谢。在我的真实数据中,我遇到了一些运行时错误:1)我从一些单元格的末尾删除了一些逗号 2)我用稍后可以删除的文本替换了任何空单元格 - 搜索并替换了空单元格 3)从售价中删除了 $ 符号.谢谢,很棒的东西!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多