Access2000VBA・Excel2000VBA独学~ExcelVBAの高速化・速度アップ・スピードアップの方法について~
※まだ書きかけです。すみません。
※間違ってたらすみません。
※メモ書きなので、自分でも意味不明な箇所も多いです。ごめんなさい。
★ 参考Webサイト
『【excel VBA】スピードアップの簡単な7つの手法!(他のブログに無いパターン)』
『【翻訳】なぜExcel2013のVBAは遅いのか(シートの保護が原因?)』
『【翻訳②】Excel2013はなぜ遅いのか(PowerPivotインストが原因?)』
『【excel VBA】Excel高速化おまけ。ループを減らす(もちろん)(多い時は上限500ずつに分断?)』
★基本:『マクロVBAの高速化・速度対策の具体的手順と検証』
『速度比較決定版【Range,Cells,Do,For,ForEach】』
★ 引用メモ
これまで、色々検索してヒットしたのですが、基本的なこととして、以下のWebページをご紹介したいと思います。全部やれないまでも、とっても効果があると思います。
あと、バカのひとつ覚えみたいにすべてのサンプルプログラムに対して、「Application.ScreenUpdating =False」がプログラムの先頭に書いてある市販書籍等々を見かけますが、私と同じ初心者の方は、最初のうちは「VBAの動きのイメージが見えなくなって」あまりおすすめではありません。
プログラムが完成してから入れるか、「どうしても遅い時だけ使う」ようにしたほうがいいと思います。
時間のかからない処理にまで「Application.ScreenUpdating =False」を書いて、バカじゃないか?と思いますし、また、私たちExcelVBA初心者をバカにしてるのか?とも思います。
『マクロVBAの高速化・速度対策の具体的手順と検証』より引用。
テスト項番 所要時間 高速化・速度対策内容
test1 46秒 シートやセルをSelectしている最悪のVBA
test2 10秒 Application.ScreenUpdating =False を追加
test3 3.03秒 シートやセルをSelectを止める
test4 3.01秒 Application.Calculation = xlCalculationManual を追加
test5 3.01秒 変数の型宣言を追加
test6 2.81秒 WithステートメントでWorksheetsを指定
test7 2.65秒 すべてオブジェクト変数に変更
test8 0.53秒 セルの書式設定を一括で設定
test9 0.35秒 何度も使うセル値(検索値)を変数に入れる
test10 0.22秒 複数セル値を1行分まとめて入れる
test11 0.08秒 配列の使用
『【excel VBA】スピードアップの簡単な7つの手法!(他のブログに無いパターン)』より引用。
すこし古い情報もあるかもしれませんが、視点が参考になります。
大前提:セルの結合は止めるべし!←5000件くらいの帳票でもセルの結合があるなしでフリーズする!
セルのアドレスをいちいち指定してのデータを入力をやめる
処理中の画面更新 及び 自動計算はOFFに設定
ステータスバーの表示のやりすぎ注意
行列の削除はやめる
「コピーした行の挿入」より行の挿入+コピぺの方が俄然早い
計算はガバッとやらない
絞込みはAutofilterではなくアドバンスドフィルタAdvancedFilterを使え
Excel高速化おまけ。ループを減らす(もちろん)(多い時は上限500ずつに分断?)