[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『在庫データからの出荷割当について』(パンダ)
倉庫で仕事をしているパンダと申します。 エクセルは初心者です。(Excel2002, OS WindowsXP)
どなたかお知恵を拝借させていただきたくお願いします。
【状況】 在庫データ(ロケーション付)と出荷データの数値の割当をしたいのですが、 どのような関数を使えば良いのでしょうか。
シート1:在庫ロケーションデータ ※ロケーションは入荷日順 → ロケと表記します
A B C 商品名 ロケ 在庫数 あ AA 50 あ BB 100 あ CC 100 い DD 20 い EE 40 い FF 40 う GG 10 う HH 50
ここで、出荷データとしてシート2に下記のようなオーダーが来たとして
A B C 出荷先 商品名 出荷数 東京 あ 60 東京 い 50 埼玉 あ 70 埼玉 う 10 千葉 あ 20 千葉 い 20 千葉 う 20
シート3に 以下のような記載をさせたいのです。
A B C D 出荷先 商品名 ロケ 出荷数 東京 あ AA 50 東京 あ BB 10 東京 い DD 20 東京 い EE 30 埼玉 あ BB 70 埼玉 う GG 10 千葉 あ BB 20 千葉 い EE 10 千葉 い FF 10 千葉 う HH 20
先に記載しております様、ロケーションは入荷日順となっており、先入先出の法則から 上記のような割当が必要となります。
どなたかお分かりになる方がいましたら、力を貸してください! 何卒よろしくお願いいたします!
こんな感じでどうでしょうか。(ROUGE) Sub Panda() Dim tbl1, tbl2, ans, i As Long, ii As Long, x tbl1 = Sheets("Sheet1").Range("A1").CurrentRegion.Resize(, 3).Value tbl2 = Sheets("Sheet2").Range("A1").CurrentRegion.Resize(, 3).Value ReDim ans(1 To 4, 1 To 1) ans(1, 1) = "出荷先" ans(2, 1) = "商品名" ans(3, 1) = "ロケ" ans(4, 1) = "出荷数" ii = 1 For i = 2 To UBound(tbl2, 1) Do Until tbl2(i, 3) = 0 ii = ii + 1 ReDim Preserve ans(1 To 4, 1 To ii) ans(1, ii) = tbl2(i, 1) ans(2, ii) = tbl2(i, 2) With Application x = .Match(tbl2(i, 2), .Index(tbl1, 0, 1), 0) If Not IsError(x) Then ans(3, ii) = .Index(tbl1, x, 2) ans(4, ii) = .Min(.Index(tbl1, x, 3), tbl2(i, 3)) tbl2(i, 3) = tbl2(i, 3) - ans(4, ii) tbl1(x, 3) = tbl1(x, 3) - ans(4, ii) If tbl1(x, 3) = 0 Then tbl1(x, 1) = Empty tbl1(x, 2) = Empty tbl1(x, 3) = Empty End If Else ans(3, ii) = "−−−" ans(4, ii) = "在庫不足(" & tbl2(i, 3) & ")" Exit Do End If End With Loop Next With Sheets("Sheet3") .Range("A:D").ClearContents For i = 1 To UBound(ans, 2) For ii = 1 To 4 .Cells(i, ii).Value = ans(ii, i) Next Next End With End Sub
ROUGEさま
教えていただいた式をさっそく試させていただいたところ 完璧に求めていた回答ができました!!
ホントにホントにホントにありがとうございました!!!
パンダももっとエクセル勉強しなければ と改めて思いました。
感謝、感謝、感謝、です。(パンダ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.