マクロを使って自分だけのツールを作る際に、いちいちオブジェクトとメソッドを辞書でひきながら1行1行書いていくわけではありません。
 Excelに付属している自動記録という機能を使えば、プロパティやメソッドを調べなくても、自分でExcelを動かした動作を自動的に記録して、コードに書きだしてくれます。
 この自動記録をやってみましょう。

Excelのバージョンによって、操作方法が若干異なります。
Excel2003の場合、[ツール]→[マクロ]→[マクロの記録]
Excel2007の場合、メニューバー[表示]→[マクロ]→[マクロの記録]
という順序で記録を開始できます。
↑Excel2007の画面です。「OK」を押すと自動記録が開始されます。


ここでは、例として次のような作業をマクロに記録してみます。

作業手順は、
1. セルA1~A10まで1から10を順番に書き込む
2. セルB1に「=A1*2」と書き込み、セルB1のセルをB10までオートフィルでコピーする
3. A1~B10の範囲を選択し、グラフを描く
4. マクロの記録を終了する
以上を手作業で行ったあとの画面が下の画像です。

では、この作業を記録したマクロを見てみましょう。
フォルダ「付録ブック」内のブック「マクロ入門」を開いて、Alt+F11でVBEを起動し、プロシージャ内をご覧になって下さい。

Sub マクロの記録()
'
' マクロの記録 Macro
'
'
Range("A1").Select
ActiveCell.FormulaR1C1 = "1"
53
Range("A2").Select
ActiveCell.FormulaR1C1 = "2"
Range("A3").Select
ActiveCell.FormulaR1C1 = "3"
Range("A4").Select
ActiveCell.FormulaR1C1 = "4"
Range("A5").Select
ActiveCell.FormulaR1C1 = "5"
Range("A6").Select
ActiveCell.FormulaR1C1 = "6"
Range("A7").Select
ActiveCell.FormulaR1C1 = "7"
Range("A8").Select
ActiveCell.FormulaR1C1 = "8"
Range("A9").Select
ActiveCell.FormulaR1C1 = "9"
Range("A10").Select
ActiveCell.FormulaR1C1 = "10"
Range("B1").Select
ActiveCell.FormulaR1C1 = "=2*RC[-1]"
Range("B1").Select
Selection.AutoFill Destination:=Range("B1:B10")
Range("B1:B10").Select
Range("A1:B10").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$B$10")
ActiveChart.ChartType = xlLine
End Sub
というように記録されました。
 
Rangeオブジェクト、Selectメソッド、FormulaR1C1プロパティなどを用いられて記録されているのがわかります。オートフィルやグラフの描画など若干マクロが複雑で、ヘルプや辞書で調べようとすると手間がかかりますが、自動記録を用いることにより、簡単にコード化することができました。


自動記録は大変便利ですが、必要のないコードまでも記録されてしまうため、これを日々の作業に用いようとすると、少々作業が遅くなってしまうので、不要なコードを削除して軽くしてみましょう。

先ほどのマクロを次のように改造しました。「マクロの記録2」をご覧ください。

Sub マクロの記録2()
'
' マクロの記録2 Macro
'
'画面の更新を停止させる
Application.ScreenUpdating = False
Range("A1") = "1"
Range("A2") = "2"
Range("A3") = "3"
Range("A4") = "4"
Range("A5") = "5"
Range("A6") = "6"
Range("A7") = "7"
Range("A8") = "8"
Range("A9") = "9"
Range("A10") = "10"
Range("B1") = "=2*RC[-1]"
Range("B1").Select
Selection.AutoFill Destination:=Range("B1:B10")
Range("B1:B10").Select
Range("A1:B10").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$B$10")
ActiveChart.ChartType = xlLine
'画面の更新の停止を解除
55
Application.ScreenUpdating = True
End Sub
 
「Application.ScreenUpdating = False」を追加・・・これにより、画面の更新をストップさせることができ、計算が素早くなります。

余計なSelectメソッドの削除・・・自動記録のマクロでは、「セルを選択し、セル内に値を書き込む」というコードでしたが、修正後のマクロでは、Selectを使用せず直接セルに値を書き込むようにしました。

これらのコードは短いのでまだまだ速度の差が確認しづらいですが、ワークシートが複雑になったり、ループをさせる制御構造を使用したりするようになると、処理速度の差が顕著になってきます。

マクロの処理速度を高めるポイント

1.Selectメソッドの使用を控える。
2.「Application.ScreenUpdating = False」というステートメントを挿入する。