Possible Duplicate:
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 都是唯一的。
几点:
- 我无法粘贴图像,因此需要澄清一下:这是一个 ID:1-10OOMD6,这是一个产品:产品 SKU1 (9000)
- 数据集很大,至少有 35,000 行
- 数据最初并未按 ID 排序,但很容易做到。
- 最好用逗号分隔产品。
- 我想在另一个工作表上输出宏。
任何帮助将不胜感激!这会节省我大量的时间! 谢谢。
最佳答案
作为起点: 使用字典 - 如何做到这一点,请查看这篇文章: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
我猜想这种方法比另一种方法更快,因为字典速度很快并且不涉及多个查找循环。
关于vba - Excel VBA 将多行数据连接成一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13306919/