VB.NETの制御構造でよくあるエラーと解決策を徹底解説
先生と生徒の会話形式で理解しよう
生徒
「VB.NETでプログラムを書いていると、よくエラーになってしまいます。どうしてでしょうか?」
先生
「エラーの多くは制御構造の書き方や条件式の間違いが原因です。ここでは初心者がつまずきやすいエラーとその解決策を具体例とともに解説します。」
生徒
「例えばどんなエラーがありますか?」
先生
「代表的なのは、If文のEnd Ifの抜けや条件式の書き方、ループでの無限ループなどです。順番に見ていきましょう。」
1. If文の書き方でよくあるエラー
VB.NETのIf文では、条件に応じた処理を分岐させます。しかしEnd Ifを忘れるとコンパイルエラーになります。
Dim a As Integer = 5
If a > 3 Then
Console.WriteLine("3より大きい")
'End If を忘れるとエラー
エラー: End If がありません
解決策は必ずIf文をEnd Ifで閉じることです。
If a > 3 Then
Console.WriteLine("3より大きい")
End If
2. 条件式の書き方のミス
条件式で等号や比較演算子を間違えることもあります。初心者に多いのは=と==の混同です。
Dim b As Integer = 10
If b == 10 Then 'VB.NETでは==ではなく=
Console.WriteLine("10です")
End If
エラー: 演算子が正しくありません
VB.NETでは比較は=を使います。
If b = 10 Then
Console.WriteLine("10です")
End If
3. ループ処理での無限ループ
ループ処理では、条件を正しく設定しないと無限ループになります。例えば:
Dim i As Integer = 0
While i < 5
Console.WriteLine(i)
'i を増やさないと無限ループ
End While
0
0
0
...
解決策はループ内で変数を更新することです。
While i < 5
Console.WriteLine(i)
i += 1 '必ずカウンタを増やす
End While
4. Select Caseでの範囲指定ミス
VB.NETのSelect Caseで範囲を指定するときも注意が必要です。
Dim score As Integer = 85
Select Case score
Case 90 To 100
Console.WriteLine("A")
Case 80 To 89
Console.WriteLine("B")
Case Else
Console.WriteLine("その他")
End Select
範囲が重複していると、思わぬ結果になることがあります。重複や範囲外に注意しましょう。
5. 変数初期化の忘れ
条件分岐で使う変数を初期化していないと、実行時エラーになります。
Dim flag As Boolean
If flag Then
Console.WriteLine("Trueです")
End If
ブール型は初期値がFalseですが、数値や文字列は初期化していないとエラーになります。必ず宣言時に初期値を設定しましょう。
Dim count As Integer = 0
If count > 0 Then
Console.WriteLine("0より大きい")
End If
6. よくあるエラーと解決のポイントまとめ
- End Ifの忘れ → 必ず
If文はEnd Ifで閉じる - 比較演算子の間違い → VB.NETでは
=を使う - ループ無限ループ → カウンタや条件更新を忘れない
- Select Caseの範囲指定ミス → 範囲や重複に注意
- 変数初期化忘れ → 使用前に必ず初期値を設定
VB.NETの制御構造は正しく書けば強力ですが、初めはエラーが多く出ます。エラー内容を確認して、原因に応じて修正する習慣をつけることが重要です。