vba - Excel VBA 将多行数据连接成一行

标签 vba excel

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/

相关文章:

sorting - 排序而不移动格式

vba - 多次初始化用户窗体

excel - Vba Excel 维护大数据列表的最佳方式

vba - 使用 VBA 获取正确的日期

vba - 从几个文本框(V​​BA)填充一列

database - 将 Google App 引擎数据库导出到 excel 文件

c# - 通过 Open XML 将数据导出到支持宏的 Excel

VBA替换功能问题

vba - 当 SelectionType = ppSelectionNone 时,如何获取 Powerpoint 中可见幻灯片的 SlideIndex

VBA - 将数据复制到主工作表并在每行旁边插入工作表名称