VBAオジサンのらくがき帳

#08 マクロの記録機能

2021-02-28 00:00:00

開発タブのなかにマクロの記録というボタンがあります。これは自分が行った作業をマクロとして記録してくれる機能です。この機能の活用法と注意点について述べたいと思います。

まず下の手順でマクロを記録してみてください。

下のようなマクロが記録されたと思いまます。

このマクロを実行することにより、先ほど手入力したことと同じことを再現することができます。しかし、実際には記録されたマクロをそのままつかうことはあまりありません。通常は作成されたコードから欲しい部分を切り取って、自分で作っているマクロに貼り付けてつかいます。

サンプル中のActiveCellは現在選択されているセルを表します。手入力を記録した場合には、選択、入力の順で作業が行われるのでマクロを記録した際にはよく使われます。こちらは本来なら下の通り1行ですむ処理です。

Range("B2").Value = "abc"

また別シートからコピーする場合でも、記録した場合はシート選択、コピー、シート選択、貼り付けとなりますが、実際にはもっと少ない行数で書くことができます。

例えば下のように生成されたは

Range("A1:B2").Select
Selection.Copy
Sheets("Sheet2").Select
ActiveSheet.Paste

下のように書き換えることができます。

Range("A1:B2").Copy Sheets("Sheet2").Range("A1")

このように生成されたコードをそのまま使うのではなく、ActiveCellやSelectionをRangeにおきかえたりして、無駄な処理をなくしていくという工夫は大事です。これまで紹介してきたRange、Worksheet、Workbookなどのオブジェクトはマクロの記録によく使われますので作成されたコードを読むさいに理解に役立つのではないかと思います。

マクロの記録がより役に立つのは、実装したい処理にどのようなプロパティやメソッドを使えばいいかを調べるときです。フォントや書式設定、ページ設定など、こまかな設定を全て覚えるのめんどくさいですし必ずしも効率的ではありません。そのような処理を記録して使われているプロパティの確認をするのは開発時間の短縮にとても効果的です。

一方、記録した中から必要なものを取り出すということが必要になることもあります。たとえば印刷設定でシートを1ページに収まるようにしたいときに、実際に必要なコードは下のとおりですが、マクロの記録をおこなうとその他のプロパティの設定もまとめて設定してしまうため、だいぶ余分なコードが作られてしまいます。(実際に試してみてください。)

With ActiveSheet.PageSetup
    .Zoom = False
    .FitToPagesWide
    .FitToPagesTall = 1
End With

無駄な行があっても想定どおりには動くかもしれませんが、不要なものは排除するコードがすっきりして読みやすさがアップしますのでとても重要です。