私が働いている会社では、昨年の会社での購入を追跡するための Excel スプレッドシートを使用しています。このシートには、約 1500 行と 30 列があります。
数日前から、このシートのフィルタリングが非常に遅くなり始めました。任意のキーワードで任意の列をフィルタリングするのに約 5 秒かかります。このシートは頻繁にフィルタリングされるため、これはかなり長い時間であり、煩わしいものです。シートには数式や他のシートやファイルへの参照はありません。セルの変更時に実行されるマクロが 2 つありますが、両方のマクロを無効にしても速度は上がりません。
また、1 行を除くすべての行を削除しようとしましたが、残りの行にフィルターを適用すると、完了するまでに 5 秒かかります。
なぜこんなに遅くなるのか、誰か分かるでしょうか?
答え1
これは通常、Excel がデータ セットを実際よりはるかに大きいと認識しているために発生します。たとえば、誰かがセル A1048576 に移動して書式設定した場合、見た目は変わらないかもしれませんが、Excel は行数が 100 万行以上あると認識します。セル A1 を選択して Ctrl + End キーを押して、これをテストします。これにより、Excel がワークシートの最後のセルであると認識しているセルに移動します。これが問題である場合は、実際のデータが終了した場所以降のすべての行および/または列を削除し、ファイルを保存して閉じ、再度開きます。これにより、Excel がそれらの空のセルをデータの一部として認識しなくなります。これが機能しない場合は、データを選択して新しいファイルに貼り付けると、問題が解決するはずです。
答え2
- すべて選択 ( Ctrl+ A)
- [ホーム] -> [編集] -> [クリア] -> [書式のクリア] に移動します。
- ファイルを保存してフィルターを再度適用します。
これで完了です。私の場合は毎回うまくいきました。あなたにもうまくいったかどうか教えてください。
答え3
おそらく手遅れですが、自動計算をオフにしてください。VBA では、次の 2 つを使用して自動計算をオフにし、フィルターを適用してから、自動計算を再びオンにします。
Sub automatic_update_on()
Application.Calculation = xlAutomatic
End Sub
Sub automatic_update_off()
Application.Calculation = xlManual
End Sub
答え4
私の場合、すべてのコメントを削除するのに役立ちました。100,000 件以上のエントリがあるテーブルの場合、フィルター時間は 1.5 分から 1 秒未満に短縮されました。