「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が推奨される。

