了解です!ここでは 在庫管理や売上処理でよくあるバグ を例に挙げて、修正版コードと解説をまとめます。実務でありがちな「間違い探し」形式です。
よくあるバグと修正例
1. 在庫更新で商品コードが見つからない
バグ例
Sub 在庫更新_Bug()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("在庫表")
Dim code As String
code = "P001"
' Findで検索
Dim rng As Range
Set rng = ws.Range("A:A").Find(code)
' 見つからない場合の処理がない ← バグ
ws.Cells(rng.Row, 2).Value = 50
End Sub
VB修正版
Sub 在庫更新_Fixed()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("在庫表")
Dim code As String
code = "P001"
Dim rng As Range
Set rng = ws.Range("A:A").Find(What:=code, LookAt:=xlWhole)
If Not rng Is Nothing Then
ws.Cells(rng.Row, 2).Value = 50
Else
MsgBox "商品コード " & code & " は見つかりませんでした。"
End If
End Sub
VB👉 修正ポイント: 検索結果がNothingの場合を必ずチェック。
2. 売上処理で在庫がマイナスになる
バグ例
Sub 売上処理_Bug()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("在庫表")
Dim code As String
code = "P002"
Dim qty As Long
qty = 10
Dim rng As Range
Set rng = ws.Range("A:A").Find(What:=code, LookAt:=xlWhole)
ws.Cells(rng.Row, 2).Value = ws.Cells(rng.Row, 2).Value - qty
' 在庫がマイナスになる可能性あり ← バグ
End Sub
VB修正版
Sub 売上処理_Fixed()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("在庫表")
Dim code As String
code = "P002"
Dim qty As Long
qty = 10
Dim rng As Range
Set rng = ws.Range("A:A").Find(What:=code, LookAt:=xlWhole)
If Not rng Is Nothing Then
Dim currentStock As Long
currentStock = ws.Cells(rng.Row, 2).Value
If currentStock >= qty Then
ws.Cells(rng.Row, 2).Value = currentStock - qty
Else
MsgBox "在庫不足: " & code & " の在庫は " & currentStock & " 個しかありません。"
End If
Else
MsgBox "商品コード " & code & " は見つかりませんでした。"
End If
End Sub
VB👉 修正ポイント: 在庫数が足りない場合はエラーを出す。
3. 発注リスト反映で新商品が追加されない
バグ例
Sub 発注反映_Bug()
Dim wsStock As Worksheet
Dim wsOrder As Worksheet
Set wsStock = Sheets("在庫表")
Set wsOrder = Sheets("発注リスト")
Dim i As Long
For i = 2 To wsOrder.Cells(Rows.Count, 1).End(xlUp).Row
Dim code As String
code = wsOrder.Cells(i, 1).Value
Dim qty As Long
qty = wsOrder.Cells(i, 2).Value
Dim rng As Range
Set rng = wsStock.Range("A:A").Find(code)
' 見つからない場合の処理がない ← バグ
wsStock.Cells(rng.Row, 2).Value = wsStock.Cells(rng.Row, 2).Value + qty
Next i
End Sub
VB修正版
Sub 発注反映_Fixed()
Dim wsStock As Worksheet
Dim wsOrder As Worksheet
Set wsStock = Sheets("在庫表")
Set wsOrder = Sheets("発注リスト")
Dim i As Long
For i = 2 To wsOrder.Cells(Rows.Count, 1).End(xlUp).Row
Dim code As String
code = wsOrder.Cells(i, 1).Value
Dim qty As Long
qty = wsOrder.Cells(i, 2).Value
Dim rng As Range
Set rng = wsStock.Range("A:A").Find(What:=code, LookAt:=xlWhole)
If Not rng Is Nothing Then
wsStock.Cells(rng.Row, 2).Value = wsStock.Cells(rng.Row, 2).Value + qty
Else
Dim newRow As Long
newRow = wsStock.Cells(Rows.Count, 1).End(xlUp).Row + 1
wsStock.Cells(newRow, 1).Value = code
wsStock.Cells(newRow, 2).Value = qty
End If
Next i
End Sub
VB👉 修正ポイント: 新商品は在庫表に追加する処理を入れる。
✅ 実務でよくあるバグまとめ
- 検索結果がNothingのまま処理 → エラーやクラッシュの原因
- 在庫数がマイナスになる → 売上処理でチェック必須
- 新商品が追加されない → 発注反映で在庫表に追記が必要
- ループの更新忘れ → 無限ループに注意
💡 こうしたバグ修正は「必ず条件分岐を入れる」「境界値をチェックする」が鉄則です。


