[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『在庫データからの出荷割当について』(パンダ)
倉庫で仕事をしているパンダと申します。 エクセルは初心者です。(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.