マクロを高速化するための、ちょっとしたテクニック

参考:このExcelマクロを効率化して実行速度を早くする方法を教えてください。 - 教えて!goo

すでに回答が締め切られている内容なので、こんな所でアドバイスを書いておく。

遅いマクロを直したいならば・・・

  1. 可能な限り非力なPC(処理に時間が掛かるPC)を用意する。
  2. ストップウォッチ(ラップ機能付き)を用意する。
  3. マクロの特定の処理が終わるタイミングで、ステータスバーに『**の処理完了』と表示させる。ステータスバーに文字を出す命令は『Application.StatusBar ="表示したい文字"』
  4. マクロを実行し、それぞれの処理の実行時間を確認する。
  5. 遅い処理を見つけて、遅い理由を一個一個潰していく。

備考:質問内容のように一回の実行に1時間以上掛かる場合は、処理に掛かった時間をメモするマクロを組んだ方が良い。

 以上、自分がよくやっているマクロの実行速度確認方法です。質問者さんは『マクロの全体的な処理が遅い』事はわかっていてもどの処理が遅いかを把握していないと思われます。まず、マクロの中のどの部分で時間を食っているかを確認した方が良いと思われます。
 なお、遅い処理を一個一個潰していくためには、処理毎にサブルーチン化した方が良いです。

何でgoto文?

 処理毎にサブルーチン化する際の邪魔になるのがgoto文。質問者さんのマクロ内にもgoto文が見られるのだけど、gotoを使っちゃうとサブルーチンに分解する際に苦労します。(どこからどこまでが一塊の処理か判別するのが非常に難しくなる)
 ・・・がんばって下さい!

おまけ

 処理時間が伸びる大きな原因は、次の3つです。

  1. マクロ実行中の処理の様子を表示させている。
  2. 途中でファイルを保存したり開いたりする処理を実行している。
  3. 無駄なfor文やdo文が含まれている。(何度もループを回していると時間の無駄、複数のfor文をまとめられるなら、まとめてしまった方が良い。)

 遅すぎるマクロの場合、プログラムの設計自体に問題がある可能性が高いので、ソースコードの全点検が必要だと思われます。