VBAのコードを読む力は、書く力と同じくらい大切です。他人のマクロを修正したり、エラーの原因を探したりするとき、「コードを読む力」がないと手も足も出なくなります。
この記事では、クイズ形式でコードを読む練習ができます。次の内容を順番に解説します。
- コードを読むときに意識する3つのポイント
- 初級〜中級の練習問題(全5問)
- コードを読む力を伸ばすための習慣
コードを読むときに意識する3つのポイント
コードを読むとき、最初からすべてを理解しようとすると混乱します。次の3つに絞って確認するだけで、意図がグッとつかみやすくなります。
- どのセル・範囲を対象にしているか:
Cells(行, 列)やRange("A1")の部分を確認する。 - 条件式が何を判定しているか:
Ifの後ろの式を日本語に置き換えて読む。 - 結果がどこに出力されるか:
.Value =や.Interior.Color =など、何かを「セットしている」行を探す。
この3点を意識しながら、以下の問題に取り組んでみましょう。
練習問題に取り組むには?
各問題は「コードを見て考える → 解説を読む」の流れで進めます。いきなり解説を読まず、まず自分なりに「このコードは何をしているか?」を言葉にしてみることが大切です。
練習1(初級):A列の入力チェック
Sub CheckNames()
Dim i As Long
For i = 2 To 11
If Cells(i, 1).Value = "" Then
Cells(i, 2).Value = "未入力"
Else
Cells(i, 2).Value = "入力済み"
End If
Next i
End Sub
質問:
- このコードはどんな目的で使われていそうですか?
- B列にはどんな値が表示されるでしょうか?
解説:
- 2行目から11行目のA列(1列目)を1行ずつチェックしています。
- A列が空欄(
"")なら B列に「未入力」、値があれば「入力済み」と表示します。 For i = 2 To 11:2行目〜11行目の10行分を繰り返す。Cells(i, 1):i行目のA列(1列目)。Cells(i, 2):i行目のB列(2列目)。
→ 「A列の入力状況を確認して、B列にステータスを表示するマクロ」です。
練習2(初級):C列の合計を計算する
Sub SumData()
Dim total As Double
Dim i As Long
total = 0
For i = 2 To 11
total = total + Cells(i, 3).Value
Next i
Range("D1").Value = total
End Sub
質問:
- どの列の値が対象ですか?
- 合計はどこに出力されるでしょうか?
解説:
Cells(i, 3)はC列(3列目)を指しています。2〜11行目の10行分です。total = total + Cells(i, 3).Value:ループのたびに合計に足し込んでいきます。- 最終的に
Range("D1").Value = totalでD1セルに合計を出力しています。
→ 「C列の2〜11行目を合計して、D1セルに表示するマクロ」です。
練習3(初級):80点以上のセルに色をつける
Sub HighlightScores()
Dim i As Long
For i = 2 To 11
If Cells(i, 2).Value >= 80 Then
Cells(i, 2).Interior.Color = RGB(200, 255, 200)
End If
Next i
End Sub
質問:
- どのような条件で色が変わりますか?
- 色が変わるのはどのセルですか?
解説:
Cells(i, 2).Value >= 80:B列の値が80以上のとき条件が成立します。Interior.Color = RGB(200, 255, 200):セルの背景を薄緑色に変えています。- 条件を満たさないセルは何も変わりません(
Elseがないため)。
→ 「B列の2〜11行目のうち、80以上の値のセルを薄緑で強調するマクロ」です。
練習4(中級):C列の最大値と行番号を見つける
Sub FindMax()
Dim i As Long
Dim maxVal As Double
Dim maxRow As Long
maxVal = 0
maxRow = 0
For i = 2 To 11
If Cells(i, 3).Value > maxVal Then
maxVal = Cells(i, 3).Value
maxRow = i
End If
Next i
MsgBox maxRow & "行目が最大値:" & maxVal
End Sub
質問:
- 最終的に何が表示されますか?
maxRowには何が入りますか?
解説:
- C列の2〜11行目を順番に確認しながら、
maxVal(最大値)とmaxRow(その行番号)を更新しています。 - ループのたびに「今見ている値が今までの最大より大きければ更新する」という処理です。
- 最後に
MsgBoxで「〇行目が最大値:〇〇」と表示します。 - 例えばC列の最大値が5行目の95だった場合、「5行目が最大値:95」と表示されます。
→ 「C列の中で一番大きい値と、その行番号をメッセージで表示するマクロ」です。
練習5(中級):条件に合う行を別シートへコピーする
Sub CopyFiltered()
Dim i As Long
Dim copyRow As Long
copyRow = 2
For i = 2 To 21
If Cells(i, 3).Value >= 60 Then
Sheets("合格者").Cells(copyRow, 1).Value = Cells(i, 1).Value
Sheets("合格者").Cells(copyRow, 2).Value = Cells(i, 2).Value
Sheets("合格者").Cells(copyRow, 3).Value = Cells(i, 3).Value
copyRow = copyRow + 1
End If
Next i
MsgBox "コピー完了:" & copyRow - 2 & "件"
End Sub
質問:
- どんな条件のデータがコピーされますか?
copyRow = copyRow + 1は何のために必要ですか?- 最後のメッセージには何が表示されますか?
解説:
Cells(i, 3).Value >= 60:C列(3列目)の値が60以上の行だけが対象です。- 条件を満たした行のA・B・C列の値を「合格者」シートにコピーしています。
copyRowはコピー先の行番号です。コピーするたびに1ずつ増やして、次の行に書き込めるようにしています。これがないと毎回同じ行に上書きされてしまいます。copyRow - 2:初期値が2なので、最終的なcopyRowから2を引くとコピーした件数になります。
→ 「元シートのC列が60以上の行を、合格者シートに抽出・コピーするマクロ」です。
コードを読む力を伸ばすには?
練習問題を解くだけでなく、日常の中で次の習慣を取り入れると読む力が早く身につきます。
- 自分で書いたコードにコメントをつける:「なぜこう書いたか」を残しておくと、後から読み返すときにも役立ちます。
- ステップイン(F8)で1行ずつ実行する:コードを眺めているだけでなく、実際に動かしながら変数の値を確認することで理解が深まります。
- 他人のコードを模写してから動かす:写経のようにコードを打ち込んで実行することで、構文のパターンが体に染み込みます。
- エラーが出たらメッセージを読む:VBAのエラーメッセージには原因が書かれています。翻訳しながら読む習慣をつけましょう。
まとめ
- コードを読むときは「対象セル」「条件式」「出力先」の3点に注目する。
- 練習1〜3(初級):For+If の基本パターン。入力チェック・集計・色付けは頻出。
- 練習4〜5(中級):変数を使った最大値検索・別シートへの条件抽出。実務でよく使う構造。
- 読む力を伸ばすには:コメントをつける・F8で動作確認・模写して実行の繰り返しが効果的。
FAQ
コードを読んでも意味がわからないときはどうすればいいですか?
わからない単語(例:Interior、RGB)をVBEの中でカーソルを合わせてF1キーを押すと、公式ヘルプが開きます。また、そのまま検索エンジンで「VBA ○○ とは」と調べると日本語の解説が多く見つかります。完全に理解しなくても「だいたいこういう処理」とつかめれば十分です。
Cells(i, 1) のiや1は何を意味しますか?
Cells(行番号, 列番号) という書き方です。Cells(2, 1) はA列2行目、Cells(3, 4) はD列3行目を指します。列番号はA=1、B=2、C=3…と対応しています。
For i = 2 To 11 の「2」や「11」はなぜその数字ですか?
1行目が見出し行の場合、データは2行目から始まります。「11」はデータが10行分(2〜11行目)あることを想定しています。実務では最終行を自動取得する Cells(Rows.Count, 1).End(xlUp).Row を使うと、データ量が変わっても対応できます。
コードを読む練習に良い素材はありますか?
最も効果的なのは「自分が実際に使うマクロ」です。マクロの記録機能で操作を記録すると自動でコードが生成されるので、それを読み解く練習から始めるのがおすすめです。最初は長くて読みにくいコードでも、繰り返し読んでいくうちにパターンが見えてきます。
ステップイン(F8)はどうやって使いますか?
VBE(Alt+F11)を開き、確認したいSubプロシージャの中にカーソルを置いてからF8キーを押します。1回押すごとに1行ずつ実行され、変数の値はカーソルをあてると確認できます。どの行でどの値が変化しているかを目で追えるので、理解が一気に深まります。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



