|
こんにちは お邪魔します
出庫すべき個数が 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
スマートな案が思い浮かばなかったので、ちょっとガチガチですが。
|
|