次の方法で共有

DoEventsでEXCELのCPU占有率が50%になって固まる

Anonymous
2018-01-12T05:47:52+00:00

お世話になります。

Excel2016を使用していると、ある時、シートを選択するとまったく反応しなくなり、CPU使用率が50%(実際には49-52%で変動)のままになり固まってしまいます。

環境:

PC: 複数のPCで発生しました。(Lenovo Thinkpad L412, X240)

 windows: Windows 7  (他の環境では試していません。※再現性が低いため簡単にはテストできない)

Excel : 2016 最新修正適用済み (他の環境では試していません。※再現性が低いため簡単にはテストできない)

 アドイン: XLSTARTに独自のアドインを入れています。

再現性

再現しようとしても一度も再現することはできません。ただし、日に3-4時間の操作(操作の密度は高くありません)していると2-3回発生する感覚です。

症状:

・発生すると、EXCELが全く反応しなくなります。特徴としては、時計アイコン(くるくる)も表示されないし、ウィンドウタイトルに「応答しません」のメッセージもでません。シートの切り替えも、ブックの切り替えも、VBEも、終了ボタン(画面右上)も、ESCキーも効きません。

・いつ発生するのかわかりません。長時間操作したあとに発生することもあるし、EXCELを起動してすぐに発生することもあります。

・タスクマネージャーでEXCEL32.EXEのCPUが50%前後になります。

・発生すると数分から数十分たってから動作するようになる場合もありますが、多くの場合は、タスクマネージャーでEXCELを終了する以外に方法がありません。

・また、コントロールが戻ってきた場合も、一回発生すると、キーを入力しただけでも、また、CPU 50%の状態にすぐになります。

分析結果

独自アドインのなかに各ステップをトレースするコードを実装して、どこで問題が発生するのかを記録しました。

すると、DoEventsを行った直後からEXCEL32.EXEがCPU 50%になっていることがわかりました。

ただし、DoEventsを発行すればいつでも発生するわかではありません。DoEventsは、アドインコードのいたるところにありますが、発生する場所は、SelectionChangeイベントで呼ばれた処理の中のように見えますが、定かではありません。(少なくと数回、そこでとまった)。

その部分の前後の処理コードに特に問題はなく、また、通常はなんの問題もなく、動作しています。

発生する際のExcelの使用するメモリーも多いときもあるし、そうでないときもあるので、メモリー使用量とは関係ないようです。

わたくしの経験では、VBAアプリを動作させていて、EXCELが反応しなくなる場合は、VBAの実行コードがループなどで長く処理を占有してしまう場合であるため、少なくとも3秒に1回くらいDoEventsを常に実行しています。今回は、DoEventsを入れることで逆にEXCEL内部でループ状態に入ってしまったように見えます。

もしかすると、アドインにはまったく関係なく、アドインを使用しなくても、なんらかのタイミングでEXCELが50%の状態に陥る問題が潜在的にあるのかも知れません。

EXCELの内部をデバックするわけにもいかず大変困っています。現在、EXCEL2016でこの問題が発生していますが、数か月前までは、EXCEL2013を使用していたのですが、このような現象は一度も経験したことがありません。

皆様の環境、突然EXCELがCPU 50%で止まってしまうことはないでしょうか。

解決のヒントがあれば、アドバイスをどうぞよろしくお願いいたします。

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2018-01-23T08:55:15+00:00

​catman7 さん、こんにちは。

返信ありがとうございます。

このたびの動作について、あらためて調べてみても他にご紹介できそうできそうな情報が見つかりませんでした。。

以前一ノ瀬もコメントしていましたが、開発者の方々が多く利用されている MSDN フォーラムでは VBA のカテゴリがあるので、そちらにも質問を投稿して情報を集めてみると良いかもしれません。

MSDN フォーラム - Visual Basic for Application(VBA)

また、このマイクロソフト コミュニティは一般ユーザー同士の情報交換の場として提供されているので、マイクロソフトへ詳しい報告を行いたい場合は Excel 2016 の [ファイル] タブ > [フィードバック] からフィードバックを送信していただければと思います。

Microsoft Office に関するフィードバックを送信する方法

他に、公式の回答を希望する場合はサポート窓口にまずは今回の件が対応可能か相談してみるのもよいかもしれません。

お問い合わせ先 - Office

この回答は役に立ちましたか?

2 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

