VBAのコードを読む練習(初級〜中級)|クイズ形式で読解力を身につける

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

コードを読んでも意味がわからないときはどうすればいいですか?

わからない単語(例:InteriorRGB)を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(AltF11)を開き、確認したいSubプロシージャの中にカーソルを置いてからF8キーを押します。1回押すごとに1行ずつ実行され、変数の値はカーソルをあてると確認できます。どの行でどの値が変化しているかを目で追えるので、理解が一気に深まります。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

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

上部へスクロール