2012-11-07 110 views
1

我正试图运行循环中指数在同一时间更改的循环。VBA中的双循环

For i = 0 To 20 Step 5 
For j = 0 To 5 Step 1 

Range(ActiveCell, ActiveCell.Offset(5 + i, 0)).Copy Destination:=Cells(8, 12 + j) 

Next i 
Next j 

我试图让循环做到这一点

Range(ActiveCell, ActiveCell.Offset(5 + 0, 0)).Copy Destination:=Cells(8, 12 + 0) 
Range(ActiveCell, ActiveCell.Offset(5 + 5, 0)).Copy Destination:=Cells(8, 12 + 1) 
Range(ActiveCell, ActiveCell.Offset(5 + 10, 0)).Copy Destination:=Cells(8, 12 + 2) 
Range(ActiveCell, ActiveCell.Offset(5 + 15, 0)).Copy Destination:=Cells(8, 12 + 3) 
Range(ActiveCell, ActiveCell.Offset(5 + 20, 0)).Copy Destination:=Cells(8, 12 + 4) 

回路我有unfortuantly做到这一点:

Range(ActiveCell, ActiveCell.Offset(5 + 0, 0)).Copy Destination:=Cells(8, 12 + 0) 
Range(ActiveCell, ActiveCell.Offset(5 + 5, 0)).Copy Destination:=Cells(8, 12 + 0) 
Range(ActiveCell, ActiveCell.Offset(5 + 10, 0)).Copy Destination:=Cells(8, 12 + 0) 
... 
Range(ActiveCell, ActiveCell.Offset(5 + 0, 0)).Copy Destination:=Cells(8, 12 + 1) 
Range(ActiveCell, ActiveCell.Offset(5 + 5, 0)).Copy Destination:=Cells(8, 12 + 1) 

我想我可以有一个循环这样的:但这并不完全。

For i = 0 To 20 Step 5 

Range(ActiveCell, ActiveCell.Offset(5 + i, 0)).Copy Destination:=Cells(8, 12 + j-4) 

Next j 

任何人都可以提出对具有环,其中indicies都在同一时间同时改变任何想法?谢谢!!

+0

我认为这个问题是“接下来我 下一步J”我想你搞砸了,应该是“下一个J下我”? – Larry

回答

1

正如你希望它们并行运行,你实际上不需要两个循环。从另一个计算一个变量:

For j = 0 To 4 Step 1 
    i = j * 5 

    Range(ActiveCell, ActiveCell.Offset(5 + i, 0)).Copy Destination:=Cells(8, 12 + j) 

Next i 
+0

你的循环与OP的不同。 – ApplePie

+0

@ AlexandreP.Levasseur:如果你的意思是'j'从'0'运行到'4',那么它就是故意的。否则它不会产生所需的结果。在原始代码中,外层循环执行五次迭代,内层循环执行六次迭代,但是从结果中可以看出它们都应该执行五次迭代,并且由于它们应该并行运行,所以它们必须运行相同数量的迭代。 – Guffa

2
for j = 0 to 5 
    Range(ActiveCell, ActiveCell.Offset(5 + i, 0)).Copy _ 
     Destination:=Cells(8, 12 + j) 
    i = i + 5 
next j 

编辑:为了让我的答案更完整一些:嵌套for循环不“同时工作”。最内层的for循环会执行每次迭代,结束,然后下一个循环可以完成其循环等等。你所做的只是一个控制两个变量的循环。你可以选择你想要放在你的外观(无论是我和手动增加j或其他方式)。