Excel VBA将来自多行的数据连接成1行

可能重复:
Excel连接行

我想用Excel VBAmacros将多行数据合并到一行中,并将输出合并到新的工作表中,但是我不知道从哪里开始。 数据非常简单,由一列ID和一列产品组成。 如果存在多个产品条目,则可能会有多个具有相同ID的行,因此我正在寻找一个macros来循环访问数据集,并将这些多个条目合并为一个。 如果该行是唯一的(即,只有一个产品条目与该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都是唯一的。

几点:

  • 我无法粘贴图像,所以澄清:这是一个ID:1-10OOMD6,这是一个产品:产品SKU1(9000)
  • 数据集很大,至less有35,000行
  • 数据最初不是按IDsorting的,但很容易就可以。
  • 用逗号分隔产品会很好。
  • 我想在另一个工作表上输出macros。

任何帮助将不胜感激! 这将为我节省大量的时间! 谢谢。

作为一个起点:使用字典 – 如何做到这一点,看看这篇文章: http : //www.techbookreport.com/tutorials/vba_dictionary.html

之后,只要做这样的事情(伪代码,最初不会像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 

我猜测这种方法比另一种更快,只是因为字典速度快,而且不涉及多个查找循环。

iDevelop的评论是非常正确的; 该网站鼓励更多的“尝试,然后只有当你卡住”types的问题。 但是我知道,当你甚至不知道从哪里开始的时候,这可能很难。

这是我会的地方。

首先,我会在您的产品右侧添加一列额外的公式。 我将在C2单元格中的公式是:

 =COUNTIF($A$1:A1,A2) 

然后将其复制下来

 =COUNTIF($A$1:A2,A3) =COUNTIF($A$1:A3,A4) 

等等。 这是什么目的? 它计算与您所在的行相同但出现在EARLIER行上的ID代码的数量。 如果这个数字大于0,那么你知道有一个以前发生的ID代码。

接下来,我将构build一些代码来遍历表单的UsedRange。 看看每一行的C列。 如果它是0,那么只需将ID和描述复制到新工作表。 如果不是,则使用Cells.Find方法在目标工作表中定位较早的条目,然后将描述追加到该单元格。

可能还有其他的方法,但代码应该很容易编写和运行可以接受的速度。

给它一个去看看你想出了什么,并通过一切手段后退,如果你卡住了。 (虽然我不会在这里待上几个小时,但世界各地的其他人无疑也会这样。)

祝你好运!