ExcelのCPU使用率を制限する


31

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

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


1
Windows?どのバージョンですか?
DavidPostill

Windows 7の私はポストにそれを追加します
learningAsIGo

8
マルチコアCPUを入手しますか?既に持っている場合(誰が持っていないのですか?)、Excelがすべてのコアを使用している場合(Excelでできるとは知りませんでした)、タスクマネージャーでアフィニティを設定します。
user253751

2
これは質問に答えませんが、何千ものセルの計算と更新を開始する前に、ウィンドウの更新をオフにしてください。チャートがある場合は、それらもオフにします。VBAは遅いですが、本当に遅い場合は、通常、それらの1つまたは両方が原因です。
コクシー

1
@cat:いいえ。WindowsタスクマネージャーのCPU使用率が100%の場合、すべての論理プロセッサーで100%を意味します。1つのコアのみが満たされている場合、25%(ハイパースレッディングを備えた一般的なデュアルコア)または〜36%(ターボブースト)のいずれかになります。
マーシーンカヤパウロ

回答:


54

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

Excelオプション...詳細タブ...数式セクションで数式を再計算するためにExcelが使用するスレッドの数を制限できます。

ここに画像の説明を入力してください


VBA subは問題ではなく、VBAコードが生成するExcelの配列式です。
learningAsIGo

@learningAsIGoそうですね、答えを簡略化しました。スレッド数を1に設定することが役立つかどうかをお知らせください。
mtone

1
これでうまくいったようです。3コアに設定し、CPUの最大75%に設定すると、他のことを行うための十分なスペースが残ります。ありがとう!
learningAsIGo

27

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

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


3
アフィニティについては、Windowsは各コアもCPUと見なします。(つまり、デュアルコアまたはクアッドコアがある場合、これは機能します。)
jpmc26

1
コアについて具体的に説明する場合、なぜハイパースレッディングスレッドを使用しないのですか?また、これらは別個の論理CPUです。つまり、HTを搭載したクアッドコアCPUには8つの論理CPUがあります。
ルスラン

HandBrakeの実行中は常にこれを行い、トランスコードプロセスを一時停止または停止せずに1時間インターネットを閲覧したいだけです。しばらくすると、コアがプログラムと親和性の「リセット」にリリースされ、少なくともハンドブレーキでそれが起こることに言及する価値があると思います。
モンキーゼウス

2
@MonkeyZeus通常、プロセスの終了時にアフィニティは保存されません。現在実行中のプロセスにのみ適用されます。HandBrakeが新しいプロセス自体を生成したか、新しいプロセスを開始した可能性があります。
jpmc26

@ jpmc26知っておきたい!私は間違いなく自分で新しいプロセスを開始しなかったので、それ自体でそれを生成する必要があります。
-MonkeyZeus

7

タスクマネージャを開いて[詳細]または[プロセス]タブ(Windowsのバージョンに応じて)に切り替え、excel.exeプロセスを右クリックして、より低い優先度。これにより、他のプロセスにより多くのCPU時間が与えられます。


1
動作していないようです。優先度を非常に低く設定しても、コンピューターよりも遅れています。
learningAsIGo

1
Webブラウザーの優先度を上げたり、同時に何をしようとしているのでしょうか?優先順位の変更がいかに効果的であるかに関するこの議論を見つけました。
Slithy Toves

3
@SlithyToves:それは本当に問題ではありません。優先度は、複数の候補がある場合、どのプログラムがCPUを取得するかを決定します。Excelを非常に低く設定すると、他のすべてのプログラムが終了したときにのみCPUスライスを取得します。ただし、Excel CPUスライスを取得しても、そのスライスは放棄されません。次のCPUタイムスライスの競争に負けてしまいます。
–MSalters

3

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



0

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


0

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

'Turn off screen updating

 Application.ScreenUpdating = False

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

'Turn screen updating back on

 Application.ScreenUpdating = True

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


-2

64ビットOSで32biオフィスを使用している場合は、このアプリを使用する必要があります:http ://www.ntcore.com/4gb_patch.php

このアプリは、Excelまたは他の32ビットオフィスがmoを使用できるようにします


質問はCPUを制限することです。あなたの答えは、おそらくAWEを利用することさえないアプリでAWEをアクティブにすることです。
マーシーンカヤパウロ

-5

OpenOfficeまたはLibreOfficeを使用します。そのスクリプト機能はMSのものよりもはるかに効果的であり、文字通り計算に「スロットル」を持たせることができます。

編集:なぜダウン票?見とるマニュアルをし、自分の目で確かめてください。たとえば、計算をJavaに変換し、JVMのすべてのスロットル機能で問題なく実行できます。


3
私はダウン投票しませんでしたが、OPで尋ねられた非常に直接的な質問に対する解決策ではなく、回避策を提案したためだと思います:「実行中にExcelがアクセスできるCPU使用量を制限する方法はありますか? 」
モンクピット

@Monkpit OpenOfficeでの私の話は似たような問題から始まりました。移植は私たちが持っていたすべてのドキュメントで約1週間かかりましたが、その後MS Officeを二度と使用しないと考えました。
アレクセイ・ヴェズニン

OpenOfficeはOfficeに比べて非常に優れているため、99%の人々がLibreよりもOfficeを使用するため、開発者(おそらくこの男が好きです)。それが私が投票した理由です。
トーマスシェラ

@ThomasSheraさて、私はまったく理解できません- なぜそんなに長い年月の間、マイクロソフトの人たちは単にものを修正できないのですか?いいえ、必要に応じて新しいものは、何のアドオンは-ちょうどあなたの製品が実際に...働いて作るん
アレクセイVesnin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.