電子書籍の厳選無料作品が豊富!

エクセルVBAで在庫管理をしたいと思っていますが、難しく前へ進まず悩んでいます。
すいませんが、ご教授ください。
一つのシートに下表のような表があります。
これをロットをキーとして一行にまとめ、在庫数まで求めたいです。
いい方法はありませんか?

製品  ロット  入庫  出庫  在庫
A   1111  1000      
A   1112  1000      
A   1112       500
A   1111       500
A   1111  1000

A 回答 (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
    • good
    • 0
この回答へのお礼

初心者でして、何が何だかわかりませんが、
やりたかったことがばっちりできました。
本当にありがとうございました。

お礼日時:2012/07/13 21:34

まずデータを製品&ロット順にして、その中をまとめ、最後に在庫計算でよいかと。


基本のループと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がかなり簡単になりますよ。
    • good
    • 0
この回答へのお礼

selection,offset色々使えそうですね。
有難うございます。
又、色々な便利機能も多そうなので、
少しずつ頑張っていこうと思います。
有難うございました。

お礼日時:2012/07/13 21:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!