Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


23537 / 76738 ←次へ | 前へ→

【58567】Re:在庫管理をしたいのに・・・
回答  ベンセンヘイバー  - 08/10/30(木) 11:31 -

引用なし
パスワード
   こんにちは お邪魔します

出庫すべき個数が 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

スマートな案が思い浮かばなかったので、ちょっとガチガチですが。
1 hits

【58524】在庫管理をしたいのに・・・ Mimi 08/10/28(火) 23:07 質問
【58525】Re:在庫管理をしたいのに・・・ Mimi 08/10/28(火) 23:13 質問
【58528】Re:在庫管理をしたいのに・・・ かみちゃん 08/10/28(火) 23:51 発言
【58533】Re:在庫管理をしたいのに・・・ Mimi 08/10/29(水) 6:37 質問
【58567】Re:在庫管理をしたいのに・・・ ベンセンヘイバー 08/10/30(木) 11:31 回答
【58724】Re:在庫管理をしたいのに・・・ Mimi 08/11/5(水) 22:13 お礼

23537 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free