迭代excel表并根据列值合并行

时间:2014-09-30 11:44:28

标签: excel vba excel-vba

我正在使用大量的Excel工作表。每行包含五列,如下所示

 A    B    C            D               E
AAA | B | 350 | Param1=10;Param2=20; | CC |
AAA | B | 350 | Param1=20;Param2=30; | CC |
AAA | C | 350 | Param1=10;Param2=20; | DD |
AAA | B | 350 | Param1=40;Param2=70; | CC |

我想要实现的是合并行A,B,C和E等效的行。如果这些列是等效的,那么我希望删除行,并将列D的值与之间的逗号合并,即我希望行 - 在我运行脚本之后 - 按照以下内容

 A    B    C            D                          E
AAA | B | 350 | Param1=10,20,40;Param2=20,30,70; | CC
AAA | C | 350 | Param1=10;Param2=20;             | DD

编辑:此外,D列中每个参数后面的值必须是唯一的。如果Param2 = 20有几行,那么它应该只说20次。

我之前从未使用过VBA。这可以实现吗?

1 个答案:

答案 0 :(得分:1)

您可以使用集合。遍历每一行并根据A,B,C和E列中的值创建一个键,f.i。 " AAA-B-350-CC"为第一行。将参数(D列)和密钥添加到集合中。

pseudo code

dim col as new Collection
dim strKey as String
dim strValue as String

strKey = "AAA-B-350-CC" 'coming from the columns A, B, C, E
strValue = "AAA-B-350-CC@Param=..." 'coming from strKey and column D

转到下一行。如果密钥不存在,请使用密钥将参数添加到集合中。 如果密钥确实存在。从集合中获取值,将参数值添加到集合中。从集合中删除参数并使用键再次添加(这是替换值的唯一方法)。

处理完所有行后,清除工作表并循环遍历该集合。拆分关键部分(包含原始列值)和值部分(参数)中的值。将关键部分拆分为A,B,C和E列的值,并将值部分存储在E中。您可以使用拆分功能。

strValue = "AAA-B-350-CC@Param=10;"
astrParts = split(strValue, "@");
'astrParts[0] contains the keypart
'astrParts[1] contains value part
astrColumns = split(astrParts[0], "-");
'astrColumns[0] contains value for kolom A
'astrColumns[1] contains value for kolom B
' etc.