Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 迭代excel工作表并根据列值合并行_Vba_Excel - Fatal编程技术网

Vba 迭代excel工作表并根据列值合并行

Vba 迭代excel工作表并根据列值合并行,vba,excel,Vba,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 | 我

我有一个很大的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 = "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.

Microsoft在此处介绍了这一点: