人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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に変更していくプログラムを作成したいと考えています。
上から順番に処理して行くので黒く塗りつぶされた行はとびこして次の行へ
そして大元のデータ?(別商品)にたどり着いたら
商品が売り切れました。というメッセージを出したいと考えています。
よろしくお願いいたします。

●質問者: aiomock
●カテゴリ:コンピュータ インターネット
✍キーワード:はと エクセル データ プログラム メッセージ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo
●35ポイント

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

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


参考サイト

◎質問者からの返答

ありがとうございます。


2 ● SALINGER
●35ポイント

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

この表が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/

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