可能重复:
Excel Concatenate Rows
我想使用Excel VBA宏将多行数据合并为一行,并且输出要在新工作表上,但我不知道从哪里开始。数据非常简单,由一列ID和一列产品组成。如果存在多个产品条目,则可能有多个具有相同ID的行,因此我正在寻找一个宏来循环遍历数据集并将这些多个条目合并为一个。如果该行是唯一的(即,只有一个产品条目针对该ID),则可以将该行复制到输出工作表而不进行任何合并。
数据如下所示:
ID PRODUCT
1-10OOMD6 Product SKU1 (9000)
1-10PQFV3 Product SKU2 (7000)
1-10QSCSB Product SKU3 (50)
1-10RWX7L Product SKU4 (2)
1-10TKZQJ Product SKU5 (1)
1-10UROIL Product SKU3 (12000)
1-10UROIL Product SKU7 (12000)
1-10UROIL Product SKU8 (12000)
1-10UW6KU Product SKU9 (1000)
1-10UW6KU Product SKU10 (6500)
1-10W5HR9 Product SKU11 (80)
1-10XZWX7 Product SKU12 (1)
1-10ZRXVJ Product SKU5 (70)
1-10ZV49V Product SKU3 (250)
1-110RQQN Product SKU13 (1)
1-110RQQN Product SKU2 (600)
1-110RQQN Product SKU14 (1)
1-110RQQN Product SKU4 (600)
1-112DJ2N Product SKU15 (5)
1-112EWRQ Product SKU16 (3000)
我希望它最终会像这样:
ID PRODUCT
1-10OOMD6 Product SKU1 (9000)
1-10PQFV3 Product SKU2 (7000)
1-10QSCSB Product SKU3 (50)
1-10RWX7L Product SKU4 (2)
1-10TKZQJ Product SKU5 (1)
1-10UROIL Product SKU3 (12000), Product SKU7 (12000), Product SKU8 (12000)
1-10UW6KU Product SKU9 (1000),Product SKU10 (6500)
1-10W5HR9 Product SKU11 (80)
1-10XZWX7 Product SKU12 (1)
1-10ZRXVJ Product SKU5 (70)
1-10ZV49V Product SKU3 (250)
1-110RQQN Product SKU13 (1), Product SKU2 (600), Product SKU14 (1), Product SKU4 (600)
1-112DJ2N Product SKU15 (5)
1-112EWRQ Product SKU16 (3000)
因此输出表上的每个ID都是唯一的。
几点:
任何帮助将不胜感激!这将为我节省大量时间! 谢谢。
答案 0 :(得分:2)
作为一个起点: 使用字典 - 如何做到这一点,请看这篇文章:http://www.techbookreport.com/tutorials/vba_dictionary.html
在那之后,做一些类似的事情(Pseudocode,最初你有工作要做的不会像vba一样):
Dim dict as new dictionary.
for i=1 to activesheet.rows.count
Dim Key= activesheet.cells(i,1).value 'get the unique product-id
Dim Product = activesheet.cells(i,2).value 'get the product-sku
If dic.exists(Key)=false then 'the heart of this program: if key doenst exist, add a new one, if it alreadys exits, append data
dict.add(Key, Product)
else
dict.Item(Key) = dict.Item(Key) & " " & Product
end if
next
For Each v In dict.Keys
'write it to your sheet
Next
我猜这种方法比另一种方法更快,只是因为字典很快而且不涉及多个查找循环。
答案 1 :(得分:1)
iDevelop的评论非常正确;该网站鼓励更多“尝试,然后只有当你卡住”类型问题后发布。但是我知道,当你甚至不知道从哪里开始时会很难!
这就是我想去的地方。
首先,我会在您的产品右侧添加一列额外的公式。我将放在单元格C2中的公式为:
=COUNTIF($A$1:A1,A2)
然后将被复制成
=COUNTIF($A$1:A2,A3)
=COUNTIF($A$1:A3,A4)
等等。这是为了什么目的?它计算ID代码的数量,它与您所在的行相同,但显示在EARLIER行上。如果该数字> 0,那么您就知道之前出现过ID代码。
接下来,我将构建一些代码来迭代工作表的UsedRange。查看每行的C列。如果为0,则只需将ID和描述复制到新工作表即可。如果不是,则使用Cells.Find方法在目标工作表中找到较早的条目,并将描述附加到该单元格。
可能有其他方法可以做到,但代码应该很容易编写和运行速度可以接受。
试一试,看看你想出了什么,如果你遇到困难,请务必回复。 (虽然我在这里睡觉时间不会有几个小时;但是世界上很多其他人无疑会这样做。)
祝你好运!