2016-07-05 187 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对我来说还是一个新东西,我会稍后再继续跟进。再次感谢!:) –