[[20090528093123]] 『在庫データからの出荷割当について』(パンダ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『在庫データからの出荷割当について』(パンダ)
 倉庫で仕事をしているパンダと申します。
 エクセルは初心者です。(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.