5 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2018-01-18T01:09:06+00:00

    藤田 香さん、ご回答ありがとうございます。

    >また、Excel 側で行える対処としては Excel 2016 自体で何か問題が起きていないか、

    ><Easy Fix ツール>を使って Office を完全にアンインストールの後、

    >どうかといった方法かもしれません。

    これはすでに行っておりますが、効果はありませんでした。

    本件については、EXCEL CPU50%になって固まったときにEXCEL内で何の処理をしているのかを状態を分析しない限り、解決できないと考えています。私の経験では、EXCEL上での人によるキー、マウスでの操作では動作しても、VBAアプリによる自動入力、特に、イベントをトラップして行う処理などでは、タイミングが厳しいせいかEXCELが誤動作をすることを経験しています。その際は、DoEvents等のループなどにより、次の処理までの時間を空けるなど問題の回避をしてきました。

    今回の問題がクリティカルな理由は、既存の問題の回避処理処理に使用しているDoEventsで問題が発生してしまうため、アプリ側では逃げる方法がなくなってしまったという点です。

    その後の分析では、VBAマクロで新しいブックの作成を繰り返し、その処理内でUserFormを出すことを繰り返していると、VBA認識しているActiveWorkbookと実際に画面に表示されているWorkbookとが異なる問題が発生した後に、CPU 50%が発生することが確認できました。(必ずしもそのパターンだけではない)。

    この問題の再現方法をもっと強化して、を第三者でも確実に再現できる方法を見出した場合、マイクロソフト様へ報告すれば修正していただけるのでしょうか。その報告方法を教えていただけないでしょうか。

    よろしくお願いいたします。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2018-01-17T08:59:54+00:00

    ​catman7 さん、こんにちは。

    返信ありがとうございます。

    再現が低いとのことですぐに確認は難しいかもしれませんが、念のため他の要因がないか切り分けるために、一ノ瀬 がコメントしていた Office のセーフ モードやクリーン ブートは行ってみると良いかと思います。

    また、Excel 側で行える対処としては Excel 2016 自体で何か問題が起きていないか、<Easy Fix ツール>を使って Office を完全にアンインストールの後、再インストールしてどうかといった方法かもしれません。

    ※「オプション 2 - Easy Fix ツールを使用して、Office を完全にアンインストールする」の項目を参照してください。

    ※ほかに Excel のパフォーマンスに関して以下資料くらいしか見つけられませんでした。。

    Excel のパフォーマンス: パフォーマンスの障害物を最適化するためのヒント

    なお、当マイクロソフト コミュニティでは、一般的な Excel の使い方やトラブルの対処などの情報交換が多く行われています。

    利用されている独自のアドインとの関連性、Excel 側でのその処理と CPU への影響などについては情報やアドバイスが集まりにくいかもしれません。

    開発者の方々が多く情報交換をされている< MSDN フォーラムの VBA のカテゴリ>にも質問を投稿して解析方法などのアドバイスを集めてみると良いと思います。

    そちらも活用してみてくださいね。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2018-01-12T09:17:10+00:00

    一ノ瀬 圭 さん、ご回答ありがとうございます。

    アドインをはずした状態で起きるかどうかは、再現が低いのでわかりません。世の中で起こっていないようなので恐らくアドインなしでは起こらないのではないかと思います。

    たとえ、アドインを使用したときだけ起こる問題であったとしても、アドイン側に問題はないと思います。通常は正常に動作していてあるときにDoEventsのあと、コントロールがEXCELわたったあと返ってこないのは、EXCEL側の問題ではないでしょうか。

    もし、アドイン側に問題あるとすれば、どのようなケースが考えられるのでしょうか。アドイン側で調査、調整できることは何でもしたいと思いますが、それがわかりません。

    MSのガイドには、このようなCPU%が高くなって止まる場合は、アドインをはずせ、というガイドがでていますが、それではアドインを使うなというのと同じことですので私の環境では受け入れることができません。

    たしかにアドインやマクロの中でループしている場合もあると思いますが、今回はそうではありません。 また、実際にマクロ内でDo Loopで無限にループさせても、そのときのCPUは、25%程度でした。EXCEL 50%というのは、EXCEL本体内でなんらかの問題が発生しているのではないでしょうか。

    こういう問題に対しては、MSとしてはどのようなサービスがあるのでしょうか。有償サポートであれば、EXCELが50%のまま戻って来ない原因を究明していただくことは可能なのでしょうか。その状態でメモリーダンプなどなんらかの解析用のツールややり方があれば、ご教授いただけないでしょうか。

    どうぞよろしくお願いいたします。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2018-01-12T08:45:22+00:00

    ​catman7 さん、こんにちは。

    マイクロソフト コミュニティをご利用いただき、ありがとうございます。

    Excel 2016 の使用中、フリーズすることがあるのですね。

    まずはアドインが要因かどうかを切り分けるため、Office セーフ モードで起動するとどうか、確認するのが良いと思います。

     ◇ Windows PC 上の Office アプリをセーフ モードで開く

     ※ XLSTART のアドインが読み込まれる場合は、アドインを削除して、動作を確認してください。

    Office セーフ モードでも同じ現象が起きる場合は、さらに要因を切り分けるため、クリーン ブートの状態で同じ現象が起きるかどうかを確認してみてはいかがでしょうか。

     ◇ \[Windows 7\] 常駐アプリケーションを解除する方法を教えてください。

     ※すべてのプログラムを停止して確認してみてください。

    Office セーフ モードでフリーズが起きない場合は、アドインが要因と考えられます。アドインについては、以下の MSDN フォーラムに専用のカテゴリがあるため、そちらに投稿して情報を集めてはいかがでしょうか。

     ◇ MSDN フォーラム - Visual Basic for Application(VBA)

    返信をお待ちしています。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません