2016-08-29 14 views
0

私は乱数とループを持つシートを持っています。問題は次のとおりです。シートを更新して、シート内のすべての数値を再計算する必要があります。ただし、乱数はループ内で1回だけ変更する必要があります。今、彼らは常に変化し続けており、コードは終わらない。誰も知っている、どのようにループごとに一度だけ乱数を更新することができますか? 何か助けていただければ幸いです。VBA:乱数シートがループ内で変化し続ける

Sub MonteCarlo() 
    Application.ScreenUpdating = False 
    Dim x As Integer 

Application.Calculation = xlManual 

     For x = 1 To 1 
     Do 
     Worksheets("Ex-Ante TE").Calculate 

     DoEvents 
     Loop While Not Application.CalculationState = xlDone 

    Worksheets("Monte Carlo").Range("A" & x).Value = Worksheets("Ex-Ante Te").Range("B2").Value 
    Worksheets("Monte Carlo").Range("B" & x).Value = Worksheets("Ex-Ante Te").Range("B3").Value 
    Worksheets("Monte Carlo").Range("C" & x).Value = Worksheets("Ex-Ante Te").Range("B4").Value 

     Next 

Application.ScreenUpdating = True 
    Application.Calculation = xlAutomatic 

End Sub 
+0

なぜDo .. Whileループがありますか? – arcadeprecinct

+0

コードに乱数が表示されません。 Excelの関数 '= RAND()'または '= RANDBETWEEN()'を使用している場合は、シートが計算されるたびに変更されます。 VBAコードで乱数を作成する場合は、こちらをご覧ください:http://stackoverflow.com/questions/38891165/is-excel-vbas-rnd-really-this-bad/38893651#38893651 – Ralph

+3

Worksheet.Calculateは同期的に呼び出されます(返されるまで残りのVBAコードは実行されません)。ループ内で待機する必要はありません。 – z32a7ul

答えて

0

は、たぶん私はあなたの問題についての誤解が、私が集まる何から私はあなたが一度For xあたり-loopを計算したい

  • =RAND()数式を含むシートを持っていると思います。
  • For x -Loopごとに1回以上計算したい他の式Do -Loopは、For x -Loopの内部にネストされています。

可能な解決策は、あなたのDo -loopで

Worksheets("Ex-Ante Te").Range("A" & x).Calculateまたは

Worksheets("Ex-Ante Te").Range("myNamedRange").Calculate

のようなものとは別に、特定の範囲(または名前付き範囲)を計算することであるかもしれません。

EDIT:z32a7ulが指摘されているため、計算が完了するのを待っていないので、Loop While Not Application.CalculationState = xlDoneは必要ありません。

+0

将来のプロジェクトでは、ワークシート内の関数と計算を避け、ループごとに 'rnd()' - 値を1回だけ印刷するか、乱数を一切印刷せずにすべてを行いますVBA内での計算。 何かのようなもの 'i = LBound(myarr())To UBound(myarr())' | 'myarr(i)= Rnd()' | 「次へ」に心が浮かぶ –

+0

なぜ答えを編集するのではなく、自分の答えにコメントしていますか?次に、コメントに読みにくいコードを追加(適切な書式設定)することもできます。ところで、VBAの新しい行を示す正しい記号は ':'ではなく、 '|'です。 – Ralph

+0

コメントは回答でも不可欠な部分でもなく、物事が一般的にどのように改善されるかという単なる考えである可能性があります。 –

関連する問題