Excel VBA | Exit文

VBA
スポンサーリンク

在庫チェック編

問題1:在庫切れで処理を止める

模範解答

Sub StockCheck1()
    Dim rowNo As Long
    rowNo = 1

    Do While Cells(rowNo, 1).Value <> ""   ' 商品名が空でない間繰り返す
        If Cells(rowNo, 2).Value = 0 Then  ' 在庫数が0なら
            MsgBox "在庫切れ商品: " & Cells(rowNo, 1).Value & "(行 " & rowNo & ")"
            Exit Do                        ' ループ終了
        End If
        rowNo = rowNo + 1
    Loop
End Sub
VB

解説

  • 在庫数が0の商品を見つけたら即終了。
  • Exit Do により「最初の在庫切れ商品」だけを報告できる。

問題2:在庫合計が閾値を超えたら終了

模範解答

Sub StockCheck2()
    Dim rowNo As Long, total As Long
    rowNo = 1
    total = 0

    Do While Cells(rowNo, 2).Value <> ""
        total = total + Cells(rowNo, 2).Value
        If total > 500 Then
            MsgBox "在庫合計が500を超えました! 行 " & rowNo & " で停止。合計: " & total
            Exit Do
        End If
        rowNo = rowNo + 1
    Loop
End Sub
VB

解説

  • 合計を更新した直後にチェック。
  • 閾値を超えた瞬間に処理を止めるので「超えた直後の状態」がわかる。

問題3:特定商品を見つけたら終了

模範解答

Sub StockCheck3()
    Dim i As Long

    For i = 1 To 100
        If Cells(i, 1).Value = "ノートPC" Then
            MsgBox "ノートPCを発見! 行番号: " & i
            Exit For
        End If
    Next i
End Sub
VB

解説

  • 範囲が決まっているので For〜Next が適切。
  • 最初に見つけた時点で Exit For → 無駄な探索をしない。

名簿整形編

問題4:最初の空欄を見つけたら終了

模範解答

Sub NameList1()
    Dim i As Long

    For i = 1 To 50
        If Cells(i, 3).Value = "" Then
            MsgBox "最初の空欄は " & i & " 行目です"
            Exit For
        End If
    Next i
End Sub
VB

解説

  • 名簿の「最初の空欄」を探す典型例。
  • Exit For により「最初の一致」だけを報告できる。

問題5:重複を見つけたら終了

模範解答

Sub NameList2()
    Dim i As Long, j As Long
    Dim found As Boolean

    found = False

    For i = 1 To 50
        For j = i + 1 To 50
            If Cells(i, 3).Value <> "" And Cells(i, 3).Value = Cells(j, 3).Value Then
                MsgBox "重複発見! 名前: " & Cells(i, 3).Value & " 行: " & i & " と " & j
                found = True
                Exit For   ' 内側ループ終了
            End If
        Next j
        If found Then Exit For ' 外側ループも終了
    Next i
End Sub
VB

解説

  • 二重ループで比較。
  • 内側で見つけたら Exit For → 外側もフラグで終了。
  • 「最初の重複」だけを報告できる。

問題6:条件付き終了(部署ごと)

模範解答

Sub NameList3()
    Dim r As Long, c As Long
    Dim found As Boolean

    found = False

    For r = 1 To 50
        If Cells(r, 1).Value = "営業" Then   ' 部署が営業なら
            If Cells(r, 2).Value = "田中" Then
                MsgBox "営業部で田中さんを発見! 行: " & r
                found = True
                Exit For
            End If
        End If
    Next r
End Sub
VB

解説

  • 部署条件を満たした上で氏名をチェック。
  • 見つけたら即終了 → 無駄な探索をしない。

総まとめ

  • Exit Do → データが「終わりまで続く」処理に便利(在庫合計など)。
  • Exit For → 範囲が決まっている処理に便利(名簿検索など)。
  • ネスト+フラグ → 二重ループを一気に抜けたいときに必須。

👉 この模範解答を実際に動かすと「Exit文で処理を途中で止める」感覚がつかめます。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました