「セル検索 → 値を置き換える」を While…Wend で書くサンプルです。実務では Find を使う方が効率的ですが、学習用に「While…Wendで順番にセルを調べていく」方法を紹介します。
シナリオ
- A列に商品コード
- B列に在庫数
- 特定の商品コードを探して、在庫数を新しい値に置き換える
サンプルコード(While…Wend版)
Sub 在庫更新_WhileWend()
Dim ws As Worksheet
Dim targetCode As String
Dim newStock As Long
Dim row As Long
Set ws = ThisWorkbook.Sheets("在庫表")
targetCode = "P001" ' 更新したい商品コード
newStock = 50 ' 新しい在庫数
row = 1
' A列のセルを上から順にチェック
While ws.Cells(row, 1).Value <> ""
If ws.Cells(row, 1).Value = targetCode Then
ws.Cells(row, 2).Value = newStock
MsgBox "商品コード " & targetCode & " の在庫を " & newStock & " に更新しました。"
Exit Sub ' 見つかったら終了
End If
row = row + 1
Wend
MsgBox "商品コード " & targetCode & " は見つかりませんでした。"
End Sub
VB解説
row = 1からスタートし、A列を1行ずつチェック。While ws.Cells(row, 1).Value <> ""→ 空セルに出会うまで繰り返す。- 一致したらB列の値を更新し、
Exit Subで処理を終了。 - 見つからなければ最後に「見つかりません」と表示。
応用例:複数更新(発注リスト反映)
「発注リスト」シートに商品コードと追加数があり、それを「在庫表」に反映する例です。
Sub 発注反映_WhileWend()
Dim wsStock As Worksheet
Dim wsOrder As Worksheet
Dim orderRow As Long
Dim stockRow As Long
Set wsStock = ThisWorkbook.Sheets("在庫表")
Set wsOrder = ThisWorkbook.Sheets("発注リスト")
orderRow = 2 ' 発注リストは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 = 1
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
MsgBox "発注リストを在庫表に反映しました。"
End Sub
VB✅ ポイント
- While…Wendは「空セルまで順番に調べる」処理に向いている。
- 実務では
Findの方が高速だが、While…Wendは「繰り返し処理の基本」を理解する練習に最適。 - 在庫管理風の処理では「一致したら更新」「なければ追加」という流れがよく使われる。
