では先ほどの「バグ修正(間違い探し)」問題の 修正版コード例 を提示します。
それぞれのバグを直した正しいコードを示します。
修正版コード例
1. 変数宣言の間違い
Sub Sample1_Fixed()
Dim i As Integer
i = 10 ' 数値を代入
Debug.Print i
End Sub
VB2. Whileループの無限ループ
Sub Sample2_Fixed()
Dim n As Integer
n = 1
While n < 5
Debug.Print n
n = n + 1 ' ループ変数を更新
Wend
End Sub
VB3. If文の条件式
Sub Sample3_Fixed()
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
VB4. Forループの範囲
Sub Sample4_Fixed()
Dim i As Integer
For i = 10 To 1 Step -1 ' Stepと範囲を一致させる
Debug.Print i
Next i
End Sub
VB5. 文字列結合の間違い
Sub Sample5_Fixed()
Dim name As String
name = "Tanaka"
Debug.Print "Hello" & name ' & で文字列結合
End Sub
VB6. セル参照の間違い
Sub Sample6_Fixed()
Cells(1, 1).Value = "テスト" ' 列番号は数値で指定
End Sub
VB7. Exitの使い方
Sub Sample7_Fixed()
Dim i As Integer
For i = 1 To 10
If i = 5 Then
Exit For
End If
Debug.Print i
Next i
End Sub
VB8. Do Loopの条件
Sub Sample8_Fixed()
Dim i As Integer
i = 1
Do While i < 5 ' 5未満の間繰り返す
Debug.Print i
i = i + 1
Loop
End Sub
VB9. Len関数の使い方
Sub Sample9_Fixed()
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_Fixed()
Dim ans As VbMsgBoxResult
ans = MsgBox("完了しました", vbYesNo)
If ans = vbYes Then
Debug.Print "Yesが選ばれました"
Else
Debug.Print "Noが選ばれました"
End If
End Sub
VB11. 変数の型不一致
Sub Sample11_Fixed()
Dim flag As Boolean
flag = True ' Boolean型はTrue/Falseを直接代入
Debug.Print flag
End Sub
VB12. 配列の範囲
Sub Sample12_Fixed()
Dim arr(1 To 5) As Integer
arr(1) = 10 ' 範囲内の要素を使う
End Sub
VB13. Exit Doの位置
Sub Sample13_Fixed()
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
End Sub
VB14. 文字列比較の大文字小文字
Sub Sample14_Fixed()
Dim s As String
s = "abc"
If StrComp(s, "ABC", vbBinaryCompare) = 0 Then
Debug.Print "一致(大文字小文字区別あり)"
End If
End Sub
VB15. Worksheet参照(冗長コード改善)
Sub Sample15_Fixed()
Dim i As Integer
For i = 1 To 20
Worksheets("Sheet" & i).Cells(1, 1).Value = "NG"
Next i
Worksheets("Sheet1").Cells(1, 1).Value = "テスト"
Worksheets("Sheet2").Cells(1, 1).Value = "OK"
End Sub
VB✅ まとめ
- 型の不一致 → 数値/文字列/Booleanを正しく扱う
- ループの更新忘れ → 無限ループ防止
- 条件式の誤り →
=と>=の違いに注意 - 冗長コード → Forループで簡潔に
