如何基于相同的sku来连接不同的单元格

时间:2014-03-09 19:45:26

标签: excel csv concatenation vlookup openoffice-calc

我有一个包含2列的csv

sku,color
001,blue
001,red
001,pink
001,yellow
002,blue
002,red
002,pink
002,yellow
etc..

如何创建新单元格并根据sku编号组合颜色?像这样:

sku,combinedColors
001,"blue,red,pink,yellow"
002,"blue,red,pink,yellow"

感谢

2 个答案:

答案 0 :(得分:1)

您可以使用VBA宏执行此操作。要输入此宏(子), alt-F11 将打开Visual Basic编辑器。 确保在Project Explorer窗口中突出显示您的项目。 然后,从顶部菜单中选择“插入/模块” 将下面的代码粘贴到打开的窗口中。

您可能需要进行一些更改,具体取决于源数据的位置以及编写结果的位置。该宏假设您的源数据位于带有标题行的A:B列中,并且您的结果将写在D:E列中

我还假设,由于这是用Excel标记的,您已将csv数据导入到Excel中,并且您希望将结果分为两列。

要使用此宏(子), alt-F8 将打开宏对话框。按名称选择宏,然后。

Option Explicit
Sub ConcatColorsBySKU()
    Dim colSKU As Collection
    Dim vSrc As Variant, vRes() As Variant
    Dim I As Long, J As Long
    Dim rRes As Range
vSrc = Range("A1", Cells(Rows.Count, "A").End(xlUp)).Resize(columnsize:=2)
Set rRes = Range("D1")

'Unique SKU's
Set colSKU = New Collection
On Error Resume Next
For I = 2 To UBound(vSrc)
    colSKU.Add Item:=CStr(vSrc(I, 1)), Key:=CStr(vSrc(I, 1))
Next I
On Error GoTo 0

'Results Array
ReDim vRes(1 To colSKU.Count + 1, 1 To 2)
vRes(1, 1) = "SKU"
vRes(1, 2) = "Combined Colors"
For I = 1 To colSKU.Count
    vRes(I + 1, 1) = colSKU(I)
    For J = 2 To UBound(vSrc)
        If vSrc(J, 1) = vRes(I + 1, 1) Then _
            vRes(I + 1, 2) = vRes(I + 1, 2) & ", " & vSrc(J, 2)
    Next J
    vRes(I + 1, 2) = Mid(vRes(I + 1, 2), 2)
Next I

Set rRes = rRes.Resize(UBound(vRes, 1), UBound(vRes, 2))
rRes.NumberFormat = "@"
rRes = vRes
rRes.EntireColumn.AutoFit

End Sub

答案 1 :(得分:1)

没有一个公式可以做到这一点,宏是最好的方法。 但有两种方法可以做到这一点。

在Excel中打开CSV,您必须对A列进行升序/降序排序。

然后在C2中,添加此公式并将其拖放

=IF(A2<>A1,B2,C1 & "," & B2)


在D2中,添加此公式并将其拖放

=IF(A2<>A3,CONCATENATE(A2,",""",C2,""""),"")


将自动过滤器放在第1行并在列D中选择非空白。 然后,您可以根据需要复制D列!