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

VBA
スポンサーリンク

では先ほどの「バグ修正(間違い探し)」問題の 修正版コード例 を提示します。
それぞれのバグを直した正しいコードを示します。

修正版コード例

1. 変数宣言の間違い

Sub Sample1_Fixed()
    Dim i As Integer
    i = 10   ' 数値を代入
    Debug.Print i
End Sub
VB

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

Sub Sample2_Fixed()
    Dim n As Integer
    n = 1
    While n < 5
        Debug.Print n
        n = n + 1   ' ループ変数を更新
    Wend
End Sub
VB

3. 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
VB

4. Forループの範囲

Sub Sample4_Fixed()
    Dim i As Integer
    For i = 10 To 1 Step -1   ' Stepと範囲を一致させる
        Debug.Print i
    Next i
End Sub
VB

5. 文字列結合の間違い

Sub Sample5_Fixed()
    Dim name As String
    name = "Tanaka"
    Debug.Print "Hello" & name   ' & で文字列結合
End Sub
VB

6. セル参照の間違い

Sub Sample6_Fixed()
    Cells(1, 1).Value = "テスト"   ' 列番号は数値で指定
End Sub
VB

7. 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
VB

8. 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
VB

9. 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
VB

11. 変数の型不一致

Sub Sample11_Fixed()
    Dim flag As Boolean
    flag = True   ' Boolean型はTrue/Falseを直接代入
    Debug.Print flag
End Sub
VB

12. 配列の範囲

Sub Sample12_Fixed()
    Dim arr(1 To 5) As Integer
    arr(1) = 10   ' 範囲内の要素を使う
End Sub
VB

13. 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
VB

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

Sub Sample14_Fixed()
    Dim s As String
    s = "abc"
    If StrComp(s, "ABC", vbBinaryCompare) = 0 Then
        Debug.Print "一致(大文字小文字区別あり)"
    End If
End Sub
VB

15. 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ループで簡潔に
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました