web-dev-qa-db-ja.com

ExcelのCPU使用率を制限する

実行時にExcelがアクセスできるCPU使用量を制限する方法はありますか?巨大な配列数式の束を計算するVBAスクリプトがあります。 CPUの100%を使用して計算全体に20分程度かかる可能性がありますが、その間はマシンを使用できず、CPU使用率50%程度でマシンをバックグラウンドで実行して、他のことを続行できます。助言がありますか?

私のOSはWindows 7 Enterprise 64ビットで、Excelバージョンは2007-32ビットです

31
learningAsIGo

VBA関数が複数の数式から呼び出された場合、またはスクリプトが複数の数式の再計算を生成または強制した場合、これは確実にマルチスレッド計算Excelの機能。それぞれ、これは各数式に対してVBA関数の複数のインスタンスを実行するか、vbaスクリプトが単一のスレッドで実行されている間に複数のセルを同時に再計算します。

Excelで使用されるスレッドの数を制限して、Excelのオプション...詳細タブ...数式セクションで数式を再計算できます。

enter image description here

54
mtone

優先度を下げる代わりに、タスクマネージャでアフィニティを変更してみてください。 CPUが複数ある場合は、Excelが使用するCPUの数を制限できます。これにより、他のCPUを解放して他の作業を行うことができます。

[プロセス]タブで[Excel]を右クリックし、[アフィニティの設定]を選択します。 Excelを実行するCPUを選択します。

27
B540Glenn

タスクマネージャーを開いて[詳細]タブまたは[プロセス]タブ(Windowsのバージョンによって異なる)に切り替え、Excel.exeプロセスを右クリックして、Excelプロセスの優先順位を下げ、優先度が低い。これにより、他のプロセスのCPU時間を増やすことができます。

7
Slithy Toves

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 を参照してください

3
Yorik

数年前に同様の質問がありましたが、これには解決策があります: プロセスのCPU使用率を制限できる解決策はありますか?

Process TamerはWindows 7で動作します http://www.donationcoder.com/Software/Mouser/proctamer/

2
Ryan

マクロの先頭近くに次の2行を追加します。

'Turn off screen updating

 Application.ScreenUpdating = False

そして、終わり近くのこれらの2行:

'Turn screen updating back on

 Application.ScreenUpdating = True

そうすれば、他のことをしている間、行う作業が少なくなります。

0
Loppy

ラップトップに4GBのメモリが搭載されている場合にも、同じ問題が発生しました。 16 GBにアップグレードするとすぐに、問題は停止しました。ちょうど別の可能な解決策。

0
RPh_Coder