実行時にExcelがアクセスできるCPU使用量を制限する方法はありますか?巨大な配列数式を大量に計算するVBAスクリプトがあります。CPUの100%を使用すると計算全体に20分かかる場合がありますが、その間はマシンを使用できず、CPU使用率50%程度でバックグラウンドで実行し、他のことを継続できるようにします。助言がありますか?
私のOSはWindows 7 Enterprise 64ビットで、Excelバージョンは2007-32ビットです
実行時にExcelがアクセスできるCPU使用量を制限する方法はありますか?巨大な配列数式を大量に計算するVBAスクリプトがあります。CPUの100%を使用すると計算全体に20分かかる場合がありますが、その間はマシンを使用できず、CPU使用率50%程度でバックグラウンドで実行し、他のことを継続できるようにします。助言がありますか?
私のOSはWindows 7 Enterprise 64ビットで、Excelバージョンは2007-32ビットです
回答:
VBA関数が複数の数式から呼び出される場合、またはスクリプトが複数の数式の再計算を生成または強制する場合、これは間違いなくExcelのマルチスレッド計算機能を利用する必要があります。それぞれ、各数式に対してVBA関数の複数のインスタンスを実行するか、vbaスクリプトが単一のスレッドで実行されている間に複数のセルを同時に再計算します。
Excelオプション...詳細タブ...数式セクションで数式を再計算するためにExcelが使用するスレッドの数を制限できます。
優先度を下げる代わりに、タスクマネージャでアフィニティを変更してみてください。CPUが1つ以上ある場合、Excelが使用するCPUの数を制限できます。これにより、他のCPUが解放され、他のCPUが動作するようになります。
[プロセス]タブで[Excel]を右クリックし、[アフィニティの設定]を選択します。Excelを実行するCPUを選択します。
タスクマネージャを開いて[詳細]または[プロセス]タブ(Windowsのバージョンに応じて)に切り替え、excel.exeプロセスを右クリックして、より低い優先度。これにより、他のプロセスにより多くのCPU時間が与えられます。
VBAで、または宣言を介して使用可能なスリープおよび待機機能があります。ただし、「過度に単純化された経験則」は、Sleep()を使用しないことです。(google '"sleep()"プログラミングを使用しない)
Application.Waitのドキュメントページ(https://msdn.microsoft.com/en-us/library/office/ff822851.aspx)。Sleep and Waitを使用すると、指定した期間Excelが応答しなくなり、タイムスライスの "残骸を訓練する"ことがあります。
計算に何らかのループが含まれる場合、特定の目的(CPUの可用性のための計算時間を失います)でこれを処理する1つの方法は、たとえばDoEvents()を1秒間ループし、その後戻ります。
DoEventsは基本的に、OSなどに時間をあきらめるようにコード/インタープリターに指示します。これにより、コードの時間が長くなります。また、計算中にワークシートを編集できるため、マイレージが異なる場合があります。テスト。
たとえば、https://stackoverflow.com/questions/469347/is-there-an-equivalent-to-thread-sleep-in-vbaを参照してください
数年前に同様の質問がありましたが、これには解決策 があります。プロセスのCPU使用率を制限できる解決策はありますか?
Process TamerはWindows 7で動作します 。http://www.donationcoder.com/Software/Mouser/proctamer/
64ビットOSで32biオフィスを使用している場合は、このアプリを使用する必要があります:http ://www.ntcore.com/4gb_patch.php
このアプリは、Excelまたは他の32ビットオフィスがmoを使用できるようにします
OpenOfficeまたはLibreOfficeを使用します。そのスクリプト機能はMSのものよりもはるかに効果的であり、文字通り計算に「スロットル」を持たせることができます。
編集:なぜダウン票?見とるマニュアルをし、自分の目で確かめてください。たとえば、計算をJavaに変換し、JVMのすべてのスロットル機能で問題なく実行できます。