マクロの記録は「今の操作を再現する」だけなので、条件分岐・繰り返し・データ量の変化への対応はできません。記録マクロはVBAを学ぶ「きっかけ」として活用しつつ、基本文法を少しずつ覚えていくことが、本当の自動化への近道です。
この記事では、次の内容を順番に解説します。
- マクロの記録でできること・できないこと
- 記録マクロのコードが持つ3つの問題点
- 記録マクロをVBAの学習に活かす方法
- 記録マクロからVBAへのステップアップ例
マクロの記録でできること・できないことを整理するには?
まず、マクロの記録が得意なことと苦手なことを整理しましょう。
| 操作の種類 | 記録マクロ | VBAで書く |
|---|---|---|
| セルへの値の入力 | ○ できる | ○ できる |
| 書式・色の変更 | ○ できる | ○ できる |
| フィルター・並び替え | ○ できる | ○ できる |
| 印刷設定 | ○ できる | ○ できる |
| 条件によって処理を変える | × できない | ○ If文で対応 |
| 繰り返し処理 | × できない | ○ Forループで対応 |
| データ量が毎回変わる処理 | × できない | ○ 最終行取得で対応 |
| 別ファイルとの連携 | △ 限定的 | ○ Workbooksで対応 |
記録マクロのコードが持つ3つの問題点とは?
たとえばA1に「売上」、B1に「1000」と入力した操作を記録すると、次のようなコードが生成されます。
Range("A1").Select
ActiveCell.FormulaR1C1 = "売上"
Range("B1").Select
ActiveCell.FormulaR1C1 = "1000"
このコードには実用上の問題が3つあります。
問題①:セルの番地が固定されている
記録マクロは操作した時点のセル(A1・B1など)を固定で記録します。「毎月データが増える」「行数が変わる」といった状況には対応できません。
' 記録マクロ:行数が固定されてしまう
Range("A1:A100").Select ' 101行目以降は無視される
' VBAで書く:最終行を動的に取得する
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
Range("A1:A" & lastRow).Select
問題②:Selectだらけで遅くて読みにくい
記録マクロは「選択してから操作する」という手順を忠実に再現するため、Select や ActiveCell が大量に並びます。これは処理が遅くなる原因になり、コードも読みにくくなります。
' 記録マクロ:Selectが多くて遅い
Range("A1").Select
ActiveCell.Value = "売上"
Range("B1").Select
ActiveCell.Value = 1000
' VBAで書く:Selectなしで直接入力
Range("A1").Value = "売上"
Range("B1").Value = 1000
問題③:条件分岐や繰り返しができない
「空白のセルだけ処理したい」「特定の条件のときだけ色を変えたい」といった判断や繰り返しは、記録マクロでは作れません。
' 記録マクロではこういう処理は作れない
' VBAで書く:条件分岐と繰り返しを組み合わせる例
Dim i As Long
For i = 1 To 100
If Cells(i, 1).Value <> "" Then
Cells(i, 2).Value = Cells(i, 1).Value * 1.1 ' 消費税を計算
End If
Next i
記録マクロをVBAの学習に活かすには?
記録マクロは「使えない」のではなく、使い方次第でVBA学習の強力な補助ツールになります。特に「書き方がわからないプロパティ・メソッドを調べる」用途で効果的です。
たとえば「セルのフォントを太字にするコードを知りたい」場合、手動で太字にした操作を記録すると次のコードが生成されます。
' 記録マクロで生成されたコード(太字の設定)
With Selection.Font
.Bold = True
.Name = "メイリオ"
End With
これを見ると「Font.Bold = True で太字になる」ということがわかります。あとは Selection を操作したいセルに変えれば実用的なコードになります。
' 記録マクロのヒントをもとに書き直したコード
Range("A1:A10").Font.Bold = True
記録マクロの活用ステップ:
- 知りたい操作(書式変更・フィルターなど)を手動で行う
- 記録マクロで生成されたコードを確認する
- プロパティ名やメソッド名を把握する
SelectやActiveCellを除去して自分のコードに組み込む
記録マクロからVBAへステップアップするには?
記録マクロで生成されたコードを少しずつ「VBAらしい書き方」に直していくことが、最も実践的な学習方法です。
ステップアップ例:フィルターをかけて別シートにコピーする
記録マクロで生成されたコードはこうなります。
' 記録マクロで生成されたコード(問題が多い)
Range("A1").Select
ActiveSheet.Range("$A$1:$D$100").AutoFilter Field:=3, Criteria1:="東京"
Range("A2:D100").Select
Selection.Copy
Sheets("Sheet2").Select
Range("A1").Select
ActiveSheet.Paste
これをVBAらしく書き直すと次のようになります。
' VBAらしく書き直したコード
Sub FilterAndCopy()
Dim wsFrom As Worksheet
Dim wsTo As Worksheet
Dim lastRow As Long
Set wsFrom = ThisWorkbook.Sheets("データ")
Set wsTo = ThisWorkbook.Sheets("抽出結果")
lastRow = wsFrom.Cells(wsFrom.Rows.Count, 1).End(xlUp).Row
' フィルターをかける
wsFrom.Range("A1:D" & lastRow).AutoFilter Field:=3, Criteria1:="東京"
' フィルター結果をコピー(値のみ)
wsFrom.Range("A2:D" & lastRow).SpecialCells(xlCellTypeVisible).Copy
wsTo.Range("A1").PasteSpecial Paste:=xlPasteValues
' フィルター解除
wsFrom.AutoFilterMode = False
Application.CutCopyMode = False
End Sub
改善したポイントは「最終行を動的に取得」「Selectを除去」「別シートへの値のみ貼り付け」「変数でシートを管理」の4つです。
まとめ
- 記録マクロの限界:条件分岐・繰り返し・動的なデータ範囲への対応ができない。
- 記録マクロの問題点:セルが固定・Selectだらけで遅い・条件判断ができない。
- 記録マクロの使い道:「書き方がわからない操作のコード」を調べるヒントとして活用する。
- ステップアップの方法:記録マクロのコードから
Selectを除去し、最終行を動的取得に変えるだけで大きく改善できる。 - 「できないことに気づく」のはVBAを学ぶ絶好のタイミング。記録マクロを入り口にして、少しずつ基本文法を覚えていくことが大切。
よくある質問
記録マクロのコードはどこで確認できますか?
「開発」タブ →「マクロ」→ 確認したいマクロを選択 →「編集」をクリックするとVBE(Visual Basic Editor)が開いて記録されたコードを確認できます。「開発」タブが表示されていない場合は、Excelのオプション →「リボンのユーザー設定」から「開発」にチェックを入れてください。
記録マクロのSelectはなぜ除去した方がいいのですか?
Selectはシートの表示を切り替える操作を伴うため、処理が遅くなります。また、他のシートがアクティブな状態で実行すると意図しないシートに操作が行われることがあります。Range("A1").Value = "売上" のように直接プロパティを操作すれば、Selectなしで同じ結果が得られます。
FormulaR1C1とFormulaの違いは何ですか?
記録マクロは FormulaR1C1 という行列番号で指定する形式を使うことが多いです。通常のセル参照(A1形式)で書く場合は Formula を使います。値を入れるだけなら Value を使う方がシンプルでわかりやすいです。
記録マクロを使いながらVBAを覚えるにはどうすればいいですか?
おすすめの順番は「操作を記録する → コードを読む → プロパティ名を把握する → 自分でゼロから書いてみる」です。最初から自分で書こうとすると行き詰まりやすいので、記録マクロで「ひな型」を作ってから手直しする練習を繰り返すのが効果的です。
記録マクロでできないことに限界を感じたらどこから学べばいいですか?
まず「If文(条件分岐)」と「For〜Next(繰り返し)」の2つを覚えると、できることが一気に広がります。この2つはVBAの最も重要な基本文法で、ほぼすべての実務マクロに登場します。記録マクロで生成されたコードに、このIf文やForループを組み合わせる練習から始めるのがおすすめです。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



