• 締切済み

VBAの再計算が反映されない件につきまして

はじめまして。 大変恐れ入りますが、1つお伺いさせてください。 VBAにて計算結果が反映されない事象が発生しています。 コードは下記の通りです。 === Application.Calculation = xlCalculationManual For i = iFR To iTO Step iST Range(iCL) = i 'パラメータ設定 Application.CalculateFullRebuild 変数 = Cells(現在行, 1) '計算結果を変数/セル等に代入 Next === 要は、一旦高速化のために、Manualにしてから 再計算(計算結果がおかしくなるのを防ぐため すべての関係性をリセットした計算) して、任意の値をセルに書き込みます。 しかし、上記のCalculateFullRebuildの計算結果がセルに反映されない事象が発生しています。 おかしいなと思って、デバッグでF8を押しっぱなしにすると、確かに計算されない時があります。 気持ち、CalculateFullRebuildのあとで、F8を押すのを待つと、正しく反映されるようです。 これは高速すぎて、Excelのセル反映が間に合わないために生じる現象なのでしょうか?それとも計算エンジンの問題でしょうか? 正直とても困っています。 どなたか同じ体験をされた方、有識者の方、教えて頂ければ幸いです。 宜しく御願い申し上げます。 追伸:簡単ではりますが、環境を記述させて頂きました。 === Core2Duo、メモリ2GB Excel 2007 SP1のVBA ===

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Application.CalculateFullRebuild でやるよりも そのシートのEnableCalclationを設定した方が良いでしょう Application.Calculation = xlCalculationManual For i = iFR To iTO Step iST   Range(iCL) = i 'パラメータ設定   'Application.CalculateFullRebuild   ActiveSheet.EnableCaulculation = False   ActiveSheet.EnableCaulculation = True   変数 = Cells(現在行, 1) '計算結果を変数/セル等に代入 Next といった具合で ・・・ Application.CalculateFullRebuild はたぶん非同期で実行されるのではないかと思います なおActiveSheetは他のsheetなどなら適宜修正してください

msgaichi
質問者

補足

すみません、ご回答ありがとうございます! おお、すごい。 実は、非同期は可能性は僕も薄々と疑ってたんです。 ただ、それを記述したドキュメントが探した限り 力不足で見当たらなかったんです。。。 大変お手数ですが、redfox63様はどこでそうお考えになったか、 教えていただければすごくうれしいです。m(_ _)m

関連するQ&A