• ベストアンサー
  • すぐに回答を!

VBAでの在庫管理

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

共感・応援の気持ちを伝えよう!

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.2
  • mu2011
  • ベストアンサー率38% (1910/4994)

マクロ(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)

  • 回答No.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色々使えそうですね。 有難うございます。 又、色々な便利機能も多そうなので、 少しずつ頑張っていこうと思います。 有難うございました。

関連するQ&A

  • エクセルでの在庫管理表について。

        A     B    C    D    E 1列 品名  現在庫 入庫 出庫 総在庫 2列 AAA001  100  100  50  150 3列 AAA002  150  120  20  250 ・ ・ ・ このような在庫管理表を会社で作りました。 上司から「最初はこれでもいいんだけど、入庫と出庫はいつも変動するから、次回入力時にもいちいち現在庫も書き換えるのは面倒。入庫と出庫だけ書き換えるだけで合計が出るようにしてくれ!」と言われたのですが、つまり(総在庫+入庫-出庫=総在庫)にしたいそうです。エクセルでは出来ませんよね? 現在庫が無いものだったら、(入庫+出庫=総在庫)で出来るんですが。 どうやったらうまく作れるのかわからずこちらで質問させて頂きました。 説明が下手ですみません。補足要求があれば、補足しますので回答お待ちしております。

  • アクセスでの在庫管理(在庫期間が知りたい)

    アクセスを使って商品の在庫管理を行おうと試行錯誤しています。 1.入庫テーブル(商品名、入庫日、入庫数)に入力。 2.出庫テーブル(商品名、出庫日、出庫数)に入力。  これらから、商品と入庫日をロット単位とし、このように在庫を計算しています。  入庫の合計―出庫の合計=在庫 ここからネックになっているのが、在庫期間をどうあらわすかと言う点です。  通常、今日までの在庫期間は   在庫期間=今日―入庫日  によって表しています。  ここまでは出来ていますが、さらに一歩進めて  日にちを毎回指定し   指定日からの在庫期間=指定日―入庫日  のような感じで在庫期間を表示させたいのですが どのようにクエリを作ったらよいのでしょうか? このようなフローで良いのか、 参考HP等ありましたらアドバイス頂けませんか?

  • エクセルで在庫管理表の作り方を教えてください。

        A     B     C 1列.入庫数 出庫数 総枚数 2列. 10    5    100 ↑ 「(入庫数-出庫数)+総枚数」で出た枚数をC2に上書きさせたいのですが、出来ません。 「(A2-B2)+C2」じゃ出来ないのでしょうか? 例えば「C2が90の時は総枚数が95になる」という風な在庫管理表を作りたいのです。 本当に初心者ですみませんが、回答お待ちしております。よろしくお願いします。

  • 手書きの在庫(貸出)管理表

    手書きで管理する在庫管理表を作りたいと思います。 エクセルなどで管理しないのは、製品のそばにその管理表を置いておきたいからです。また、入出庫はしょっちゅうある為、いちいちデータ入力して出力し直す手間を省く為です。 ただ、1つの製品に対し、入庫、出庫を何度か繰り返すのです。入出庫と言っても厳密に言えば貸出表です。 貸出があれば、貸出中かどうか、貸出先、返却日、が分かるようにし、尚且つ、一見して現在の在庫数=貸出可能な数、が分かるようにしたいのです。 製品は50個ほどあります。 エクセルでフォーマットを作り、貸出→返却→再び貸出、と手書きで管理できるようにするには、どのようなフォーマットにすればいいのでしょうか。 単純な作業なのですが、アイデアが浮かびません。 どうぞお知恵を貸してください。

  • セット商品の在庫管理

    現在エクセル2003で、在庫管理しています。 日報シートに入力したら在庫シートの(前月在庫数-出庫数+入庫数=在庫数)で、 現在庫がわかるようになっています。 この度、A.B.C.D.E.の商品をそれぞれ お掃除セット(A.B.C2個) リビング用セット(A.C.D.E) という具合でセット販売するのですが、日報に(お掃除セット、1)と入力すれば、 自動的にAが1、Bが1、Cが2、という感じで 在庫が減るようにし、セット商品が何個出たのかわかる様にすることが 可能なのでしょうか? わかりにくい質問で恐縮ですがよろしくお願いいたします。

  • エクセルでの在庫管理について

    エクセルに関して初心者なのですが、仕事で在庫管理をすることになりました。 製品が70種類あり、毎日入出庫がございます。 日にちごとに、入庫、出庫、在庫で全て自動計算が出来ればという感じで作成したいのですがまったくわかりません。 出来ればテンプレートがございましたらご紹介頂けませんでしょうか?

  • 通販の会社で働いているのですが、在庫の管理をエクセルで行っています。

    通販の会社で働いているのですが、在庫の管理をエクセルで行っています。 商品の出庫や入庫を扱っているのですが別PCではできるのに自分のPCだけ 出庫や入庫ができません。何が問題なのでしょうか? 教えて下さい。

  • Excel VBA 在庫管理について

    Excelで在庫管理をしているのですが、とても効率が悪く、改善したいと思っています。 週に1度発注するのですが、 売上と仕入れから現在の在庫を算出し、在庫管理表(Excel)に反映させ、フィルターで各メーカーごとに発注するものだけを絞り、別シート(発注書)に貼り付けて、それを印刷または新しいブックで保存、という作業をメーカーの数だけやらなければいけません。 全く経験がなく途方に暮れています。 VBAは独学でやっている感じなので、在庫管理の方法さえ決まればマクロを当てはめようと思っています。 わかりやすくて、単純で、パッとできるようなものってないですか? 在庫管理をやっている方、こうやると効率いいよ、など何でもいいので教えてくださいm(_ _)mよろしくお願いします。

  • 現在庫算出方法についてお教え下さい

    在庫管理についてお教え下さい 私の行なっている現在庫の算出方法が妥当かどうか御教え頂けないでしょうか? 在庫管理を会社で行なっています。小さい会社なので、商品もそれほどあるわけではありません。 入庫したら以下の方法で入庫処理しています。 ハンディターミナルで商品のバーコードをスキャンし、個数を入力。PCに転送しMYSQL5で管理。 テーブルは、 T_入庫マスター 商品コード,入庫数 出庫したら以下の方法で出庫処理しています。 ハンディーターミナルで商品のバーコードをスキャンし、個数を入力。PCに転送しMYSQLで管理。 テーブルは、 T_出庫マスター 商品コード,出庫数 さらにビューを2つ作っています。 V_入庫マスター select 商品コード,sum(入庫数) As 入庫数 from T_入庫マスター group by 商品コード V_出庫マスター select 商品コード,sum(出庫数) As 出庫数 from T_出庫マスター group by 商品コード 現在庫を求めるには、全ての入庫から全ての出庫を引いたものが現在庫になるはずなので、もう一つビューを作ります。 V_現在庫マスター select V_入庫マスター.商品コード,V_入庫マスター.入庫数 - V_出庫マスター.出庫数 As 現在庫 from V_入庫マスター inner join V_入庫マスター.商品コード = V_出庫マスター.商品コード まだ作り始めて間もないのですが(今まではExcelで在庫管理してました)、果たして現在を求めるのにこのようなやりかたで良いのかどうか不安になりました。 このやり方がスマートかどうか教えて頂けませんでしょうか? 毎日の入出庫は、取扱点数50点。入庫、出庫はマチマチですが各商品10前後です。 よろしくお願いいたします。

  • EXCELを使った在庫自動消し込みについて

    EXCELを使った在庫自動消し込みについて 在庫表sheet 在庫番号   型番   個数     入庫日   11     A      50     1/10   12     B    15     1/12   13     B    25     2/11   14     A    31     3/15    出荷報告表sheet 型番   個数 出庫日 (引当在庫番号)  (個数)    (残数)   A    12      4/10   11        12   38   A    55      4/15   11・14    38・17     14   B    38      4/16  ()内に回答を表示したいのですが、教えてください。