Skip to content

マクロ記録を活用したVBAコーディング

Excelはデータ処理や作業効率化において非常に便利なツールですが、手作業での操作や処理の繰り返しは時間と労力を要します。 そこで、Excelのマクロ記録機能を活用することで、繰り返し行う操作や処理を自動化することができます。

一方で、マクロ記録で生成されたコードは、処理に不必要なコードを含んでいることが多いため、可読性が低くメンテナンスしにくいといったデメリットもあります。 次の箇所を修正すると、読みやすく転用しやすいコードに変えることができます。

Rangeを可変にする

マクロ記録で生成されるコードでは、セル範囲がRangeで指定されることがあります。 しかし、データ範囲の変更に伴ってコードを修正する必要があります。 そこで、名前の定義を活用することで、ソースコードを修正することなくプログラムを実行できるようになります。

名前の定義を使用すると、セル範囲を可変にすることができ、データ範囲の変更に柔軟に対応できるようになります。

以下に具体的なコード例を示します。

1
2
3
4
5
6
' マクロ記録
Range(I2: K15).Select
Range("セルの範囲").Select

' 名前の定義を活用
Range("名前の定義").Select

ここで、「セルの範囲」の部分を名前の定義に置き換えることで、セル範囲を可変にすることができます。 また、最終行を選択する場合やFor文を使用してカウントアップする場合など、さまざまな応用も可能です。


不要なコードを削除する(コメントアウトする)

マクロ記録では、不要なコードやバグの原因となるコードも同時に生成されることがあります。 例えば、SelectメソッドやActiveSheet、スクロール、With文などがそれに該当します。 これらのコードは可読性を低下させたり、 バグを引き起こす可能性があるため、 削除するかコメントアウトすることをおすすめします。

コメントアウトは、コード行の先頭に「'(アポストロフィ)」を追加することで実現できます。 コメントアウトされたコードは実行されず、無効化されます。 これにより、必要なコードと不要なコードを明確に区別し、メンテナンス性の高いコードを作成することができます。


Select

シートやセルを選択するメソッドです。 Selectメソッドでセルを選択した後、「Selection」から始まるコードで処理が記載されます。 Selectメソッドは同一シート内の処理だけであれば問題ないのですが、別シートを利用する処理が加わると、可読性が低くなったり、別シートのセルを選択する等のバグにもつながったりしますので、できるだけ明示的にどのセルを扱っているのか記載するようにしましょう。

以下の2つの方法でコードを読みやすくすることができます。

  • Selectメソッドの該当セルを①で設定したRangeに変更する
  • 「セル選択のコード」を削除し、「Selection」の代わりに①のRangeを設定する

ActiveSheet

複数のシートをまたがる処理の場合、可読性が低く、意図したシートではないシートで処理をしてしまう等のバグが発生する可能性があるため、明示的にシート名を記載することをお勧めします。シート名を動的に扱いたい場合はシート名を変数にしておくとよいです。

1
ActiveSheet.Select
img1

1
2
3
Dim SheetName As String
SheetName = Sheet1
Sheets(SheetName).Select

スクロール

画面スクロールも処理として記録されてしまいます。処理には不要ですので削除します。

1
ActiveWindow.SmallScroll Down:=-6

With文

Withで始まるコードはセルのプロパティが設定されています。フォントを変更する、文字色を赤にする、罫線を引く等の処理でなければ削除して問題ないことが多いです。

1
2
3
    With Selection
        .Cells=xxxxx
    End With

値のみを貼り付けする場合は、「Paste」メソッドではなく、「PasteSpecial」で貼付け方法を指定します。

1
Selection.PasteSpecial Paste:=xlPasteValues

まとめ

クロ記録を活用したVBAコーディングは、Excelの操作を自動化するための強力なツールですが、 生成されるコードには改善の余地があります。 本記事で解説した方法を活用することで、 マクロ記録によるコードを修正し、 可読性の高いVBAコードを作成することができます。

本記事の手順に従ってVBAコーディングを学び、効率的なExcel作業を実現しましょう。