需要帮助在 VBA 中编写循环

Need help writing a Loop in VBA

这是我要编写循环的代码。

-用外行的话来说,我基本上是在尝试为单元格分配来自不同sheet但以数组形式的值。

mArray(counter, 25) = dArray(iRow, 18)
mArray(counter, 26) = dArray(iRow, 19)
mArray(counter, 27) = dArray(iRow, 20)
mArray(counter, 28) = dArray(iRow, 21)
mArray(counter, 29) = dArray(iRow, 22)
mArray(counter, 30) = dArray(iRow, 23)
mArray(counter, 31) = dArray(iRow, 24)
mArray(counter, 32) = dArray(iRow, 25)
mArray(counter, 33) = dArray(iRow, 26)
mArray(counter, 34) = dArray(iRow, 27)
mArray(counter, 35) = dArray(iRow, 28)
mArray(counter, 36) = dArray(iRow, 29)
mArray(counter, 37) = dArray(iRow, 30)
mArray(counter, 38) = dArray(iRow, 31)
mArray(counter, 39) = dArray(iRow, 32)
mArray(counter, 40) = dArray(iRow, 33)
mArray(counter, 41) = dArray(iRow, 34)
mArray(counter, 42) = dArray(iRow, 35)

下面是我创建的循环,但我不起作用。

  Dim a As Integer, b As Integer
                    
For a = 25 To 42
For b = 18 To 35
                    
mArray(counter, a) = dArray(iRow, b)

Next b
Next a

请多指教

你在这里做的是一个循环,在另一个循环中。所以你的代码会这样做:

a = 25
b = 18 -> 35
...
a = 26
b = 18 -> 35

这不是你想要的。我会告诉你这样做:

For i = 0 to x
    mArray(counter, a + i) = dArray(iRow, b + i)
Next i

换句话说,只需执行从 0 到 x 的单个循环,然后通过将 i 的值添加到 a 和 b 变量来调用您的方法。这样你的代码就可以了:

i = 0
a = 25
b = 18
---
i = 1
a = 26
b = 19
---
...
---
i = 10
a = 35
b = 28

希望这对您有所帮助。如果您有什么不清楚的地方,请随时询问。

恭喜。
您偶然发现了一种特殊的循环:嵌套循环(一个循环在另一个循环中)。

让我向您展示您编写的程序:

For a = 25 To 42
  For b = 18 To 35
    do_something(a,b)
  Next b
Next a

当您启动它时,将执行以下操作:

do_something(25,18)
do_something(25,19) ' inner loop increases
do_something(25,20) ' inner loop increases
do_something(25,21) ' inner loop increases
do_something(25,22) ' ...
do_something(25,23)
do_something(25,24)
do_something(25,25)
do_something(25,26)
do_something(25,27)
do_something(25,28)
do_something(25,29)
do_something(25,30)
do_something(25,31)
do_something(25,32)
do_something(25,33)
do_something(25,34)
do_something(25,35) ' inner loop is finished, now let's increase the outer loop

do_something(26,18)
do_something(26,19)
do_something(26,20)
...
do_something(26,35)
do_something(26,18)
do_something(26,19)
...
do_something(26,35)
do_something(27,18)
...
(up to:)
do_something(42,35)

如您所见,在嵌套循环的情况下,您 运行 通过内部循环。完成此操作后,您将转到外循环中的下一项,然后再次执行整个内循环,...,直到外循环完成并且内循环结束,嗯,x amount次 :-)

这显然不是您想要的:在您的情况下,a 和 b 之间存在一个简单的关系:a = b + 7

所以,这就是你可以做的:

For a = 25 To 42
  do_something(a,a - 7)
Next a

或:

For b = 18 To 35
  do_something(b + 7,b)
Next b

祝你好运