Excelの「マクロの記録」は、VBAを初めて触る人にとって非常に便利な機能です。クリック操作を記録し、自動でコードを作ってくれるため、「自分でもマクロが作れた!」という成功体験を得やすいのが大きな魅力です。
しかし、記録されたコードをそのまま使い続けると、意図しない動作やエラー、修正のしにくさといった問題に直面することが多くあります。
この記事では、自動記録でよく見かける“失敗しがち”なコードパターンと、その改善ポイントを解説します。
必要以上に冗長なコードが記録される
自動記録されたコードをよく見ると、実際の操作に対して不必要に長く、無駄の多いコードになっていることがあります。
たとえば、次のようなコードが記録されることがあります。
Range("B2").Select
Selection.Font.Bold = True
このコードの目的は「B2セルを太字にする」だけですが、実際にはセルの選択と、選択後の操作という2ステップに分かれて記録されています。
VBAでは、セルを選択しなくても直接操作できるため、次のように短く書けます。
Range("B2").Font.Bold = True
このように、自動記録では 「選択 → 操作」 の形が多くなり、マクロ全体が冗長になります。
実装するメリット
- コードが読みやすくなる
- 処理が速くなる
- 選択を伴わないため、画面がチカチカしない
セルやシートが固定されてしまう
自動記録では、操作したときのセルやシートがそのままハードコーディング(特定のシートやセルが指定されること)されるため、応用が効きません。
たとえば、「Sheet1」のA1セルを編集した場合、次のように記録されます。
Sheets("Sheet1").Select
Range("A1").Select
ActiveCell.Value = "完了"
このままでは、別のシートや行には使えません。
応用できるようにするには、シートやセルを変数で制御する、または選択を省略して直接操作するのが基本です。
Sheets("Sheet1").Range("A1").Value = "完了"
または、処理対象のシートを変数で指定します。
Dim sh As Worksheet
Set sh = Sheets("Sheet1")
sh.Range("A1").Value = "完了"
実装するメリット
- 汎用性が高まり、ほかのデータにも流用できる
- 処理対象が明確になり、保守しやすくなる
- 意図しないシート変更を防げる
不要なプロパティが大量に含まれる
自動記録では、ユーザーが意識せず行った操作も全て記録されます。たとえば書式変更の記録では、変更していない項目まで含まれることがあります。
With Selection.Font
.Name = "MS Pゴシック"
.Size = 11
.Bold = True
.Italic = False
.Underline = xlUnderlineStyleNone
.Color = -16777216
End With
本当は「太字」にしたかっただけなのに、フォント名やサイズ、色まで全て書かれてしまうため、見づらく、修正しにくいコードになります。
記録されたあとで、目的に関係ない部分は削除するようにしましょう。
Selection.Font.Bold = True
または、選択を省いてさらに簡潔にできます。
Range("B2").Font.Bold = True
実装するメリット
- コードがスリムになり、理解しやすくなる
- 不要な変更を防ぎ、他のフォーマットを壊さない
- 修正・再利用がしやすくなる
まとめ
「マクロの記録」は非常に便利な機能ですが、そのまま使うのではなく、不要なコードを整理し、目的に合わせて書き直す意識が重要です。
マクロの自動記録を“たたき台”として使い、そこから学びながら改善していくことで、VBAの理解も深まり、より実務に役立つコードへと進化させることができます。
- 「選択 → 操作」の記録は省略できる
- 固定されたセルやシートは、変数や直接指定で柔軟にする
- 不要なプロパティや設定は削除してすっきりさせる
- 自動記録は「完成品」ではなく、「出発点」として使う
記録されたマクロを少しずつ修正していくことが、VBA上達への一番の近道です。
