我想在这里创建两个迭代。第一部分是“For i = 1 to iterations”。第二部分是从1到731的“j”。如何将两个Do while循环链接在一起?
在代码中,P1,P2,P3是常量,Discrete1,Discrete2,Discrete3是函数,但会随机返回整数。
在VBA中,我可以运行代码,但结果由于某些原因返回错误。
我想实现的是,当j小于266时,它与第一个循环一起进行,当j在360到731之间时,则它与第二个循环一起进行。
任何人都可以帮忙吗?我将不胜感激。
感谢
For i = 1 To Iteration: Cells(4, 3) = i
Do While j < 366
If IIf(Rnd() < P1, 1, 0) = 1 Then
RestorationDay1 = Discrete1
ElseIf IIf(Rnd() < P2, 1, 0) = 1 Then
RestorationDay1 = Discrete2
ElseIf IIf(Rnd() < P3, 1, 0) = 1 Then
RestorationDay1 = Discrete3
Else
RestorationDay1 = 0
End If
Sumunavailableday1 = Sumunavailableday1 + RestorationDay1
unAvailability1 = Sumunavailableday1/365
Availability1 = 1 - unAvailability1
Cells(4, 8) = j
Cells(4, 9) = Availability1
Cells(4, 10) = unAvailability1
Cells(4, 11) = Sumunavailableday1
j = j + RestorationDay1 + 1
Loop
Do While 365 < j < 731
If IIf(Rnd() < P1, 1, 0) = 1 Then
RestorationDay2 = Discrete1
ElseIf IIf(Rnd() < P2, 1, 0) = 1 Then
RestorationDay2 = Discrete2
ElseIf IIf(Rnd() < P3, 1, 0) = 1 Then
RestorationDay2 = Discrete3
Else
RestorationDay2 = 0
End If
Sumunavailableday2 = Sumunavailableday2 + RestorationDay2
unAvailability2 = Sumunavailableday2/365
Availability2 = 1 - unAvailability2
Cells(5, 8) = j
Cells(5, 9) = Availability2
Cells(5, 10) = unAvailability2
Cells(5, 11) = Sumunavailableday2
j = j + RestorationDay2 + 1
Loop
Next i
非常感谢,托马斯,我尝试了你的第一个建议。有用。重申你的第二个建议:我会同意你的观点,Rnd()> = P1会容易得多。然而,这两种方式实际上并不是随机的,我决定使用另一个函数来通过添加额外的行来替换Rnd():Randomize。 –
对于你的两个新循环,我会考虑一下,因为我没有完全理解函数的意义,因为VBA对我来说还是一个新东西,我会稍后再继续跟进。再次感谢!:) –