2014-09-30 99 views
-1

我正在使用一个大型的Excel表格。每行由五列组成,如下所示根据列值对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。这是可以实现的吗?

+0

这是微软所覆盖的位置:http://office.microsoft.com/en-us/excel-help/filter-for-unique-values-or-remove-duplicate-values-HP010073943.aspx – TylerH 2014-09-30 18:06:06

回答

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 = "[email protected]=..." 'coming from strKey and column D 

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

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

strValue = "[email protected]=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.