- 締切済み
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 ===
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
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などなら適宜修正してください
補足
すみません、ご回答ありがとうございます! おお、すごい。 実は、非同期は可能性は僕も薄々と疑ってたんです。 ただ、それを記述したドキュメントが探した限り 力不足で見当たらなかったんです。。。 大変お手数ですが、redfox63様はどこでそうお考えになったか、 教えていただければすごくうれしいです。m(_ _)m