根据列值对excel表格和合并行进行迭代
问题描述:
我正在使用一个大型的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。这是可以实现的吗?
答
您可以使用集合。遍历每一行,并根据列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.
这是微软所覆盖的位置: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