VBA 宏用于删除和/或合并重复项并复制到新工作表

VBA 宏用于删除和/或合并重复项并复制到新工作表

我有一个 Excel 文件,其中一列列出了产品 SKU,另一列列出了产品图片 URL。有超过 5000 行。我的问题是,该文件有多个行用于同一产品,但图片的 URL 不同,因为它们是同一 SKU 的不同颜色。我如何将它们组合起来,以便每个 SKU 包含所有通过“|”分隔的 URL

我尝试在宏中使用下面的代码,但它不会将原始文件中仅有一个 url 的 SKU 复制到第二张表中。哪个宏适合这个?

Sub ReOrganizer()
 Dim s1 As Worksheet, s2 As Worksheet
 Dim N As Long, i As Long, K As Long
 Dim v1 As String, v2 As String
 Set s1 = Sheets("Sheet1")
 Set s2 = Sheets("Sheet2")
 K = 1
 N = Cells(Rows.Count, "A").End(xlUp).Row
 v1 = s1.Cells(2, 1).Value
 v2 = s1.Cells(2, 2).Value

 For i = 3 To N
  vn1 = s1.Cells(i, 1).Value
  vn2 = s1.Cells(i, 2).Value
  If vn1 = v1 Then
     v2 = v2 & "," & vn2
  Else
     s2.Cells(K, 1) = v1
     s2.Cells(K, 2) = v2
     v1 = vn1
     v2 = vn2
     K = K + 1
  End If
 Next i

 s2.Cells(K, 1) = v1
 s2.Cells(K, 2) = v2

子目录结束

答案1

您实际上并不需要 VBA 来实现这一点,除非您需要定期使用几个不同的数据集来执行此操作。此方法会连接 x 行的 URLS 字符串,只要 SKU 匹配(其中 x 是每个 SKU 的最大 URL 数量)。您还可以添加一个主要 SKU 列,用作过滤器以丢弃重复项。隐藏原始 URL 列并复制并粘贴到新工作表中。

公式唯一解决方案: 在此处输入图片描述

公式视图: 在此处输入图片描述

答案2

尝试编写以下算法:

Urlbuffer = ""
Sku = ""
k = 1
N = *max rows*
s1 = *sheet1*
s2 = *sheet2*

For i = 1 to N
  Sku = s1.cells(i, 1) 
  If Sku = s1.cells(i+1) then
    Urlbuffer =Urlbuffer & " | " & s1.cells(i,2)
  Else
    s2.cells(k, 1) = Sku
    s2.cells(k, 2) = s1.cells(i, 2) & Urlbuffer
    k = k + 1
    Urlbuffer = ""
  End if
 Next i

答案3

如果您有 O365,则可以使用公式轻松完成此操作:

编辑我现在看到添加了一个Excel-2010标签。无论如何,我都会把这个答案留给其他可能有 O365 的人

例如:

  • 产品:A2:A17
  • 网址:B2:B17

产品列表

E2: =SORT(UNIQUE(A2:A17))

网址

E3 (and copy down): =TEXTJOIN("|",TRUE,FILTER($B$2:$B$17,$A$2:$A$17=E2))

在此处输入图片描述

使用 Power Query 执行此操作也非常简单。只需按产品分组;然后从结果表中提取 url 竖线分隔列表

相关内容