このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【6日でできるVisual Basic2022入門】⑥分岐条件を使う方法

⑥分岐条件を使う方法

 今回は「⑥ 分岐条件を使う方法」です。入力の妥当性チェック(空・数値・範囲)、BMI 判定の分岐、UI 表示の出し分けまでを段階的に整理します。

6.分岐条件を使う方法

6.1. 何に対して分岐するか(全体像)

分岐対象代表条件動作例
空入力文字列が空/空白エラー表示、該当欄へフォーカス
数値判定Double.TryParse で失敗「半角の数字で入力してください。」
値域判定身長 80–250cm、体重 20–300kg など範囲外なら警告して再入力
計算可否0 以下や NaN早期リターン
BMI 判定<18.5 / <25 / <30 / それ以外判定メッセージとラベル色を切替

6.2. If~Then~Else の基本パターン(早期リターン型)

「条件が満たせないならすぐ戻る」=ガード節を重ねると読みやすくなります。

If String.IsNullOrWhiteSpace(HeightTextBox.Text) Then
    MessageBox.Show("身長を入力してください。", "入力エラー")
    HeightTextBox.Focus() : HeightTextBox.SelectAll()
    Exit Sub
End If

ポイント

  • AndAlso / OrElse を使うと不要な評価を避けられます(短絡評価)。
  • 入力検証→範囲検証→計算→出力の順に If を重ね、失敗時は Exit Sub

6.3. Select Case で BMI 判定を分かりやすく

BMI のカテゴリー分岐は Select Case が読みやすいです。

Private Function GetBmiCategory(bmi As Double) As String
    Select Case bmi
        Case < 18.5 : Return "やせ気味です。体調管理に注意しましょう。"
        Case < 25.0 : Return "標準です。現在の生活リズムを維持しましょう。"
        Case < 30.0 : Return "やや高めです。食事と運動のバランスを意識しましょう。"
        Case Else    : Return "高めです。専門家への相談を検討してください。"
    End Select
End Function

色の切替も同様に書けます。

Private Function GetBmiColor(bmi As Double) As Color
    Select Case bmi
        Case < 18.5 : Return Color.SteelBlue
        Case < 25.0 : Return Color.ForestGreen
        Case < 30.0 : Return Color.DarkOrange
        Case Else   : Return Color.Crimson
    End Select
End Function

6.4. 現実的な範囲チェックの例

項目受け取り単位推奨範囲例メッセージ例
身長cm80~250「身長は 80~250 の範囲で入力してください。」
体重kg20~300「体重は 20~300 の範囲で入力してください。」

6.5. まとめて使える実装(クリック時処理の完成版)

前章の CalcButton_Click を、空/数値/範囲/計算/出力の分岐込みで仕上げます。

Option Strict On
Option Infer On

Imports System.Drawing

Public Class MainForm

    Private Sub CalcButton_Click(sender As Object, e As EventArgs) Handles CalcButton.Click
        ' 1) 空・数値・範囲の分岐(ガード節)
        Dim heightCm As Double
        Dim weightKg As Double

        If Not TryReadPositiveInRange(HeightTextBox, "身長(cm)", 80, 250, heightCm) Then Exit Sub
        If Not TryReadPositiveInRange(WeightTextBox, "体重(kg)", 20, 300, weightKg) Then Exit Sub

        ' 2) BMI 計算(cm → m)
        Dim h As Double = heightCm / 100.0
        If h <= 0 Then
            MessageBox.Show("身長は 0 より大きい値を入力してください。", "入力エラー")
            Exit Sub
        End If

        Dim bmi As Double = weightKg / (h * h)
        If Double.IsNaN(bmi) OrElse Double.IsInfinity(bmi) Then
            MessageBox.Show("計算できませんでした。入力値を確認してください。", "計算エラー")
            Exit Sub
        End If

        ' 3) 表示(数値整形+判定メッセージ+色)
        Dim bmiRounded = Math.Round(bmi, 1, MidpointRounding.AwayFromZero)
        BmiTextBox.Text = bmiRounded.ToString("0.0")

        Dim msg = GetBmiCategory(bmiRounded)
        ResultLabel.Text = msg
        ResultLabel.ForeColor = GetBmiColor(bmiRounded)
    End Sub

    ' 入力 TextBox の分岐チェック:空 → 数値 → 範囲
    Private Function TryReadPositiveInRange(tb As TextBox, fieldName As String,
                                            minValue As Double, maxValue As Double,
                                            ByRef result As Double) As Boolean
        Dim raw = tb.Text.Trim()

        If String.IsNullOrWhiteSpace(raw) Then
            MessageBox.Show($"{fieldName} を入力してください。", "入力エラー")
            tb.Focus() : tb.SelectAll()
            Return False
        End If

        If Not Double.TryParse(raw, result) Then
            MessageBox.Show($"{fieldName} は半角の数字で入力してください。", "入力エラー")
            tb.Focus() : tb.SelectAll()
            Return False
        End If

        If result < minValue OrElse result > maxValue Then
            MessageBox.Show($"{fieldName} は {minValue} ~ {maxValue} の範囲で入力してください。", "範囲エラー")
            tb.Focus() : tb.SelectAll()
            Return False
        End If

        Return True
    End Function

    Private Function GetBmiCategory(bmi As Double) As String
        Select Case bmi
            Case < 18.5 : Return "やせ気味です。体調管理に注意しましょう。"
            Case < 25.0 : Return "標準です。現在の生活リズムを維持しましょう。"
            Case < 30.0 : Return "やや高めです。食事と運動のバランスを意識しましょう。"
            Case Else    : Return "高めです。専門家への相談を検討してください。"
        End Select
    End Function

    Private Function GetBmiColor(bmi As Double) As Color
        Select Case bmi
            Case < 18.5 : Return Color.SteelBlue
            Case < 25.0 : Return Color.ForestGreen
            Case < 30.0 : Return Color.DarkOrange
            Case Else   : Return Color.Crimson
        End Select
    End Function

End Class

6.6. 分岐の書き分け指針

シーン推奨構文理由
入力検証(可否)If … Then Exit Sub を連ねるガード節で上から順に排除、読みやすい
多段の区間分類Select Case境界が明確で可読性が高い
複合条件AndAlso / OrElse短絡評価で安全かつ効率的
範囲外の扱いIf x < min OrElse x > max Then単純・明瞭

6.7. 動作確認の観点(テスト観点表)

入力期待結果
身長=空「身長(cm) を入力してください。」と案内、身長欄にフォーカス
体重=全角数字「半角の数字で入力してください。」
身長=50「80~250 の範囲で…」
体重=350「20~300 の範囲で…」
170/65BMI=22.5、判定「標準」、緑系の色
160/45BMI=17.6、判定「やせ気味」、青系の色

6.8. この章で登場した Visual Basic 2022 の命令・構文メモ

命令/構文説明ミニ例
If … Then … Else条件分岐の基本If x <= 0 Then Exit Sub
Select Case区間分岐の定番Select Case bmi : Case < 18.5 …
AndAlso / OrElse短絡評価の論理演算子If ok AndAlso x>0 Then …
String.IsNullOrWhiteSpace空白含む空判定If String.IsNullOrWhiteSpace(s)
Double.TryParse例外なし数値変換If Not Double.TryParse(t, v) Then …

まとめ

  • 分岐は「入力検証 → 範囲検証 → 計算 → 表示」の順にガード節で積むと堅牢で読みやすい。
  • BMI のカテゴリー分岐は Select Case が簡潔で保守しやすい。
  • UI メッセージはで具体的に、色などの視覚情報も併用すると理解が早い。

 次章「⑦ サブルーティンを使う方法」では、入力検証・BMI 計算・表示処理をサブルーチン/関数へ分割し、再利用性とテスト容易性をさらに高めます。準備ができたら続けましょう(⑦へ)。