【Excelマクロ】自動記録マクロで失敗しがちなコードパターン

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上達への一番の近道です。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール