このページで解説している内容は、以下の 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 Function6.4. 現実的な範囲チェックの例
| 項目 | 受け取り単位 | 推奨範囲例 | メッセージ例 |
|---|---|---|---|
| 身長 | cm | 80~250 | 「身長は 80~250 の範囲で入力してください。」 |
| 体重 | kg | 20~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 Class6.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/65 | BMI=22.5、判定「標準」、緑系の色 |
| 160/45 | BMI=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 計算・表示処理をサブルーチン/関数へ分割し、再利用性とテスト容易性をさらに高めます。準備ができたら続けましょう(⑦へ)。
