Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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上的行_Vba_Excel - Fatal编程技术网

复制VBA上的行

复制VBA上的行,vba,excel,Vba,Excel,我需要一些想法如何复制符合条件的行 我有这样的数据: A B C D 1 Country Brand Model Year 2 France Peugeot, Citroen (France) Car 2003 3 Germany VW, Opel, BMW (Germany) Car 2003 ... 我们的目标是,每个汽车品牌的参数将在

我需要一些想法如何复制符合条件的行

我有这样的数据:

   A        B                          C     D
1   Country  Brand                      Model Year
2   France   Peugeot, Citroen (France)  Car   2003
3   Germany  VW, Opel, BMW (Germany)    Car   2003
...
我们的目标是,每个汽车品牌的参数将在单独的行/ 我想做的是将第2行复制到表格底部,将第3行复制到表格底部2次。同时创建显示品牌的列
F

结果应该如下所示:

    A        B                          C     D      F
1   Country  Brand                      Model Year
2   France   Peugeot, Citroen (France)  Car   2003   Peugeot
3   France   Peugeot, Citroen (France)  Car   2003   Citroen
4   Germany  VW, Opel, BMW (Germany)    Car   2003   VW
...
另外,我还有一张单独的品牌清单

我应该尝试搜索
,还是尝试从单独的表格中的列表中匹配这些品牌

我是新加入
vba
的,因此任何想法和建议都将不胜感激

如果列B总是从括号中的A栏中包含该国家,请考虑在执行拆分之前将其从列中移除。比如:

Dim原始ws作为Excel.Worksheet,newWs作为Excel.Worksheet
Dim countryName作为字符串,allBrands作为字符串,brandArray()作为字符串
暗行数一样长,下一行一样长,我一样长
行数=2:nextRow=2

countryName=originalWs.Cells(行号,1)
allBrands=originalWs.Cells(行数,2)
brandArray=Split(替换(所有品牌,(“&countryName&”),“”,“,”)

i=lbound(brandArray)到ubound(brandArray)的

nextRow=nextRow+1
与newWs
.Cells(nextRow,1)=国家名称
.Cells(nextRow,2)=所有品牌
.Cells(nextRow,3)=原始ws.Cells(行数,3)
.Cells(nextRow,4)=原始ws.Cells(行数,4)
.Cells(nextRow,5)=brandArray(i)
以
接下来我

关键是您必须为以下各项维护单独的计数器:

  • 原始工作表中的行
  • 插入到新工作表中的行
  • 阵列中的品牌
祝你好运

如果列B总是从括号中的A栏中包含该国家,请考虑在执行拆分之前将其从列中移除。比如:

Dim原始ws作为Excel.Worksheet,newWs作为Excel.Worksheet
Dim countryName作为字符串,allBrands作为字符串,brandArray()作为字符串
暗行数一样长,下一行一样长,我一样长
行数=2:nextRow=2

countryName=originalWs.Cells(行号,1)
allBrands=originalWs.Cells(行数,2)
brandArray=Split(替换(所有品牌,(“&countryName&”),“”,“,”)

i=lbound(brandArray)到ubound(brandArray)的

nextRow=nextRow+1
与newWs
.Cells(nextRow,1)=国家名称
.Cells(nextRow,2)=所有品牌
.Cells(nextRow,3)=原始ws.Cells(行数,3)
.Cells(nextRow,4)=原始ws.Cells(行数,4)
.Cells(nextRow,5)=brandArray(i)
以
接下来我

关键是您必须为以下各项维护单独的计数器:

  • 原始工作表中的行
  • 插入到新工作表中的行
  • 阵列中的品牌
祝你好运

看,这不是“取消”任务。我只想复制那些有多个品牌的产品线。我需要复制
B
column中品牌数量的倍查看vba中的Split()函数。然后使用该数组的Ubound来确定是否要复制。您还需要使用Left(Instr())方法删除
()
中的零件。所有这些都在一个循环中,通过行循环。对于拆分返回的每个实体,都有一个子循环。我建议在数组中加载所有内容,然后在完成后输出最终数组。请参阅。这不是“unpivot”任务。我只想复制那些有多个品牌的产品线。我需要复制
B
column中品牌数量的倍查看vba中的Split()函数。然后使用该数组的Ubound来确定是否要复制。您还需要使用Left(Instr())方法删除
()
中的零件。所有这些都在一个循环中,通过行循环。对于拆分返回的每个实体,都有一个子循环。我建议在数组中加载所有内容,然后在完成后输出最终数组。