Excel VBA | VBAの基本構文・ループ・条件分岐・変数宣言 などを題材に「バグ修正(間違い探し)」形式の練習問題

VBA
スポンサーリンク

「バグ修正(間違い探し)」形式の練習問題を用意しました。
初心者がつまずきやすい VBAの基本構文・ループ・条件分岐・変数宣言 などを題材にしています。
各問題は「間違ったコード例」を提示するので、どこがバグかを探して修正してください。


1. 変数宣言の間違い

Sub Sample1()
    Dim i As Integer
    i = "10"   ' ← バグ
    Debug.Print i
End Sub
VB

👉 文字列 "10" を代入している。修正方法は?


2. Whileループの無限ループ

Sub Sample2()
    Dim n As Integer
    n = 1
    While n < 5
        Debug.Print n
        ' nを増やしていない ← バグ
    Wend
End Sub
VB

👉 どこを直せば無限ループを防げる?


3. If文の条件式

Sub Sample3()
    Dim score As Integer
    score = 80
    If score = 80 Then
        Debug.Print "合格"
    ElseIf score = 60 Then
        Debug.Print "補習"
    Else
        Debug.Print "不合格"
    End If
End Sub
VB

👉 「80点以上なら合格」にしたいのに「=80」になっている。どう直す?


4. Forループの範囲

Sub Sample4()
    Dim i As Integer
    For i = 1 To 10 Step -1   ' ← バグ
        Debug.Print i
    Next i
End Sub
VB

👉 Stepの符号が逆。どう修正?


5. 文字列結合の間違い

Sub Sample5()
    Dim name As String
    name = "Tanaka"
    Debug.Print "Hello" + name   ' ← バグ
End Sub
VB

👉 VBAでは文字列結合は「+」ではなく?


6. セル参照の間違い

Sub Sample6()
    Cells(1, "A").Value = "テスト"   ' ← バグ
End Sub
VB

👉 Cells の引数はどう直す?


7. Exitの使い方

Sub Sample7()
    Dim i As Integer
    For i = 1 To 10
        If i = 5 Then
            Exit For
        End If
        Debug.Print i
    Next i
    Exit For   ' ← バグ
End Sub
VB

👉 最後の Exit For は不要。どう修正?


8. Do Loopの条件

Sub Sample8()
    Dim i As Integer
    i = 1
    Do Until i = 5
        Debug.Print i
        i = i + 1
    Loop
End Sub
VB

👉 「5になるまで」と書いているが、実際はどう動く?修正方法は?


9. Len関数の使い方

Sub Sample9()
    Dim s As String
    s = "ABC"
    If Len(s) = 3 Then
        Debug.Print "文字数は3"
    Else
        Debug.Print "違う"
    End If
End Sub
VB

👉 このコードは正しいが、Len の戻り値は数値。初心者が「文字列」と勘違いしやすい。どう説明する?


10. MsgBoxの引数

Sub Sample10()
    MsgBox "完了しました", vbYesNo   ' ← バグ
End Sub
VB

👉 MsgBox の戻り値を受け取らないと意味がない。どう修正?


11. 変数の型不一致

Sub Sample11()
    Dim flag As Boolean
    flag = "True"   ' ← バグ
    Debug.Print flag
End Sub
VB

👉 Boolean型に文字列を代入している。どう直す?


12. 配列の範囲

Sub Sample12()
    Dim arr(1 To 5) As Integer
    arr(0) = 10   ' ← バグ
End Sub
VB

👉 配列の範囲外アクセス。どう修正?


13. Exit Doの位置

Sub Sample13()
    Dim i As Integer
    i = 1
    Do While i <= 10
        If i = 5 Then
            Exit Do
        End If
        Debug.Print i
        i = i + 1
    Loop
    Exit Do   ' ← バグ
End Sub
VB

👉 最後の Exit Do は不要。どう修正?


14. 文字列比較の大文字小文字

Sub Sample14()
    Dim s As String
    s = "abc"
    If s = "ABC" Then
        Debug.Print "一致"
    End If
End Sub
VB

👉 VBAは既定で大文字小文字を区別しない。もし区別したいなら?


15. Worksheet参照

Sub Sample15()
    Worksheets("Sheet1").Cells(1, 1) = "テスト"
    Worksheets("Sheet2").Cells(1, 1) = "OK"
    Worksheets("Sheet3").Cells(1, 1) = "NG"
    Worksheets("Sheet4").Cells(1, 1) = "NG"
    Worksheets("Sheet5").Cells(1, 1) = "NG"
    Worksheets("Sheet6").Cells(1, 1) = "NG"
    Worksheets("Sheet7").Cells(1, 1) = "NG"
    Worksheets("Sheet8").Cells(1, 1) = "NG"
    Worksheets("Sheet9").Cells(1, 1) = "NG"
    Worksheets("Sheet10").Cells(1, 1) = "NG"
    Worksheets("Sheet11").Cells(1, 1) = "NG"
    Worksheets("Sheet12").Cells(1, 1) = "NG"
    Worksheets("Sheet13").Cells(1, 1) = "NG"
    Worksheets("Sheet14").Cells(1, 1) = "NG"
    Worksheets("Sheet15").Cells(1, 1) = "NG"
    Worksheets("Sheet16").Cells(1, 1) = "NG"
    Worksheets("Sheet17").Cells(1, 1) = "NG"
    Worksheets("Sheet18").Cells(1, 1) = "NG"
    Worksheets("Sheet19").Cells(1, 1) = "NG"
    Worksheets("Sheet20").Cells(1, 1) = "NG"
End Sub
VB

👉 これはバグではないが、冗長。どうループで書き換える?


✅ まとめ

  • 1〜14は「構文の間違い探し」
  • 15は「冗長コードを改善」
  • 実務では「無限ループ」「型不一致」「範囲外アクセス」が特に多いバグ。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました