2016-07-05 183 views
1

我想在這裏創建兩個迭代。第一部分是「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   

回答

0

的數字在你的描述,你的代碼不匹配。

這將修復你的第二個循環。

做,當(j> 365)和(j < 731)

你有編碼的一種特殊方式。我猜這是來自你的數學背景。無論如何,我會用Rnd() >= P1而不是IIf(Rnd() < P1, 1, 0) = 1。我認爲這是更直接的。看起來你正在試圖制定一個隨機的兩年可用時間表。如果是這樣,你可能想改變你的循環來評估日期。這樣你就不必考慮閏年。

迴路1

的do while年份(DateSerial(年份(日期),1,J))=年份(日期())

迴路2

Do Date Year(DateSerial(Year(Date),1,j))= Year(Date())+ 1

+0

非常感謝,托馬斯,我嘗試了你的第一個建議。有用。重申你的第二個建議:我會同意你的觀點,Rnd()> = P1會容易得多。然而,這兩種方式實際上並不是隨機的,我決定使用另一個函數來通過添加額外的行來替換Rnd():Randomize。 –

+0

對於你的兩個新循環,我會考慮一下,因爲我沒有完全理解函數的意義,因爲VBA對我來說還是一個新東西,我會稍後再繼續跟進。再次感謝!:) –