「バグ修正(間違い探し)」形式の練習問題を用意しました。
初心者がつまずきやすい 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は「冗長コードを改善」
- 実務では「無限ループ」「型不一致」「範囲外アクセス」が特に多いバグ。
