- ベストアンサー
VBAでの在庫管理
エクセルVBAで在庫管理をしたいと思っていますが、難しく前へ進まず悩んでいます。 すいませんが、ご教授ください。 一つのシートに下表のような表があります。 これをロットをキーとして一行にまとめ、在庫数まで求めたいです。 いい方法はありませんか? 製品 ロット 入庫 出庫 在庫 A 1111 1000 A 1112 1000 A 1112 500 A 1111 500 A 1111 1000
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
マクロ(VBA)例です。 仮にデータをSheet1、集計表をSheet2に作成しています。 Sheet1シートタブ上で右クリック→コードの表示→サンプルコード貼り付け→Sheet1上でAlt+F8キー押下→sample実行 概略は、製品&ロットをキーにデータ(製品~出庫)を集計DBに入出庫数を計数して登録、集計表を出力しています。 Sub sample() Dim DB, wk(3), wk1, rslt, wkey As String, i As Long, j As Long, k As Long Set DB = CreateObject("Scripting.Dictionary") '** データ配列作成 For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row For j = 0 To 3 If Cells(i, j + 1) <> "" Then wk(j) = Cells(i, j + 1) Else wk(j) = 0 End If Next wkey = wk(0) & "," & wk(1) If Not DB.Exists(wkey) Then '** 新規データ登録 DB.Add wkey, Join(wk, ",") Else '** 登録済み入出庫計数 wk1 = Split(DB(wkey), ",") wk1(2) = wk1(2) + wk(2) wk1(3) = wk1(3) + wk(3) DB(wkey) = Join(wk1, ",") End If Next '** 集計表出力 With Sheets("sheet2") .Cells.Clear .Cells(1, "A").Resize(1, 5).Value = Cells(1, "A").Resize(1, 5).Value wk1 = DB.keys k = 1 For i = LBound(wk1) To UBound(wk1) rslt = Split(DB(wk1(i)), ",") k = k + 1 For j = 1 To 4 If rslt(j - 1) <> "0" Then .Cells(k, j) = rslt(j - 1) End If Next .Cells(k, "E") = .Cells(k, "c") - .Cells(k, "D") Next End With End Sub
その他の回答 (1)
- ap_2
- ベストアンサー率64% (70/109)
まずデータを製品&ロット順にして、その中をまとめ、最後に在庫計算でよいかと。 基本のループとIf文、最低限のセル参照ができればよいので、入門にはちょうどいい内容だと思いますよ。 1. データをソート@記録 まず、データ範囲を選択。「製品」にカーソル合わせて「Shift+Ctrl+↓→」。キー操作なら、データ行数に関係なく動いてくれます。 んで、ソートは製品>ロット順 2. 1行にまとめる@要プログラミング 製品とロットが上と同じなら、上に合計して、その行は削除。 を上から順に繰り返す。 「製品」がA1だとしたら・・・ '最初のセル(上と比較するので2番目)を選択 Range("A3").Select '選択したセルが空じゃ無ければループ Do While Selection <> "" '製品が同じか? '※Offset(縦,横)にズレた位置の値と比較 If Selection = Selection.Offset(-1,0) Then 'ロットが同じか? If Selection.Offset(0,1) = Selection.Offset(-1,1) Then 'todo: 入庫を合計する 'todo: 出庫を合計する 'todo: 選択セルの行を削除 End If End If '次のセルを選択 Selection.Offset(1,0).Select Loop 3. 最後にもう一度上からループで在庫計算。 ・・・というかんじで。 細かい部分は書くのを控えました。 選択中のセル(Selection)と、そこから上下左右に移動したセル(Offset)を操作するだけで、けっこう色んなことが出来ます。 そこから徐々にできることを増やせばOK。がんばってみてください。 あと、ブレイクポイント・ステップ実行・ローカルウィンドウなど、VBEには便利な機能がいっぱい。使えるようになると、VBAがかなり簡単になりますよ。
お礼
selection,offset色々使えそうですね。 有難うございます。 又、色々な便利機能も多そうなので、 少しずつ頑張っていこうと思います。 有難うございました。
お礼
初心者でして、何が何だかわかりませんが、 やりたかったことがばっちりできました。 本当にありがとうございました。