| 
    
     |  | こんにちは お邪魔します 
 出庫すべき個数が G5 にあり、
 在庫不足のための未出庫の個数を I5 に表示するとします
 D列には、=B2-C2 という形でフィルコピーで埋めてください
 
 Sub MyTest001()
 
 Worksheets("sheet4").Activate
 
 Dim lNum As Long
 Dim rng As Range
 
 '出庫数
 lNum = Range("G5").Value
 
 '在庫0のセルを検索(逆方向検索)
 Set rng = Range(Range("D1"), Range("D" & Rows.Count).End(xlUp)).Find( _
 0, , xlValues, xlWhole, xlByRows, xlPrevious)
 
 '在庫0のセルが無ければ、最初のセルから開始
 If rng Is Nothing Then
 Set rng = Range("D2")
 Else
 '在庫0のセルがあれば、その次の行から
 Set rng = rng.Offset(1, 0)
 If IsEmpty(rng) Then
 '次の行にデータが無ければ終了
 Range("I5").Value = lNum
 MsgBox "在庫がもうありません"
 Exit Sub
 End If
 End If
 
 
 Do While lNum > 0
 If rng.Value > lNum Then
 'その行の在庫 > 出庫
 rng.Offset(, -1).Value = rng.Offset(, -1).Value + lNum
 lNum = 0
 Exit Do
 Else
 'その行の在庫 <= 出庫
 lNum = lNum - rng.Value
 rng.Offset(, -1).Value = rng.Offset(, -1).Value + rng.Value
 '在庫が足りない分、次の行へ移動
 Set rng = rng.Offset(1, 0)
 If IsEmpty(rng) Then
 '次の行にデータが無ければ終了
 Range("I5").Value = lNum
 MsgBox "在庫がもうありません" & "未出庫:" & lNum & "個"
 Exit Do
 End If
 End If
 Loop
 
 ' I5 セルに出庫できなかった個数を表示
 Range("I5").Value = lNum
 
 End Sub
 
 スマートな案が思い浮かばなかったので、ちょっとガチガチですが。
 
 
 |  |