「前任者が作ったマクロが動かなくなった。でもコードを見ても、何が書いてあるかさっぱり分からない」——引き継ぎ業務でこんな場面に遭遇していませんか。
VBAの知識がないまま担当が回ってきた事務系の方にとって、Excelマクロのコード解読は本当に頭の痛い問題です。修正しようにも、どこから手をつければよいか見当もつきません。
しかし、ご安心ください。VBAコードは「書ける」ようになる前に「読める」ようになれば十分です。読めれば原因がわかり、原因がわかれば外注や同僚に相談する糸口になります。
この記事では、引き継いだExcelマクロを読み解くための実践的な5ステップを解説します。VBEの開き方から、変数名の読み方、ループや条件分岐の構文パターン早見表、F8ステップ実行まで網羅。コードを1行も書いたことがない方でも、前任者のVBAの意図がつかめるようになる内容です。
引き継いだマクロが読めない理由と解決策
前任者のVBAコードが読めない理由は、大きく3つに整理できます。
1つ目は「VBE(コード編集画面)の開き方すら分からない」という入口の問題。2つ目は「変数名やキーワードの意味が分からない」という語彙の問題。3つ目は「F8キーで動きを追う」というデバッグ手法を知らないという技術の問題です。
これらは順番に解消できます。VBEを開く方法はキーボードショートカット1つ。変数名のルールは早見表で覚えられます。F8ステップ実行は、コードの動きを1行ずつ目で追えるVBAの最強の武器です。
本記事では「書けなくても読める」をゴールにしています。コードを自分で書けるようになるには数か月の学習が必要ですが、読んで意図をつかむだけなら半日で身につきます。完璧を目指さず、まずは前任者が何をしたかったのかを推測できるレベルを目指しましょう。
そして、読めるようになれば次の選択肢が見えてきます。自分で軽微な修正をする、外注に正確な依頼内容を伝える、同僚に「ここのループが原因では」と相談する——これらは全て「読める」から始まります。
【準備】VBEを開いてコードを確認する
VBAコードを読むには、まず編集画面である「VBE(Visual Basic Editor)」を開く必要があります。Excelとは別の専用画面で動作します。
VBEの画面構成を5分で把握する
VBEを開く方法は2つあります。最も速いのはAlt+F11キーを押す方法です。Excelファイルを開いた状態でこのショートカットを押せば、瞬時にVBEが起動します。
もう1つの方法は「開発」タブから「Visual Basic」をクリックする方法。「開発」タブが表示されていない場合は、Excelの「ファイル」→「オプション」→「リボンのユーザー設定」で「開発」にチェックを入れてください。
VBEを開くと、いくつかのウィンドウが表示されます。それぞれの役割を押さえておきましょう。
| ウィンドウ | 位置 | 役割 |
|---|---|---|
| プロジェクトエクスプローラー | 左上 | ブックとモジュールの一覧 |
| プロパティウィンドウ | 左下 | 選択中オブジェクトのプロパティ |
| コードウィンドウ | 中央 | コードを読み書きするメイン画面 |
| イミディエイトウィンドウ | Ctrl+Gで表示 | デバッグ用の入出力 |
| ローカルウィンドウ | 「表示」メニューから | 実行中の変数の現在値 |
まずは左上のプロジェクトエクスプローラーと中央のコードウィンドウを意識すれば十分です。VBEの画面構成をさらに詳しく知りたい方は、ExcelのVBE画面構成と各メニューの役割も参考にしてください。
どのモジュールに何が書いてある?
プロジェクトエクスプローラーを見ると、ブック名の下にいくつかの「モジュール」が並んでいます。モジュールとは、コードを格納する「引き出し」のようなものです。
モジュールには5つの種類があり、それぞれ役割が違います。
- 標準モジュール: 汎用的な処理を書く場所。最もよく使われる
- シートモジュール(Sheet1など): そのシート専用のイベント処理
- ThisWorkbookモジュール: ブックを開く・閉じる時の処理
- ユーザーフォームモジュール: ダイアログ画面の処理
- クラスモジュール: カスタムオブジェクトの定義(上級者向け)
引き継いだマクロの場合、まずは標準モジュールを開いてみましょう。汎用的な処理の8〜9割はここに書かれています。
プロジェクトエクスプローラーで「標準モジュール」フォルダを展開し、中にある「Module1」などをダブルクリック。中央のコードウィンドウにコードが表示されたら準備完了です。モジュールとプロシージャの関係性については、VBAのプロジェクト・モジュール・プロシージャの違いも参照してください。
【5ステップ】前任者のVBAコードを読み解く手順
ここからが本題です。コードを開いたら、いきなり1行目から読み始めてはいけません。全体→細部の順で読むのが鉄則です。
ステップ1:全体構造を鳥瞰する
まずはコード全体を眺めて、規模感と構造を把握します。具体的にチェックするのは次の3点です。
- Sub〜End Subの個数: 1つの「Sub」が1つの処理単位(プロシージャ)。数えれば全体の規模が分かる
- Option Explicitの有無: 1行目にあれば変数宣言が強制されており、型情報が読みやすい
- プロシージャ名:
Sub データ集計()のように、Sub直後の名前を全部拾い読みする
例えば次のようなコードがあったとします。
Option Explicit
Sub データ取得()
' 処理...
End Sub
Sub データ集計()
' 処理...
End Sub
Sub レポート出力()
' 処理...
End Sub
このコードは「取得→集計→出力」の3段階の処理で構成されている、と一目で読み取れます。前任者の意図した処理の流れが、プロシージャ名から見えてくるはずです。
ステップ2:変数名から処理の意図を読む
VBAでは、変数名に「型のヒント」を付ける慣習があります。これをハンガリアン記法と呼びます。
変数名の先頭にある2〜3文字のプレフィックス(接頭辞)を見れば、その変数が何を入れるためのものか即座に判断できます。早見表で覚えてしまいましょう。
| プレフィックス | データ型 | 意味 |
|---|---|---|
str | String | 文字列 |
lng / i / j | Long / Integer | 整数 |
dbl | Double | 小数 |
bln | Boolean | 真偽値(True / False) |
rng | Range | セル範囲 |
ws | Worksheet | シート |
wb | Workbook | ブック |
例えば Dim strName As String を見れば「文字列を入れる変数」、Dim wsTarget As Worksheet なら「シートを入れる変数」だと推測できます。
変数名は前任者がコードに残したコメントのようなものです。lngRowCount なら「行数を数える整数の変数」、rngData なら「データ範囲のセル」と読めれば、コードの意図がぐっと見えてきます。VBAの変数とデータ型の詳細は、VBAの変数と宣言を初心者向けに解説で深掘りできます。
ステップ3:ループと条件分岐のパターンを認識する
VBAコードの大半は「繰り返し(ループ)」と「分岐(If)」で構成されています。代表的なパターンを暗記すれば、コードの流れが追えるようになります。
最頻出は For〜Next ループです。「決まった回数を繰り返す」処理に使います。
For i = 1 To 10
' iが1から10まで、合計10回繰り返す処理
Next i
i = 1 To 10 は「iを1から10まで変化させる」という意味。ループ内の処理が10回実行されます。Step -1 で逆順、Step 2 で2つ飛ばしになります。詳しくはVBAのFor〜Next構文の使い方で解説しています。
次に For Each〜Next。これは「集合の中の全要素」に対して処理を行うループです。
For Each ws In Worksheets
' 全シートに同じ処理。wsが各シートを順に指す
Next ws
「全シート」「全セル」「全ファイル」のように、要素の数を数えなくても全部を回したい時に使われます。
ステップ4:エラー処理の有無を確認する
「On Error」で始まる行があるかどうかを確認します。これはエラー発生時の挙動を制御する命令です。
On Error GoTo ErrHandler ' エラー時はErrHandlerラベルへジャンプ
On Error Resume Next ' エラーを無視して次行へ進む
On Error GoTo 0 ' エラー処理をリセット
エラー処理が全くないコードは、何かトラブルがあると即座に止まります。一方、On Error Resume Next だらけのコードは、エラーが起きても気付かず誤った結果を出している可能性があります。
「マクロが動かない」と言われている場合、On Error GoTo のラベル先(例:ErrHandler: の下)を読めば、想定エラーが何だったかが分かることも多いです。エラー処理の読み方はVBAのエラー処理完全ガイドも参考にしてください。
ステップ5:F8ステップ実行で実際の動きを追う
ここまで来たら、コードを「実際に動かしながら」読みます。これがVBAデバッグの真骨頂です。
手順は次の通りです。
- 読みたい
Sub〜End Subの中にカーソルを置く - F8キーを押す → 1行ずつ実行され、黄色いハイライトが移動する
- 「表示」→「ローカルウィンドウ」を開く → 変数の値がリアルタイムで表示される
- F8を押し続けて、ループ条件・分岐・代入の流れを目で追う
特定の行から開始したい場合は、その行にカーソルを置いてF9キーを押し、ブレークポイント(赤い点)を設定します。F5で実行するとブレークポイント直前で自動停止し、そこからF8でステップ実行に切り替えられます。
イミディエイトウィンドウ(Ctrl+G)に ? 変数名 と打てば、その場で変数の中身を確認できます。例えば ? rngData.Address と打てば、rngData が指しているセル範囲のアドレスが表示されます。
【早見表】よく出るコードパターンの読み方
実務でよく登場するVBA構文を、読み方のヒント付きで一覧化しました。コードを読んでいて詰まったら、この表を参照してください。
| パターン | 構文の見た目 | 読み方のヒント |
|---|---|---|
| For〜Next | For i = 1 To 10 ... Next i | iを1から10まで繰り返す |
| For Each〜Next | For Each ws In Worksheets | 全シートに同じ処理 |
| Do While〜Loop | Do While Cells(i,1) <> "" | セルが空でない間繰り返す |
| Do Until〜Loop | Do Until Cells(i,1) = "" | セルが空になるまで繰り返す |
| If〜Then〜Else | If x > 0 Then ... Else ... | xが正なら〜、それ以外は〜 |
| Select Case | Select Case x ... Case 1 ... | xの値で複数分岐 |
| With〜End With | With Range("A1") ... End With | .から始まる行はそのオブジェクト |
| On Error GoTo | On Error GoTo ErrHandler | エラー時にラベルへジャンプ |
| Exit Sub | Exit Sub | プロシージャを途中で抜ける |
特に注意したいのが Withブロックです。.(ドット)で始まる行は、Withで指定したオブジェクトに属します。
With Worksheets("Sheet1")
.Range("A1").Value = "hello" ' Sheet1のA1セルに代入
.Range("A2").Font.Bold = True ' Sheet1のA2を太字に
End With
上記の.Range("A1")はWorksheets("Sheet1").Range("A1")と同じ意味です。Withは記述を短くする省略記法ですが、慣れていないと「何のオブジェクトの操作か」が分かりにくくなる原因にもなります。
Do While と Do Until の違いもよく混乱します。Whileは「条件が真の間ループ」、Untilは「条件が真になるまでループ」。意味が逆なので注意してください。
' データが入っている行を最後まで処理する例
Do While Cells(i, 1) <> ""
' A列のi行目が空でない間、繰り返す
i = i + 1
Loop
小改修にチャレンジ:コードを触ってみる
読めるようになったら、ごく軽微な改修にチャレンジしてみましょう。「読める」と「直せる」の間には大きな壁がありますが、設定値の変更レベルなら初心者でも安全に行えます。
例えば次のような改修は、リスクが低くて練習に最適です。
- 出力先のシート名を変える(
Worksheets("旧名")をWorksheets("新名")に書き換える) - ループの繰り返し回数を変える(
For i = 1 To 10をFor i = 1 To 20に変える) - 数値の閾値を変える(
If x > 100 ThenをIf x > 200 Thenに変える) - メッセージボックスの文言を変える(
MsgBox "完了"をMsgBox "処理が完了しました"に変える)
改修前に必ずExcelファイルをコピーしてバックアップを取ってください。VBAは「元に戻す(Ctrl+Z)」が効きにくいため、ファイル単位の保存が最も安全な保険になります。
そして改修後は、必ずF8でステップ実行して動きを確認しましょう。いきなりF5で全実行すると、意図しない箇所でエラーが出ても原因が特定しづらくなります。
逆に、ロジックそのものを変える改修(ループの構造を変える、分岐の条件を加えるなど)は、まだ無理をする必要はありません。読めるレベルで止めておいて、必要なら専門家に依頼する——これも立派な判断です。
まとめ:「書けなくても読める」から始める
引き継いだVBAマクロを読み解く5ステップを振り返ります。
- 全体構造を鳥瞰する — Subの数とプロシージャ名から処理の流れを把握
- 変数名から意図を読む — ハンガリアン記法のプレフィックスで型を推測
- ループと分岐のパターンを認識する — For/Do/If/Select Caseの早見表で構文を判別
- エラー処理を確認する — On ErrorのラベルとResume Nextの場所をチェック
- F8ステップ実行で動きを追う — ローカルウィンドウで変数の値を目視確認
VBAは「自分で書けないと使えない」と思われがちですが、それは誤解です。読めるだけで、業務上の問題は8割解決します。原因の切り分け、外注への依頼、同僚への相談——これら全てに「読める力」が活きます。
明日からの実践は、Alt+F11でVBEを開き、前任者のコードをコピー(バックアップ)した上で、Sub単位で1つずつF8ステップ実行してみることから始めてください。1日30分続ければ、1週間後には「だいたい何をやっているか」が見える状態になっているはずです。
書けるようになるのはその先で構いません。まずは「読める」を目標に、引き継いだVBAコードと仲良くなっていきましょう。
