在VBA中并行for循环
这是我第一次使用VBA。 我的目标是创build一个值为评估函数的结果列。 这里是我如何构build我的代码的简化版本。
Sub find_alpha() Dim StartNumber As Integer Dim EndNumber As Integer Dim i As Integer Dim alpha As Integer EndNumber = 39 For alpha = 0 To 10 For StartNumber = 1 To EndNumber For i = 0 To 38 Cells(StartNumber, "A").Value = Cells.Item(1, "B") * i * (1 - alpha) Next i Next StartNumber Next alpha End Sub
这不起作用,因为它只在一个单元格中从0到38循环,而我需要它实际移动并将值添加到每个单元格。 所以i = 0的值应该到A1,i = 2应该到A2,i = 3应该到A3等等。
有没有办法平行移动循环来完成这个?
谢谢!!
你的问题/目标不是很清楚,所以这里有一些可能的盲点:
-
从单元格“A1”下降到预定义的行号(
EndNumber
)将单元格“B1”值乘以从0到(currentRowIndex- 1) * (1 - alpha)
,其中currentRowIndex
是在列“A”中的当前单元被写入并且alpha
从0变化到10(…)那么你会去:
Option Explicit Sub find_alpha1() Dim StartNumber As Long Dim EndNumber As Long Dim i As Long Dim alpha As Long StartNumber = 1 EndNumber = 39 For alpha = 0 To 10 For i = StartNumber To EndNumber Cells(i, "A").value = Cells.item(1, "B") * (i - 1) * (1 - alpha) Next i Next alpha End Sub
相同的代码可以被重写如下:
Option Explicit Sub find_alpha2() Dim EndNumber As Long Dim alpha As Long EndNumber = 39 For alpha = 0 To 10 With Range("A1").Resize(EndNumber) .FormulaR1C1 = "=R1C2*(ROW()-1)*(1-" & alpha & ")" .Value=.Value '<--| get rid of the formula and leave values only End With Next alpha End Sub
但是会出现这样的问题,那些列的“A”单元格会在每个
For alpha = 0 To 10
循环中被重写…(见下文) -
将从第1行向右“A”开始的行放置到预定义的行号(
EndNumber
)中,将单元格“B1”值乘以从0到(currentRowIndex- 1) * (1 - alpha)
,其中currentRowIndex
是当前列中的当前单元格的行索引被写入,并且列在从0到10的每个alpha
循环向右移动对于这样的任务,您实际上需要从第2行向下写入单元格,以便不覆盖单元格“B1”
那么你会去:
Option Explicit Sub find_alpha3() Dim EndNumber As Long Dim alpha As Long EndNumber = 39 For alpha = 0 To 10 With Range("A2").Offset(, alpha).Resize(EndNumber) .FormulaR1C1 = "=R1C2*(ROW()-2)*(1-" & alpha & ")" .value = .value '<--| get rid of the formula and leave values only End With Next alpha End Sub
-
如果不是1或2,那么是什么?