実行時にExcelがアクセスできるCPU使用量を制限する方法はありますか?巨大な配列数式の束を計算するVBAスクリプトがあります。 CPUの100%を使用して計算全体に20分程度かかる可能性がありますが、その間はマシンを使用できず、CPU使用率50%程度でマシンをバックグラウンドで実行して、他のことを続行できます。助言がありますか?
私のOSはWindows 7 Enterprise 64ビットで、Excelバージョンは2007-32ビットです
優先度を下げる代わりに、タスクマネージャでアフィニティを変更してみてください。 CPUが複数ある場合は、Excelが使用するCPUの数を制限できます。これにより、他のCPUを解放して他の作業を行うことができます。
[プロセス]タブで[Excel]を右クリックし、[アフィニティの設定]を選択します。 Excelを実行するCPUを選択します。
タスクマネージャーを開いて[詳細]タブまたは[プロセス]タブ(Windowsのバージョンによって異なる)に切り替え、Excel.exeプロセスを右クリックして、Excelプロセスの優先順位を下げ、優先度が低い。これにより、他のプロセスの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/
マクロの先頭近くに次の2行を追加します。
'Turn off screen updating
Application.ScreenUpdating = False
そして、終わり近くのこれらの2行:
'Turn screen updating back on
Application.ScreenUpdating = True
そうすれば、他のことをしている間、行う作業が少なくなります。
ラップトップに4GBのメモリが搭載されている場合にも、同じ問題が発生しました。 16 GBにアップグレードするとすぐに、問題は停止しました。ちょうど別の可能な解決策。