我想在這裏創建兩個迭代。第一部分是「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對我來說還是一個新東西,我會稍後再繼續跟進。再次感謝!:) –