「やたらと処理に時間がかかる」事件
先日 Excel について、ある調査を依頼されました。
マクロを用いた処理に、やたら時間がかかるというのです。
Sub Sample() Dim Tb As ListObject Dim r As Range Set Tb = ActiveSheet.ListObjects(1) For Each r In Tb.DataBodyRange.Columns(1).Cells rを用いた何某かの処理 Next End Sub
データを見てみると、300行 × 10列 程度の表で、通常であれば一瞬で処理が終わるはずのものです。私も実行してみましたが、確かに、処理完了まで数分を要しました。
そこで、For Each ~ にブレークポイントを設けて実行し、イミディエイトウィンドウでテーブルの行数を表示させてみました。
処理行数が100万行!なぜこんなことに?そこでテーブルのサイズを確認したところ、「A列~J列」で指定されていました。
これは時間がかかるはずです。むしろ、数分で終わったことに凄さを感じたぐらいです。テーブルサイズを修正することで、期待通りの処理時間(ほぼ瞬殺)に改善されました。
今回のまとめ
現象:処理時間がやたらと掛かる
調査:処理範囲は適切か?
原因:テーブルのサイズが列単位で指定されていた
処方:テーブルのサイズを適切な範囲に変更
結果:処理時間が短縮された
参考まで。