Excel VBA | 「While…Wend文」を使った実務寄りの練習問題

VBA
スポンサーリンク

「While…Wend文」を使った実務寄りの練習問題をいくつか用意しました。単なる数値の繰り返しではなく、在庫管理・名簿処理・データ検証など、現場でありがちなシナリオを題材にしています。

在庫管理系

問題1: 在庫数が0以下の商品に「要発注」と記録

在庫数が 0以下 の商品をすべて探し、C列に「要発注」と書き込むプログラムをWhile…Wendで作りなさい。

Sub 在庫チェック()
    Dim row As Long
    row = 2   ' 見出し行を除いて2行目から開始
    
    While Cells(row, 1).Value <> ""
        If Cells(row, 2).Value <= 0 Then
            Cells(row, 3).Value = "要発注"
        End If
        row = row + 1
    Wend
End Sub
VB

問題2: 発注リストを在庫表に反映(加算 or 新規追加)

在庫表のA列を上から順に検索し、同じ商品コードがあれば在庫数を加算、なければ新しい行を追加する処理をWhile…Wendで書きなさい。

Sub 発注反映()
    Dim wsStock As Worksheet
    Dim wsOrder As Worksheet
    Dim orderRow As Long
    Dim stockRow As Long
    
    Set wsStock = Sheets("在庫表")
    Set wsOrder = Sheets("発注リスト")
    
    orderRow = 2
    While wsOrder.Cells(orderRow, 1).Value <> ""
        Dim code As String
        Dim qty As Long
        code = wsOrder.Cells(orderRow, 1).Value
        qty = wsOrder.Cells(orderRow, 2).Value
        
        stockRow = 2
        While wsStock.Cells(stockRow, 1).Value <> ""
            If wsStock.Cells(stockRow, 1).Value = code Then
                wsStock.Cells(stockRow, 2).Value = wsStock.Cells(stockRow, 2).Value + qty
                Exit While
            End If
            stockRow = stockRow + 1
        Wend
        
        ' 見つからなければ新規追加
        If wsStock.Cells(stockRow, 1).Value = "" Then
            wsStock.Cells(stockRow, 1).Value = code
            wsStock.Cells(stockRow, 2).Value = qty
        End If
        
        orderRow = orderRow + 1
    Wend
End Sub
VB

名簿処理系

問題3: 20歳未満に「未成年」と記録

年齢が 20歳未満 の人を探し、C列に「未成年」と書き込む処理をWhile…Wendで作りなさい。

Sub 未成年チェック()
    Dim row As Long
    row = 2
    
    While Cells(row, 1).Value <> ""
        If Cells(row, 2).Value < 20 Then
            Cells(row, 3).Value = "未成年"
        End If
        row = row + 1
    Wend
End Sub
VB

問題4: 部署名が空欄なら「部署未登録」と記録

部署名が空欄の人を探し、C列に「部署未登録」と書き込む処理をWhile…Wendで作りなさい。

Sub 部署チェック()
    Dim row As Long
    row = 2
    
    While Cells(row, 1).Value <> ""
        If Cells(row, 2).Value = "" Then
            Cells(row, 3).Value = "部署未登録"
        End If
        row = row + 1
    Wend
End Sub
VB

データ検証系

問題5: 売上金額が負なら「エラー」と記録

金額が 負の値 の行を探し、C列に「エラー」と記録するプログラムをWhile…Wendで作りなさい。

Sub 売上検証()
    Dim row As Long
    row = 2
    
    While Cells(row, 1).Value <> ""
        If Cells(row, 2).Value < 0 Then
            Cells(row, 3).Value = "エラー"
        End If
        row = row + 1
    Wend
End Sub
VB

問題6: メールアドレスに「@」がなければ「不正」と記録

「@」を含まないメールアドレスを探し、B列に「不正」と記録する処理をWhile…Wendで作りなさい。

Sub メール検証()
    Dim row As Long
    row = 2
    
    While Cells(row, 1).Value <> ""
        If InStr(Cells(row, 1).Value, "@") = 0 Then
            Cells(row, 2).Value = "不正"
        End If
        row = row + 1
    Wend
End Sub
VB

✅ 総まとめ

  • 在庫管理: 在庫不足や発注反映に活用
  • 名簿処理: 年齢や部署のチェックに活用
  • データ検証: 売上やメールアドレスの妥当性チェックに活用
  • ポイント: While…Wendは「空セルまで順番に処理」する場面で便利。ただし柔軟性はDo…Loopの方が高いので、実務ではDo…Loopが推奨される。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました