我有一个包含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"
感谢
答案 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列!