VBA を含む Excel 2010 スプレッドシートを、既に開いている他の大きな Excel スプレッドシートと一緒に開くと、なぜ遅くなるのでしょうか。

VBA を含む Excel 2010 スプレッドシートを、既に開いている他の大きな Excel スプレッドシートと一緒に開くと、なぜ遅くなるのでしょうか。

比較的小さい (約 100K) Excel 2010 スプレッドシートがあり、これを開くと (VBA 経由)、開始ページを除くすべてのワークシートが閉じられ、ユーザー名がチェックされて SQL テーブルとクロスチェックされ、ユーザーのレコードが戻されて権限がチェックされます。

いくつかのセルが更新されます (rangeUserName、rangeCurrentUser、rangeSystemAccess など)。

他の大きなスプレッドシート(​​VBA も含む)があるときにこのブックを開くと、開くのに約 30 ~ 60 秒かかりますが、他のブックが開いていない場合は 5 秒未満で開きます。

どうしてこれなの?

答え1

デフォルトでは、Excel は各ファイルを単一の EXCEL.EXE プロセス内で開きます。これは、Windows タスク マネージャーの [プロセス] タブで確認できます。

そのため、ファイルを開き続けるとそのプロセス内で競合が発生する可能性があり、最終的にはメモリが不足して速度が低下したりクラッシュしたりします。

これを回避するには、後続の Excel ウィンドウを別の EXCEL.EXE プロセスとして起動します。これを行うには、Shift キーを押しながら [スタート] メニューから Excel を選択するか、タスクバーで Excel をクリックします。個別のプロセスとして起動すると、Windows はリソースをより適切に管理するようになります。非アクティブなプロセスを仮想メモリにスワップすると考えられます。

Excel 2013 では、このゲームが少し難しくなりました。確認ウィンドウが表示されるまで Shift + Alt キーを押し続ける必要があります。

私は、特に大きなファイル、VBA コード、ピボット テーブル、外部データ、またはアドインで作業している場合は、すべての Excel ウィンドウをこの方法で開くようにしています。これは、そもそもリソースの問題を回避するだけでなく、クラッシュやフリーズが発生した場合に、一度にすべての作業が失われるのではなく、1 つのウィンドウでの作業のみが失われることを意味します。

関連情報