現在在庫管理のエクセルを作成していますがプログラムが出来ず困っております。

誰かお助けください。

商品のデータがあります。

番号  状況   商品データ     在庫データ    出庫

1   A    大元のデータ①     4     数を入力します。
1   A    個別データa      1     
1   A    個別データb      1
1   A    個別データc      1
1   A    個別データd      1
2   A    大元のデータ②     1

番号1は全て同じ商品です。
大元のデータ①というのは下の個別データa,b,c,dの個数の総まとめのデータになります。
やりたいことは出庫数を大元のデータ①の行で入力すると総まとめの個数の個別データをa,b,c,d上から順に各行を黒で塗りつぶし状況AをBに、1を0に変更していくプログラムを作成したいと考えています。
上から順番に処理して行くので黒く塗りつぶされた行はとびこして次の行へ
そして大元のデータ②(別商品)にたどり着いたら
商品が売り切れました。というメッセージを出したいと考えています。
よろしくお願いいたします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2008/03/03 23:32:59
  • 終了:2008/03/10 23:35:02

回答(2件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/03/04 09:15:47

ポイント35pt

VBAを使って、forループかwhileループで回し、if条件で「大元」と「個別」を区別して処理していく形になるでしょう。「大元」と「個別」を区別する条件が、もう少し厳密に定義されている必要があると思います。

下記サイトを参考にしてください。


参考サイト

id:aiomock

ありがとうございます。

2008/03/04 14:24:25
id:SALINGER No.2

SALINGER回答回数3454ベストアンサー獲得回数9692008/03/04 11:44:42

ポイント35pt

仕様部分でどうしても不明な部分があったので、これでいいのかわかりませんが、

この表がA列から記入されているとして、シートのWorksheet_Changeイベントに次のコードを入れてください。

数を入力する部分はトータルの出庫数ではなくてその都度の出庫数としました。

トータルにすると在庫データが変更されるので、列を追加するなり元の在庫データを保持しておくことが必要だからです。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 5 Then Exit Sub
    Dim i As Integer
    Dim num As Integer
    Dim zaiko As Integer
    
    i = 0
    While Cells(Target.Row + i, 2).Value = "B"
        i = i + 1
    Wend
    
    num = Cells(Target.Row, 1).Value
    zaiko = Target.Value
    
    Do
        i = i + 1
        If Cells(Target.Row + i, 1).Value <> num Then
            Cells(Target.Row, 2).Value = "B"
            MsgBox "商品が売り切れました"
            Exit Do
        End If
        
        If zaiko > 0 Then
            'ここでは分かりやすいように灰色で15を指定しましたが黒なら1を指定
            Rows(Target.Row + i).Interior.ColorIndex = 15
            
            If Cells(Target.Row + i, 4).Value - zaiko > 0 Then
                Cells(Target.Row + i, 4).Value = Cells(Target.Row + i, 4).Value - zaiko
                zaiko = 0
            Else
                zaiko = zaiko - Cells(Target.Row + i, 4).Value
                Cells(Target.Row + i, 4).Value = 0
                Cells(Target.Row + i, 2).Value = "B"
            End If
        Else
            Exit Do
        End If 
    Loop
End Sub

ただし、E列の関係ない行に数値を入れるとエラーになります。

http://q.hatena.ne.jp/

id:aiomock

わかりました。実際にやってみたいと思います。ありがとうございます。

2008/03/04 14:25:12

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません