処理速度を優先した実用版Excelマクロの作成方法については、
『Excelマクロガイド(セル操作)』で、説明しています。
今回は、敢えてゆっくりと処理が完了するように動きを見せることを
優先したデモ版Excelマクロの作成方法を紹介します。
1.Selectを多用する
(1) ワークブックやワークシートのSelectを多用する
上記のようなワークブックやワークシートのアクティブ化とセレクトを
多用すればするほど、Excelマクロは処理が遅くなるため、
デモ版ExcelマクロではワークブックやワークシートのSelectを
敢えてたくさん使用しています。
逆に、上記のようなワークブックやワークシートのアクティブ化とセレクトを
使用しなければ、Excelマクロは処理が速くなるため、
実用版ExcelマクロではワークブックやワークシートのSelectを使用しません。
(2) レンジのSelectを多用する
例えば、あるセル領域を囲む罫線の種類として実線を指定するとき、
実用版Excelマクロでは、下記のようにSelectを使用することなく、
セルを囲む罫線の種類として実線を直接指定します。
逆に、デモ版Excelマクロでは敢えて処理を遅くするため、
下記のように、一旦セル領域をセレクトしてから、
セレクト領域を囲む罫線の種類として実線を指定します。
Selectを多用すれば、処理は遅くなるのですが、
それでも処理時間の遅延が短すぎて、
デモ版ExcelマクロとしてExcel操作を表示するには、不十分です。
2.DoEventsで一定時間VBAの処理を離れExcelの操作を行う
そこで、DoEventsの登場です。
DoEventsは、一定時間、VBAの処理を離れ、
Excelの操作を行います。
DoEventsはVBAの処理とExcelの操作を平行して進めたいときに
有効なメソッドとなります。
下記のように、引数の時間だけVBAの処理を一時停止し、
その時間にExcelの操作を実行するサブプロシージャをつくります。
例えば、上記のように、
行のループ処理でXSheetのセルの値をYSheetのセルに代入するときは、
引数に0.1秒を設定してサブプロシージャー『PauseTime_Wait』を
呼び出すことで、
VBAの処理を0.1秒一時停止し、その0.1秒間にExcel操作の画面表示を
実行できるようになります。
このように、DoEventsを使えば、VBAの処理とExcelの操作を
平行して進めることができることに加え、一時停止時間を自由に
つくりだすことができます。
このSelectとDoEventsを組み合わせれば、
1秒の実用版Excelマクロを45秒のデモ版Excelマクロに
改修することもできます。