advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 779 for シリアル値 とは (0.008 sec.)
シリアル値 (1875), とは (29348)
[[20111110145634]]
#score: 8288
@digest: b2f9911ca56a7e804f950f2085557ad8
@id: 56610
@mdate: 2011-11-14T07:36:25Z
@size: 51340
@type: text/plain
#keywords: 能在 (177376), 荷コ (175698), 当可 (172044), 引当 (155893), 荷指 (155199), 出荷 (120149), 当更 (107068), 庫現 (84836), ・pm (72496), 日在 (69723), 荷分 (67623), 「pm (62819), comabbr (58672), pm2 (57872), 荷依 (54486), 在庫 (50888), 示書 (48736), 指示 (35231), 日出 (31789), 庫」 (30354), 当日 (29054), 書作 (27909), 倉庫 (27853), 前日 (27454), 荷日 (26340), 履歴 (25066), 入荷 (21305), 翌日 (20397), 荷数 (20356), 列: (18256), 列以 (15596), 日入 (14269)
『Excelの先入先出の方法★その2』(らんきち)
http://www.excel.studio-kazu.jp/kw/20111101135213.html の続きです。 > 日付列は日付列として持っておくほうが、後々、様々な利用をしようとしたときに絶対に有利なので >別の列でコメント列(それこそ、本当の備考列)をつくって運用したほうがいいよ。 了解いたしました。では、D列の「賞味期限」の後E列に「備考」を挿入したいと思います。 ※現在が「賞味期限+コメント」ですし、コメントも出荷の際にキーになる優先順位が高いので (同じ賞味期限のもので先に出荷するかどうかの判断基準になることがあります) >L列からの履歴の日付欄が11/1 といった表記になっているけど、もちろん、ここも「日付型」なんだよね 日付が入っているものは日付型ですが、日付が入らない空白セルが存在します。 出荷日が同じものは先頭列にだけ日付が入って次の列から空白になっています。 また、日付が入っていて横に2個結合されているセルもあります。(M列からT列まで各2列ずつ。数量が入るセルは結合されていません) あとL列の4行目のみ文字列が入っています。 >最後にあるシートって、元は何だった? 他の在庫シートと同じく「在庫+商品名」がシート名で、中身は商品在庫の一つです 教えていただいたコードを追加しましたがやはり雛形を非表示にすると再現します。 そして非表示のシートとして「出荷指示書(2)」というものが作成されています。 作成された「出荷指示書(2)」は雛形のみで、データ自体は最後のシート(シート名が変更されたシート)の中に入ります 雛形表示したままでもいいのですが、もしかしたら違う人が雛形に直接データを書き込んでしまう場合がないとは言い切れず… (かなり多くの人が参照するので) シート保護にしたら出荷指示書作成の場合に支障が出ますでしょうか ※すみません、やっぱりシート保護はダメなんですね… (らんきち) ---- >では、D列の「賞味期限」の後E列に「備考」を挿入したいと思います。 ということは、今、E列のロットNo以降、履歴も含めて全て右にシフト? もしそうなら、面倒だけど・・・しょうがない? >日付が入っているものは日付型ですが、日付が入らない空白セルが存在します。 >出荷日が同じものは先頭列にだけ日付が入って次の列から空白になっています。 >また、日付が入っていて横に2個結合されているセルもあります。(M列からT列まで各2列ずつ。数量が入るセルは結合されていません) これは、大変だよ。今は、テスト環境、おそらく履歴空白なのかな? でも、既に、今やっている出荷指示書作成でも、履歴のチェックをしていることろがある。 ましてや、次回予定の引当更新では、ここが重要なポイント。 まぁ、最終的にはなんとかするけど・・・・ ●もう、後出しはないようねぇ・・・ >あとL列の4行目のみ文字列が入っています。 ん? 何が入ってるの? 何か別のものが入っているとして、じゃぁL列の履歴データの出荷日は? >教えていただいたコードを追加しましたがやはり雛形を非表示にすると再現します。 う〜ん・・・ とりあえず表示でテスト進めて。こちらではでていないんだよねぇ・・・ >シート保護にしたら出荷指示書作成の場合に支障が出ますでしょうか 全然問題ないよ。大丈夫。ただし、シート保護をパスワード付でかけるなら、そのパスワードを コードから与えなきゃいけないけど。 ●重要な確認 履歴って、こちらの理解では、出荷(実際には引当更新)ごとにL列〜に「追加」されていくんだよね。 追加する時に初めて日付や出荷コードや数量がセットされるんだよね。 1つの商品で、難解の出荷になるかわからないけど1回かもしれないし100回かもしれない。 で、M〜Tまで、各2列ずつという、その意味は? 最初の出荷がL列だったとして、2回目はM列。じゃぁ3回目は? (ぶらっと) ---- > ということは、今、E列のロットNo以降、履歴も含めて全て右にシフト? >もしそうなら、面倒だけど・・・しょうがない? >●もう、後出しはないようねぇ・・・ 本当に申し訳ございません… 日付欄の空白ですが、今は手入力でやっているので空白になっている(必要ないところを省いている)ので、 最終的に4行目全てに出荷日を入れても問題ないです。 ※現在はテスト環境で元のファイルやデータを利用してます。 結合セルも解除しても大丈夫なようにします。 ☆ L列の履歴データの出荷日 現在見出しが入っています。ただしすぐ下のL5とほぼ同じ内容が入っているのでここも変更します。 ただL列の「移動」は普通の出荷とは違う作業になるので(出荷コードなどが無い)通常の出荷入力とは別になります。 シート保護ですが、保護した場合指示書自体は作成されるのですが(ただしデータは入ってません)、 「実行時エラー'1004'変更しようとしているグラフまたはセルは読み取り専用となっています」 というエラーが出ます。 とりあえず雛形表示のまま進めます。 >M〜Tまで、各2列ずつという、その意味は? >最初の出荷がL列だったとして、2回目はM列。じゃぁ3回目は? 前のトピで触れましたが、「移動」という出荷とは別の倉庫間移動のための在庫引当と、 「翌日以降の出荷分として引き当てられているもので、同じ出荷コードが存在するもの」があります (翌日以降の出荷分の出荷コードは「PM」「PM2」で固定) L列=移動(倉庫間の移動なので出荷とは違う) M・N列=3日後出荷分の「PM」と「PM2」 O・P列=2日後出荷分の「PM」と「PM2」 Q・R列=翌日出荷分の「PM」と「PM2」 S・T列=当日出荷分の「PM」と「PM2」(前日のQ・R列から引っ張ってくる) 「PM」「PM2」以外の出荷がU列以降になります。 列の最後尾には「S列以降の合計(当日に出荷するもの)」と「M列以降の合計(翌日以降出荷を含めたもの)」 がSUM関数でそれぞれの行に入力されています。 U列から合計の列までが足りなくなったら手入力で追加していっています。 今までが非常に使いにくいレイアウトであるにも関わらず、現場の人が混乱するから変更は最小限に… という感じで、むしろ最初から作らせてくれればよかったんですが… 本当に本当にお手数をおかけします;; (らんきち) ---- >☆ L列の履歴データの出荷日 >現在見出しが入っています。ただしすぐ下のL5とほぼ同じ内容が入っているのでここも変更します。 >ただL列の「移動」は普通の出荷とは違う作業になるので(出荷コードなどが無い)通常の出荷入力とは別になります。 う〜ん、実際の用途というか、運用が見えないので。 ちょっと、こちらの(処理の)想定を書きます。もし、出荷指示書作成でも、その次の引当更新でも履歴は見なくていい ということであれば、逆に、この部分は、こちらが気にすることじゃなくなるで楽といえば楽だけど。 1.まず、この履歴は、指示書を発行しそれに基づき倉庫で出荷作業が開始されると決まったときに 作成された指示書の情報から、「ステータス未出荷」で履歴に登録し、同時に、当該数量を引当可能在庫から レスしようと考えている。 (指示書は作ったけど、出荷取りやめで、指示書を削除する場合も想定して、指示書作成とは切り離した処理を想定) 2.上記の想定なので、たとえば今から作ろうとしている指示書と同じ出荷コード、出荷日を持つデータが履歴にあれば ミスオペレーションというか、重複指示になるので、エラーメッセージを出して、指示書作成処理を終わらせている。 だから、このレイアウトは(現在のところ)きわめて重要。 3.出荷指示の際に、このチェックをしない、引当更新の際もチェックしない。 さらに、履歴セットは引当更新でもやらないと、そういうことなら、引当更新は、二重更新になってもやむなしと いうことで、指示書の数量から引当可能在庫のレスのみを行うようにするけど、どう? シート保護ですが、保護した場合指示書自体は作成されるのですが(ただしデータは入ってません)、 >「実行時エラー'1004'変更しようとしているグラフまたはセルは読み取り専用となっています」 できるといったけど、今、できるようになっているということじゃないよ。 たいした追加じゃないけど、今のコードをちょこっと直す必要がある。 >とりあえず雛形表示のまま進めます。 そうしてください。 >前のトピで触れましたが、「移動」という出荷とは別の・・・・・ この部分は、今からよく読んでみるけど、いずれにしても、履歴フィールドに対する、現在のコードが やろうとしていることは、前述の通りなので、やるなら、この部分の運用をもっと根掘り葉掘り聞かせて もらう必要がある。 ★で、出荷依頼に同じ商品があるケースに対する手当ては完了。スレをわけてアップする。 内部のデータ構造を直すべきだけど、そうすると、しっちゃかあめっちゃかになるので 帳票編集レベルで逃げるロジックに下。(なので、そこは煩雑になっている) あわせて、引当更新も書きかけていて、その部分も入っているけど、今は、そこは無視しておいて。 また、レイアウトは、とりあえず今のままでいこう。(コメント備考欄もなし) (ぶらっと) ---- 部分的な改訂が続いたので、いったん、フルセットをアップする。全てリバイスしておいて。 'ユーザーフォームモジュール Option Explicit Private Sub UserForm_Activate() Select Case Me.Tag Case "A" Me.Caption = "出荷指示書作成(指示書を作成する出荷コードを選んでください)" Case "B" Me.Caption = "引当更新(引当可能在庫の更新を行います。対象の出荷コードを選んでください)" End Select End Sub Private Sub UserForm_Initialize() Dim k As Long Dim sh As Worksheet Dim dic As Object Dim c As Range Dim v As Variant Dim i As Long If Not make出荷指示書(fnOpen) Then Unload Me Else Call io商品(fnOpen) Call make出荷指示書(fnGetList, v) ListBox1.List = v '以下はユーザーフォームのプロパティで設定すればコードは不要 ListBox1.MultiSelect = fmMultiSelectExtended CommandButton1.Caption = "実行" CommandButton2.Caption = "全て選択" CommandButton3.Caption = "全て解除" ListBox1.ColumnCount = 3 End If End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Call io商品(fnClose) Call make出荷指示書(fnClose) End Sub Private Sub CommandButton1_Click() Dim v() As Variant Dim i As Long Dim k As Long With ListBox1 ReDim v(1 To .ListCount) If .ListIndex < 0 Then Exit Sub End If For i = 0 To .ListCount - 1 If .Selected(i) Then k = k + 1 v(k) = .List(i) End If Next If k = 0 Then MsgBox "出荷コードが選択されていません" Exit Sub Else ReDim Preserve v(1 To k) Select Case Me.Tag Case "A" Call 出荷指示書作成(v) Case "B" Call 出荷引当実行(v) Call io商品(fnClose) Call io商品(fnOpen) End Select End If End With MsgBox "出荷指示書作成処理が終了しました" End Sub Private Sub CommandButton2_Click() SelectAll True End Sub Private Sub CommandButton3_Click() SelectAll False End Sub Private Sub SelectAll(flag As Boolean) Dim i As Long With ListBox1 For i = 0 To .ListCount - 1 .Selected(i) = flag Next End With End Sub '標準モジュール Module1 Option Explicit Enum func fnOpen fnInitial fnGet fnGetList fnPut fnOrdered fnShipped fnAllocate fnSort fnClose End Enum Type DLOrder flag As Boolean vntDL As Variant End Type 'シート名規定 Public Const shn商品一覧 As String = "商品一覧" Public Const shn出荷依頼 As String = "Sheet2" Public Const tpl出荷指示 As String = "Sheet3" '商品一覧列規定 Public Const IDCol As String = "A" '商品ID列 Public Const NameCol As String = "B" '商品名列 Public Const ABBRCol As String = "C" '商品略称列 Sub 出荷指示() If IsFormLoaded Then Exit Sub With UserForm1 .Tag = "A" '出荷指図 .Show vbModeless End With End Sub Sub 引当更新() If IsFormLoaded Then Exit Sub With UserForm1 .Tag = "B" '引当更新 .Show vbModeless End With End Sub '標準モジュール Module2 Option Explicit Function io商品(fc As func, Optional cd As String, Optional comABBR As String, _ Optional qty As Long, Optional dldate As Date, Optional ship As String) As Variant Static dicM As Object Static dicH As Object Static comName Dim first As Boolean Dim c As Range Dim sh As Worksheet Dim comid As String Dim dKey As Variant Dim reqQty As Long Dim dDate As Date Dim dQty As Long Dim dLot As String Dim v() As Variant Dim setQty As Long Dim wk As Variant Select Case fc Case fnOpen Set dicM = CreateObject("Scripting.Dictionary") Set dicH = CreateObject("Scripting.DIctionary") For Each sh In Worksheets If Left(sh.Name, 2) = "在庫" Then comABBR = Mid(sh.Name, 3) Set dicM(comABBR) = CreateObject("Scripting.Dictionary") For Each c In sh.Range("A6", sh.Range("A" & sh.Rows.Count).End(xlUp)) If Len(c.Offset(, 2).Text) = 0 Then '保留マーク空白 ' 賞味期限 LotNo 引当可能数量 dicM(comABBR)(dicM(comABBR).Count + 1) = _ Array(c.Offset(, 3).Value, c.Offset(, 4).Value, c.Offset(, 7).Value) End If Next '引当履歴 Set dicH(comABBR) = CreateObject("Scripting.Dictionary") For Each c In sh.Range(sh.Cells(4, "L"), sh.Cells(4, sh.Columns.Count).End(xlToLeft)) ' 出荷日 出荷コード 出荷確定フラッグ If Len(c.Text) > 0 Then dicH(comABBR)(c.Value2 & vbTab & c.Offset(1).Value) = c.Offset(-1).Value End If Next End If Next Case fnGet If Not dicM.exists(comABBR) Then Exit Function first = True reqQty = qty comName = "登録なし" comid = "登録なし" wk = Application.Match(comABBR, Sheets(shn商品一覧).Columns(ABBRCol), 0) If IsNumeric(wk) Then comName = Sheets(shn商品一覧).Cells(wk, NameCol).Value comid = Sheets(shn商品一覧).Cells(wk, IDCol).Value End If For Each dKey In dicM(comABBR) dDate = dicM(comABBR)(dKey)(0) dLot = dicM(comABBR)(dKey)(1) dQty = dicM(comABBR)(dKey)(2) wk = dicM(comABBR)(dKey) If dldate <= dDate And dQty > 0 Then If dQty >= reqQty Then setQty = reqQty wk(2) = wk(2) - setQty Else setQty = dQty wk(2) = 0 End If reqQty = reqQty - setQty dicM(comABBR)(dKey) = wk If first Then ReDim v(1 To 7, 1 To 1) first = False Else ReDim Preserve v(1 To UBound(v, 1), 1 To UBound(v, 2) + 1) wk(1) = 0 End If v(1, UBound(v, 2)) = cd v(2, UBound(v, 2)) = comABBR v(3, UBound(v, 2)) = dDate v(4, UBound(v, 2)) = dLot v(5, UBound(v, 2)) = setQty v(6, UBound(v, 2)) = dldate v(7, UBound(v, 2)) = comid End If If dicM(comABBR)(dKey)(1) = 0 Then dicM(comABBR).Remove dKey If reqQty = 0 Then Exit For Next If Not first Then io商品 = WorksheetFunction.Transpose(v) End If Case fnOrdered io商品 = dicH(comABBR).exists(CDbl(dldate) & cd) Case fnSort For Each sh In Worksheets If Left(sh.Name, 2) = "在庫" Then With sh.Range("A6", sh.Range("A" & sh.Rows.Count).End(xlUp)).EntireRow .Sort Key1:=.Columns("A"), Order1:=xlAscending, _ Key2:=.Columns("D"), Order2:=xlAscending, Header:=xlNo End With End If Next Case fnAllocate '在庫シート Case fnClose If Not dicM Is Nothing Then dicM.RemoveAll Set dicM = Nothing End If If Not dicH Is Nothing Then dicH.RemoveAll Set dicH = Nothing End If End Select End Function Function make出荷指示書(fc As func, Optional v As Variant) As Boolean Static shn As String Static dicO As Object Static first As Boolean Static oldCom As String Static newCom As String Static comQty As Long Static comLine As Long Dim cd As String Dim s As String Dim w As Variant Dim i As Long Dim c As Range Dim q As Long Dim l As Long Dim dm As Long Select Case fc Case fnOpen Set dicO = CreateObject("Scripting.Dictionary") With Sheets(shn出荷依頼) '出荷依頼データ For Each c In .Range("A2", .Range("A" & Rows.Count).End(xlUp)) cd = c.Value s = c.Offset(, 1).Value & "(" & Format(c.Offset(, 2).Value, "#,##0") & ")" If dicO.exists(cd) Then If dicO(cd)(1) <> c.Offset(, 3).Value2 Then MsgBox "出荷コード:" & cd & "の出荷日は全て同じにしてください" Exit Function End If w = dicO(cd) w(2) = w(2) & " " & s dicO(cd) = w Else dicO(cd) = Array(cd, c.Offset(, 3).Value2, s) End If Next End With Case fnGetList v = dicO.items v = Application.Transpose(Application.Transpose(v)) If dicO.Count = 1 Then ReDim w(1 To 1, 1 To 3) w(1, 1) = v(1) w(1, 2) = CDate(v(2)) w(1, 3) = v(3) v = w Else For i = LBound(v, 1) To UBound(v, 1) v(i, 2) = CDate(v(i, 2)) Next End If Case fnInitial shn = "出荷指示_" & v & "_" & Format(CDate(dicO(v)(1)), "yy-mm-dd") If IsObject(Evaluate("'" & shn & "'!A1")) Then If MsgBox(shn & "がすでに存在します。削除して置き換えていいですか?", vbYesNo) = vbNo Then Exit Function Application.DisplayAlerts = False Sheets(shn).Delete Application.DisplayAlerts = True End If Sheets(tpl出荷指示).Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = shn ActiveSheet.Visible = True first = True comQty = 0 comLine = 0 Case fnPut With Sheets(shn) With .Range("A" & .Rows.Count).End(xlUp).Offset(1) If IsArray(v) Then dm = getDimension(v) If dm = 1 Then newCom = v(2) q = v(5) l = 1 Else newCom = v(1, 2) q = WorksheetFunction.Sum(WorksheetFunction.Index(v, 0, 5)) l = UBound(v, 1) End If If first Then oldCom = newCom first = False End If End If If Not IsArray(v) Or oldCom <> newCom Then If comLine = 1 Then .Value = " " 'スペース 商品ブレーク ただし1行ゆえ小計なし Else .Value = " " 'スペース 小計行 .Offset(, 3).Value = "小計" .Offset(, 4) = comQty End If comQty = 0 comLine = 0 End If If Not IsArray(v) Then Exit Function comQty = comQty + q comLine = comLine + l oldCom = newCom End With With .Range("A" & .Rows.Count).End(xlUp).Offset(1) If dm = 1 Then .Resize(, UBound(v)).Value = v Else .Resize(UBound(v, 1), UBound(v, 2)).Value = v End If End With End With Case fnClose Set dicO = Nothing End Select make出荷指示書 = True End Function Function IsFormLoaded() As Boolean If UserForms.Count > 0 Then MsgBox "呼び出し中のフォームを閉じてから処理してください" IsFormLoaded = True End If End Function Private Function getDimension(v) As Long Dim i As Long Dim wk As Long On Error Resume Next Do i = i + 1 wk = UBound(v, i) Loop While Err.Number = 0 On Error GoTo 0 getDimension = i - 1 End Function '標準モジュール Module3 Option Explicit Sub 出荷指示書作成(cds As Variant) Dim i As Long Dim buf As Variant Dim c As Range Dim wk As Variant Dim cd As String Dim myDL As DLOrder For Each wk In cds cd = wk If make出荷指示書(fnInitial, cd) Then With Sheets(shn出荷依頼) '出荷依頼データ For Each c In .Range("A2", .Range("A" & Rows.Count).End(xlUp)) If c.Value = cd Then ' 出荷コード 商品ABBR 出荷日(シリアル値) If io商品(fnOrdered, cd, c.Offset(, 1).Value, dldate:=c.Offset(, 3).Value2) Then MsgBox "この出荷コード:" & cd & "は出荷指示済みです" Else ' 出荷コード 商品ABBR 数量 出荷日 buf = io商品(fnGet, cd, c.Offset(, 1).Value, c.Offset(, 2).Value, c.Offset(, 3).Value) If IsArray(buf) Then Call make出荷指示書(fnPut, buf) End If End If Next make出荷指示書 fnPut, False '最終データの小計処理 End With End If Next End Sub ●引当更新用に Module4 を。(実装部分ははずき、枠のみ) Option Explicit '標準モジュール Module4 Sub 出荷引当実行(cds As Variant) End Sub (ぶらっと) ---- 「移動」について再度確認しました ここに数値を入れることで在庫から数量を差し引くと同時に「倉庫間の移動作業が発生した」というフラグが立ち、 そのフラグを元に作業場に指示が行くとのこと。 フラグ云々は今回の作業には関係ないんですが、 ・出荷指示書作成はなし ・履歴(日付・数量)は残す必要がある ・ここに数字が入ったら引当可能在庫から差し引く この作業は必要になります。 > 3.出荷指示の際に、このチェックをしない、引当更新の際もチェックしない。 > さらに、履歴セットは引当更新でもやらないと、そういうことなら、引当更新は、二重更新になってもやむなしと > いうことで、指示書の数量から引当可能在庫のレスのみを行うようにするけど、どう? チェックは引当更新の際には行いたいです。 引当更新が二重になると逆に更新漏れなどで在庫が合わなくなる可能性があるので… >できるといったけど、今、できるようになっているということじゃないよ 勘違いすみませんm(__)m 再度アップしていたコードで実行してみました。 小計も大丈夫でした。ありがとうございます。 一点お聞きしたいのですが、現在の在庫ファイルの「賞味期限」の欄で、最終行ではなく途中の行に空欄や 「-」などの日付ではない文字が入っている部分があります。(書式自体は日付型にしています) 恐らく前の日のファイルから手入力でデータをコピーして、在庫がなくなってしまった部分を単純に空欄に してしまったものだと思います。 今後は行間が空かないようにファイルを作成していく予定ですが、万が一やむを得ず空欄ができてしまった場合、 「0」を入力→表示上は「1900/1/0」ということで問題はないでしょうか? (らんきち) ---- まず、1つは朗報(?) 1004がわかった。実は、今回のコード、開発そのものは2003環境でやっている。で、(らんきち)さんは2007だったよね。 今、(まだ苦手なのであまり使わない)2010環境で動かすと再現。 で、どちらが「論理的か」というと、2010(2007)だね。 2003だと、非表示であっても、作成されたシートがActiveSheetとして扱われる。 本件、どちらでも対応するのは、ごくごく簡単なので次回の変更連絡で、連絡する。 で、そのとき、シートの保護はどうしょうか。非表示OKなら保護無しでいいなら、今のままにするし 非表示でも保護をかけておきたいのなら、そのように。いかようにでも。ただし、保護パスワードあるなら教えて。 (雛形シート保護でも、出来上がりの出荷指示書は保護、はずすんだよね) 履歴フィールド、首をかしげるところもあるけど、なんとなくわかってきた。 逆に質問。 通常の出荷コードならU列以降にセットすればいいとして、もし、出荷以来データにPMとかPM2とかいったものがあった場合 処理としてはどうすればいい? それが当日出荷なのか翌日出荷なのか。出荷日と実行時点の日付を比較するの? それと、ここまで書いてふと。 今の今まで、1つの出荷依頼データ(複数行)の出荷日は「出荷すべき日」で、1つだと思っていた。 で、それが作業の関係で当日だったり翌日だったり、それは「結果」だと思っていたけど、そうじゃなく 最初から、この行は何月何日に出荷しなさいと指定するんだね。 わぁ、これは少しロジックに影響するなぁ。 もう1つの質問、もし、コメント列をいれると、以降の列は、それぞれ1つずれていく? に対しても確認お願い。 ずれるとすると、今、ホットな話題の履歴列も、L列からじゃなく、M列から? いずれにしても、これらの質問に答えてくれれば、出荷指示書作成も完成間近かな。 >「0」を入力→表示上は「1900/1/0」ということで問題はないでしょうか? むしろ、賞味期限欄を「空白」にしてくれる?で、それを処理対象外にするので。 賞味期限切れにするのも悪くはないけど、その判断の前に他の項目でDictionaryなんかを生成しちゃっているので具合が悪くなるところが でてくる心配もあって。 (ぶらっと) ---- とりあえず雛形コピーの件、2003/2007いずれでもOKにする対応。(その他の件は、そちらの確認をもらってから) make出荷指示書のfnInitialブロックを Case fnInitial shn = "出荷指示_" & v & "_" & Format(CDate(dicO(v)(1)), "yy-mm-dd") If IsObject(Evaluate("'" & shn & "'!A1")) Then If MsgBox(shn & "がすでに存在します。削除して置き換えていいですか?", vbYesNo) = vbNo Then Exit Function Application.DisplayAlerts = False Sheets(shn).Delete Application.DisplayAlerts = True End If Sheets(tpl出荷指示).Copy After:=Sheets(Sheets.Count) With Sheets(Sheets.Count) .Visible = True .Name = shn .Unprotect Password:="abc" End With first = True comQty = 0 comLine = 0 なお、.Unprotect Password:="abc"で、保護パスワードがなければPassword:=は不要。 (↑はパスワードありで、仮に"abc"としている) (ぶらっと) ---- >ぶらっと様 シートの件、ありがとうございます。 シートは保護をかけておこうと思います。パスワードは無しです。 >通常の出荷コードならU列以降にセットすればいいとして、もし、出荷以来データにPMとかPM2とかいったものがあった場合 >処理としてはどうすればいい? それが当日出荷なのか翌日出荷なのか。出荷日と実行時点の日付を比較するの? 出荷日と実行時の比較ではなく、出荷日を「m/d」の形式で入力します。 比較になると休日を挟んだ場合にややこしくなりますし、出荷依頼も 「この“PM”は11/14出荷」という感じで来ますので。 この場合、例えば今日「11/14(月)出荷」(履歴に曜日は入りません)というものを今日(11/11)に入力した場合、 土日が休みなので「翌日出荷」扱いになり、Q列に入力します。 ※緊急時や繁忙期は土曜日出荷などもあります。それは依頼書に書いてあります。 そして出荷当日(11/14)になったらS列に移すという感じです。 ただし引当自体はかけるので引当可能在庫からは差し引きます。 >この行は何月何日に出荷しなさいと指定するんだね はい。出荷コード「PM」「PM2」以外は当日出荷で当日入力するのですが、この二つの出荷コードに関しては 出荷日を指定することになります。 >コメント列をいれると、以降の列は、それぞれ1つずれていく? >ホットな話題の履歴列も、L列からじゃなく、M列から? はい。E列にコメントを入れて以降は1つずつずれるので、履歴列もM列からになります。 改めて整理しますと、 A列:商品ID B列:入荷日 C列:出荷保留 D列:賞味期限 E列:コメント F列:ロットNo G列:入荷数量 H列:前日在庫 I列:引当可能在庫 J列:倉庫にある未処理分含めた在庫 K列:キャンセル L列空白でM列が移動、N〜S列が翌日以降出荷(2列ずつ3日分)、T・U列が当日出荷の「PM」「PM2」(入力済みのものを前のファイルから移動) V列以降が当日入力の当日出荷の分になります。 >賞味期限欄を「空白」にしてくれる? 了解いたしました。 なんか…さきほど別の在庫ファイルでフォームは全体的に同じなのに「PM」「PM2」が存在しないものがあるという 恐ろしい情報を聞きましたが、ここはレイアウトを統一してもらうようにします… ★シート非表示の件は解決しました。保護しても大丈夫です。 (らんきち) ---- 在庫引当の件でもう一点確認です。 一度に複数の出荷依頼書が来た場合、一つ入力して指示書作成する度に「在庫更新」で引当可能在庫から差し引く 処理をしたいです。 というのも、複数の依頼書の中に以前お話しした「特別な指示で出荷するもの(普段は出荷保留)」というものが 存在することがあります。 その際に保留フラグを解除したり、その次の依頼書では保留フラグを立てたりしなければならないので、ここで 作成の都度に引当可能在庫を更新しておかなければ数量がおかしくなると思うので… 指示書作成とまったく同時ではなく、できれば 「指示書作成メニュー(ボタン)」で指示書を作成 ↓ 「コマンドボタン『在庫更新しますか?Yes/No』で在庫更新」 このような処理をイメージしていますが大丈夫でしょうか? (らんきち) ---- 今、こちらでメモを書いてアップしようとしたら、そちらからのレスがあったので、まず、それから。 >出荷日と実行時の比較ではなく、出荷日を「m/d」の形式で入力します。 ここでいう出荷日とは、出荷依頼データ(Sheet2)のD列のことだね。出荷日を入力するのは 他の出荷コードでも同じでしょ。 >今日(11/11)に入力した場合、土日が休みなので「翌日出荷」扱いになり、Q列に入力します。 PM だったら新レイアウトではR列だと思うけど、それはさておき。 これは、現在、手入力でそうしているということでしょ? 聞いているのは、これをVBAで履歴欄にセットしようとしたら、どの列になるの?ということ。 VBAからわかるのは、11/11 と PM だけ。じゃぁ、これは N列?P列?R列?T列? 出荷コードが同じなんだから、もう、これは、処理している今日が何日かで判定せざるを得ない。 ただ、土日はなんとかなるとして、祝日や、例外はお手上げだね。 ★現在は、手作業なので人間が判断して、なんとでもできることでも、プログラムがやるとなると きまりきったことしかできない。そのところを、現場の人としっかり検討したうえで仕様をきめてもらわないと。 >それは依頼書に書いてあります。 依頼書に書いてあっても、履歴作成のプログラムは、それが読めないよ。プログラムに、それをさせるなら 何かの条件(違うコードとか)が必要。 ★そもそも、3日後出荷とか、2日出荷とか、人間系の作業の流れとしては理解できるけど たとえば、このシートを1年後に見た場合、2日後出荷?これって、いつ出荷されたんだろう? そうなるよねぇ。なので、この部分のレイアウトには違和感がある。 (でも、それは、こちらが悩むことじゃないけどね) >出荷コード「PM」「PM2」以外は当日出荷で当日入力するのですが、この二つの出荷コードに関しては 出荷日を指定することになります。 またわからなくなった。当日出荷というのは、新レイアウトでT列、Q列だよね。(PM,PM2の場合) 当日出荷であろうが、いつの出荷であろうが、PM,PM2以外は出荷依頼データに記載された出荷日で 新レイアウトのV列以降に記載されるんじゃないの? (だから、プログラム上は当日出荷でもV列以降はありうる) >★シート非表示の件は解決しました。保護したらまだ今の段階ではエラーが出ます。 ん?どんなエラー? 最後にアップしたCase fnInitial ブロックに .Unprotect Password:="abc" これは、いれてくれてる?パスワードがないということなら、.Unprotect だけでいいけど。 >一つ入力して指示書作成する度に「在庫更新」で引当可能在庫から差し引く処理をしたいです。 今、考えている引当更新(在庫更新じゃないよ。あくまで引当可能在庫の更新)は 出荷指示書とは別のボタンで実行。出荷依頼データ(Sheet2)の情報から、引当更新をするものを 選択して(ここのイメージと方法は、出荷指示書作成と同じ)選ばれたものに関して、できあがっている 出荷指図書の情報をピックアップして、履歴欄にセット。自動的に引当可能在庫が更新される。 こんな感じ。なので、出荷指示書作成がおわったら、引き続いて、そのボタンを押してもらえればいいと おもう。もちろん、出荷指示書ボタンをおしたときに『在庫更新しますか?Yes/No』で在庫更新も同時に 行うことはできるけど。 ★で、続いて、用意していたメモを。 新しい在庫シートのレイアウトベースに、当方の考え方を整理。 そちらの考え方と齟齬がないか、現場の人も含めて、よく確認しておいて欲しい。 C列 引当保留 「空白」なら引当可能。 D列 賞味期限 日付型。ただし、「空白」なら引当対象外 M列 倉庫移動に伴う出荷数量 担当が直接入力 なお、出荷ステータスの3行目含め、M3,M4,M5はロジックでは相手にしていないので任意の文字列設定OK。 N,O列 3日後出荷 出荷コードPMとPM2。(出荷指示書は通常出荷と同じく作成必要) 出荷依頼データの出荷日と「処理する当日」の日付で判定。 出荷ステータス3行目は、N3,O3 それぞれ別。N4:O4 は結合OK。(ロジックでは相手にしていない) P,Q列 2日後出荷 その他はN,O列と同じ要件。 R,S列 1日後出荷 その他はN,O列と同じ要件。 T,U列 当日出荷 その他はN,O列と同じ要件。 V列以降 PM,PM2以外の出荷 N列以降の3行目 出荷ステータス 「空白」なら引当済み、未出荷 「空白以外」なら出荷済み M列〜U列の4行目 ロジックでは相手にせず。任意。 V列以降の4行目 出荷日。「空白」なら対象外にするロジックになっている。 なお、在庫数量は、計算式を設定してもらって計算させることを考えているが、 引当可能在庫 は 「入荷数量」から M列以降の数量の合計を引く。 倉庫現在在庫は 「入荷数量」から M列の移動数量と N列以降で3行目が「空白ではない」数量を引く。 I列 引当可能在庫 計算式 たとえば I6:=G6-SUM(M6:AZ6) J列 倉庫現在在庫 計算式 たとえば J6:=G6-(M6+SUMIF(N$3:AZ$3,"<>",N6:AZ6)) 新レイアウト対応のコード改訂は後ほど。 (ぶらっと) ---- >聞いているのは、これをVBAで履歴欄にセットしようとしたら、どの列になるの?ということ。 >VBAからわかるのは、11/11 と PM だけ。じゃぁ、これは N列?P列?R列?T列? もしかしてまだ的外れだったらすみません。 翌日以降出荷分(PM・PM2)のレイアウトに関しては改めて担当者に確認しました。 今当日入力している「PM・PM2」は一つだけで(2日後出荷分のみ)で、他の「翌日出荷」と「当日出荷」の「PM・PM2」は あくまでも前のファイルから引き継いだもので、当日の入力自体には関係がないんです。 (3日後はこの際省いてもいいとのこと) ただ「当日入力しないけど引き当てがかかっている数がある」ということだけが重要なんです。(引当可能在庫から差し引くため) なので、今複数行ある当日入力分以外の(前のファイルから引き継いだ)「PM・PM2」を「繰り越し分」という形で 一つの列にまとめたいと思います。 考えているのは下記のような内容です。 ※11/11時点の内容 N O P Q 〜 4 11/14 11/14 11/11 〜 5 繰越分 PM PM2 R10 〜 ※「繰越分」を記入する列は5行目でなくてもかまいません これで出荷コードがユニークなものになり、O列以降が当日入力する分ということで統一できますがどうでしょうか? 統合したPM・PM2は別シートまたは別ファイルに「月間シート」のようなものを作り、一か月分のPM・PM2を日毎の履歴で 転記したいと思います。 シート保護の件は解決しました。こちらの作業ミスでした。申し訳ございませんm(__)m その他の内容は改めて続きを書きます。 (らんきち) ---- >出荷指示書作成がおわったら、引き続いて、そのボタンを押してもらえればいいとおもう。 はい、それでお願いします。 在庫数量の計算式ですが、よく考えたら今の段階では入荷時は前日在庫に自分で計算して手打ちで入力してるんです。 なので今後入荷処理をする際のことを考えるともしかしたら「入荷数」「前日在庫」の他に「現在庫」を用意して、 「現在庫」=「入荷数」+「前日在庫」 とした方がよいのかな、と… もしそうなると、仮に下記のようなレイアウトにするとして ※計算式が入れやすいように「移動」と「繰越」を入れ替えました 元の方がよければそれでもいいです G H I J K L M N O P 〜 入荷数 前日在庫 現在庫 引当可能在庫 倉庫在庫 キャンセル 繰越 移動 PM 〜 引当可能在庫=現在庫 - N列以降の合計 倉庫現在在庫=現在庫 + キャンセル - O列以降の合計 のようになります。 3行目というのは以前お話されてた「出荷確定」の項目のことでしょうか。 これは列ごと(出荷コードごと)に「出荷確定」の文字を入れるということになるんでしょうか。 (それはそれで大丈夫です) ただ、各行の最後尾に現在P列以降の合計を入れているのですがそれは可能ですか? (らんきち) ---- ●アップ後、一部訂正。 ちょっと、やぼ用あり、なかなか時間がとれなかった。 ところで、インターバルがあいたおかげで(?)霧が晴れたように感じている。 ずっと、今まで、このブックは、「商品別在庫マスタ」だと思っていて、たまたま、それを使って 「出荷指示」を行うと理解していて「在庫マスタ」なら、こんな持ち方はおかしいとか、 前日在庫には「すでに引き当てられたもの」があるはずだから、そんなものを相手にしては具合が悪い。 だから引当可能在庫欄を用意しようとか、また、「在庫マスタ」なのに、「当日」はいいとして 「翌日」だの「翌々日」といった項目があるのが、理解できないとかとか。 もう一度、このトピを(前トピふくめて)通読して、あれ? このブックは「在庫マスタ」ではなく「今日、これから一日の出荷指示」をするために用意されたブックなのでは? で、このブックは、今回の処理の世界とは別に手作業か自動処理かは別にして 前日在庫と、出荷指示済みで、前日の時点で「まだ出荷されていない(PM,PM2含めた)出荷指示」の履歴、これに 今日の移動出庫欄がゼロ、今日のPM指示、PM2指示欄もゼロにしたもの これらが朝、準備されていて、これを元に 「今日一日の作業」だけを行う。 このように思い当たった。これって正しい? もし、こうなら、今まで、こちらが、「明日以降も、このブックのまま継続して存在する」ための処理ロジックや そのために、こちらが追加提案した新設項目も、ほとんど不要かもしれない。 なので、以下の項目、なくてもいいよ。 ・入荷数量欄 ・3行目の出荷確定行 ところで履歴欄、前日から繰り越されたPM,PM2欄は、従来通り(そこがどの列かを明確にしてくれれば)あってもいいし 集約された1つの列でもいい。 それと、右の方に何か計算式が入った、履歴ではないセルがあるようだけど、それは何列? あるいは、それが変動するとしたら、何かその場所を特定できる項目名なんかがある? 出荷履歴列が、どこまであるのかを、コードで認識する必要があるので。 (現在のコードは、その行に何か値があればすべて履歴だと判断している) ●上で述べたことを検討し、最終的なレイアウトを教えてくれる? そちらのやりやすい、理解しやすい、慣れた形でいいので。 (ぶらっと) ---- ●アップ後、一部訂正 前レスで理解した(と思っている)ことをベースに。 >もしそうなると、仮に下記のようなレイアウトにするとして >※計算式が入れやすいように「移動」と「繰越」を入れ替えました 「繰越」は、前日までのPM,PM2の出荷指示で未出荷の部分の数量の合計が入っているということだね。 これでもいいよ。 >在庫数量の計算式ですが、よく考えたら今の段階では入荷時は前日在庫に自分で計算して手打ちで入力してるんです。 >なので今後入荷処理をする際のことを考えるともしかしたら「入荷数」「前日在庫」の他に「現在庫」を用意して、 >「現在庫」=「入荷数」+「前日在庫」 とした方がよいのかな、と… これまでのコードで「在庫」はいっさい参照していない。で、前レスの理解で、「引当可能在庫」計算のためは「前日在庫」だけは使おうかなと。 これまでのレスでは、ここを、前日在庫は使わない計算式でいかがと提案していたけど、前レスの理解の結果、ここは、コード処理内、計算式いずれでも 引当可能在庫 = 前日在庫 - 移動(これは今日の移動実績という意味だよね)- PM等も含めた履歴合計 としたほうがいいかなと思っている。 ただし、「現在庫」は使わない。他の目的で使うなら、いかような式でもOKで、そちらの都合のよいように。 繰り返すけど、出荷指示 および これからの 引当履歴更新 では 「前日在庫」も「現在在庫」も更新しないよ。 「現在在庫」は、もし、将来、出荷確定という機能をこのブックでやるとすれば、そこで更新すべき項目。 > G H I J K L M N O P 〜 >入荷数 前日在庫 現在庫 引当可能在庫 倉庫在庫 キャンセル 繰越 移動 PM 〜 > 引当可能在庫=現在庫 - N列以降の合計 上でもいったけど移動が「今日の移動」なら 引当可能在庫 = 前日在庫 - 移動 - N列以降の合計 じゃないの? >倉庫現在在庫=現在庫 + キャンセル - O列以降の合計 まず、キャンセル。今まであまり気にとめなかった。なにか、摘要のようなもの(キャンセルマークとか) でも、ここにも、なにか数字が入っているのかな?それは、どんな数字で、そこの数字は、どの数字を更新するのか教えて? それと、「倉庫現在在庫」と「現在庫」って、どう違うの? >ただ、各行の最後尾に現在P列以降の合計を入れているのですがそれは可能ですか? 前レスでレスしたとおり。 いずれにしても前レスの理解は、「このブックは今日一日の作業のためのブック」というもの。 (これが間違っていれば、またまた悩み出さなきゃいけないけど。) なので、各数値項目が「今日一日だけの数値(朝一番はゼロ)」なのか、「前日の数値、あるいは前日までの累計」なのか 今後、区別してやりとりしていかなきゃいけないね。 (ぶらっと) ---- >このブックは「在庫マスタ」ではなく「今日、これから一日の出荷指示」をするために用意されたブックなのでは? >前日在庫と、出荷指示済みで、前日の時点で「まだ出荷されていない(PM,PM2含めた)出荷指示」の履歴、これに >今日の移動出庫欄がゼロ、今日のPM指示、PM2指示欄もゼロにしたもの これらが朝、準備されていて、これを元に >「今日一日の作業」だけを行う。 はい、その通りです。 おっしゃるように現在は「当日一日の出荷指示」のために作られたものです。 ただ、現在入荷があった時もこのブックに手作業で入力しているので、今後は 「当日の入荷入力」「当日の出荷入力」両方をこのブックで行いたいということです。 なので「入荷数量欄」はむしろあった方がいいです。 >それと、右の方に何か計算式が入った、履歴ではないセルがあるようだけど、それは何列? >あるいは、それが変動するとしたら、何かその場所を特定できる項目名なんかがある? 履歴ではないセルは、各行ごとの合計欄です。 履歴自体は30列あれば足りるのでAS列に「当日出荷入力したものの合計」(上のレイアウトで言うとP列以降)、 AT列に「当日入力+移動+翌日以降出荷分の合計」(N列以降の合計)が入ります。 特定できる項目名としては、AS列5行目に「当日合計」、AT列5行目に「総合計」と入っています。 >上でもいったけど移動が「今日の移動」なら 引当可能在庫 = 前日在庫 - 移動 - N列以降の合計 じゃないの? はい、その通りです。「移動」と「繰越」を入れ替えたので 引当可能在庫 = 前日在庫 - N列以降の合計 となります。 現在「前日在庫」は前の日のブックから手入力でコピーしていますが、「入荷処理」が済んだものも「前日在庫」に入れています。 (引当可能在庫には計算式が入っているので) でもよく考えると今後入荷処理をした場合は引当可能在庫に入荷数を足して入れればいいわけで、 引当可能在庫 = 前日在庫 - N列以降の合計 + 入荷数 とすれば「現在庫」の項目は必要ないですね… 私も混乱していました キャンセルについて 商品のキャンセル戻りがあった場合、「キャンセル」の中に数字を手入力します。 ただしこの時点では「引当可能在庫」には入れられないので(入荷処理が終わってない)、「倉庫現在庫」にその数字を足します。 翌日、前日在庫に手入力で移しています。 で、当日入力以外の「PM・PM2」を「繰越」に統一しようという話ですが、「倉庫現在庫」の計算式を改めて確認したところ、 当日入力しないものでも「当日出荷PM・PM2」と「翌日出荷のPM・PM2」はやはり別に分けておく必要があることに気がつきました。 というのも、「倉庫現在庫」を出す数式が 引当可能在庫+キャンセル+翌日以降出荷分合計 で、「翌日以降出荷分合計」には既に入力済みで翌日出荷の「PM・PM2」が含まれているんです。 ※上に書いた「倉庫現在在庫=現在庫 + キャンセル - O列以降の合計」は間違いです。すみません。 ただし出荷コードを「PM」「PM2」と分ける必要はないので、1列にまとめようと思います。 となると、下記のようなレイアウトになります ※すみません、また繰越と移動入れ替えました A列:商品ID B列:入荷日 C列:出荷保留 D列:賞味期限 E列:コメント F列:ロットNo G列:入荷数量 H列:前日在庫 I列:引当可能在庫 → 【前日在庫 - M列以降の合計 + 入荷数】 J列:倉庫にある未処理分含めた在庫 → 【引当可能在庫 + キャンセル + N〜P列の合計】 K列:キャンセル L列:空白 M列:移動 N列:繰越(翌日出荷のPM・PM2 ※入力済み) O列:PM(当日入力) P列:PM2(当日入力) Q列:当日出荷(当日出荷のPM・PM2 ※入力済み) R列以降:当日出荷の入力 AS列:当日出荷分の各行の合計(Q列以降の合計) AT列:AS列に移動(M列)と翌日以降出荷(N〜P列)を足したもの=M列以降の合計 AS列・AT列はとにかく列の最後尾に来れば変動してもかまいません。 >いずれにしても前レスの理解は、「このブックは今日一日の作業のためのブック」というもの はい、それで大丈夫です。 数値項目の中で当日朝一番の時点で数字が入っているものは ・H列 前日在庫 ・I列 引当可能在庫(数式) ・J列 倉庫現在庫(数式) ・N列 繰越 ・Q列 当日出荷 数字が入っていないものは ・G列 入荷数 ・K列 キャンセル ・M列 移動 ・O・P列 当日入力の「PM・PM2」 ・R列以降 になります。 Q列の「当日出荷」がロジックで邪魔であればAR列など別の場所にあってもかまいません(当日出荷の数だけが必要なので) (らんきち) ---- ほぼイメージがつかめた。いくつか。 1.まず、Q列。当日出荷「予定」のPM,PM2の出荷実績だと思うんだけど正しい? (つまり、O列、P列の出荷予定の内、出荷されたもの) ということは、PM,PM2は、今日出荷されるわけだから、朝一番は、ここはゼロでは? (説明では朝一番に数字がはいっていると書いてあるけど) 2.次に、R列〜AR列が、いわゆる出荷指示履歴だと思うけど、朝一番は数字がはいっていない? ということは、実際に出荷された時にはじめて数字が入る?これは正しい? そちらの今回の説明に、 I列:引当可能在庫 → 【前日在庫 - M列以降の合計 + 入荷数】 これは計算式でセットしてくれるんだろうから こちらとしては、ここの数字を使えばいいと思うけど、でも、朝一番にR列以降の数字がゼロだとしたら 「M列以降の合計」にも反映しないし、すると、引当済なのに、引当可能になるよ? 当方の構想では、出荷指示書を作成した段階では、ただの紙切れなので、在庫シートは更新なし。 で、この後の「引当更新」で履歴列に「指示数量」を更新しようと思っていた。 この部分、整合性について、もう一度、確認願いたい。 3.AT列(総合計)の意味がいまいち理解できていない。 AS列は当日出荷合計ということで理解はできたけど。 (ただし、2.で書いたように、Q列は出荷数だとして、R列以降の定義づけによっては????) 4.そのAT列の説明の、 AT列:AS列に移動(M列)と翌日以降出荷(N〜P列)を足したもの=M列以降の合計 この 翌日以降出荷(N〜P列)って正しい?念のため確認願う。 ● 質問事項については回答してほしいけど、別の観点で、これから準備する「引当更新」で コードとしては、在庫シートのどの列に何を、どのような計算をしてセットすべきか それについて、そちらの考えていることを説明してくれる? ある意味(冷たく言えば)その要求仕様どおりにコードを書けば、あとは、そちらの入力や 計算式で矛盾のない形でシートがメンテナンスされる、こちらとしてはそれでいいのかもしれないので。 (ぶらっと) ---- >まず、Q列。当日出荷「予定」のPM,PM2の出荷実績だと思うんだけど正しい? はい、そうです。ただ、基本的に「PM・PM2」は「2営業日後出荷」のものを入力するので、 Q列には二日前にO・P列に入力したものの合計が入ることになります。 (N列が前日に入力したもの) >R列〜AR列が、いわゆる出荷指示履歴だと思うけど、朝一番は数字がはいっていない? > ということは、実際に出荷された時にはじめて数字が入る?これは正しい? はい、その通りです。 >引当済なのに、引当可能になるよ? 思い違いだったらすみません… 朝一番の「前日在庫」には前の日の「倉庫現在庫」が入ります。 その時はR列以降には数字は入っていませんが、前日までに引当てられた入力済みのPM&PM2が N列とQ列に入っていますので、引当済みのものは差し引かれたものが「引当可能在庫」の欄に入ると思うのですが… >出荷指示書を作成した段階では、ただの紙切れなので、在庫シートは更新なし。 > で、この後の「引当更新」で履歴列に「指示数量」を更新しようと思っていた。 はい、それで大丈夫です。 >AT列(総合計)の意味がいまいち理解できていない AT列は当日出荷分と翌日以降出荷分+移動、つまり引当がかかっている数の合計です。 ただこの列は引当可能在庫の計算式が出しやすいように私が作ったものなので、なくてもかまいません。 元々は「引当可能在庫」の数式は「前日在庫 - AS列 - (M〜P列の合計)」でした。 >翌日以降出荷(N〜P列)って正しい? 正しい…はずです。 具体的にはAT列には =SUM(M6:AR6) という計算式が入っています。 ※AS列は =SUM(Q6:AR6) >引当更新について 例)11/14出荷、出荷コード「AF」で「商品A:500個、商品B:200個」の出荷依頼が来た場合 これがこの日最初の出荷依頼だった場合、 ・商品Aのシート(シート名は“在庫A”)、商品BのシートのR4に出荷日「11/14」を入力 ・各シートR5に出荷コードAFを入力 ・商品AのR列で、「引当可能在庫」の賞味期限の古い順に合計500個の数値を入力 (在庫数によっては数値が複数行にわたって入力される場合もあるが合計500個になるように) ・商品BでもR列に同様に200個分入力 ・引当更新で「引当可能在庫」からそれぞれの数量を差し引く 次の出荷指示ではR列の次S列に出荷日・出荷コード・出荷数を入力、同様に引当可能在庫から差し引く ※当日入力の「PM」の場合はO列、「PM2」はP列に同様に入力 このような内容で大丈夫でしょうか。 不足分は補います。 よろしくお願いします。 (らんきち) ---- Q列の意味については理解した。 なんとなく、2営業日前のPM,PM2の出荷指示は、絶対に今日の出荷になるというところが もし、例外があったらどうするんだろうとか、様々気にはなるけど、現場としては、 そのような運用であるわけで、この形(というか項目)でいいんだろうね。 (一般にWMSを構築するなら、このような決め付けた構えではなく、出荷指図済み未出荷 という 一般的な項目で対応すると思うけど) >思い違いだったらすみません… >朝一番の「前日在庫」には前の日の「倉庫現在庫」が入ります。 実際の要件は、そちらで決めることなので、思い違いがあるとすれば、そちらではなく、こちら。 ただ・・・前日在庫であろうと、倉庫現在庫であろうと、在庫というものは入庫-出庫なわけで そこに引当済みのものが控除されているということは、ありえない。 つまり、在庫の中には引当済みで、未出庫(つまり引き当ててはいけないもの)も入っていると思うけど。 > AT列は当日出荷分と翌日以降出荷分+移動、つまり引当がかかっている数の合計です。 もう少し理解に努めてみるけど、まぁ、いいかな・・・ >翌日以降出荷(N〜P列)って正しい? -- 正しい…はずです 今回の説明で項目の意味合い(そちらの実運用としての名前)がわかったので、これも、もういいです。 ●いずれにしても、今まで聞かせてもらったもので、コードを書いてみる。 今日は、あまり時間が取れないので明日以降かな。 それを、そちらで実行して、そちらのイメージどおりならそれでよし、だめだったらチューニングしよう。 ●おそらく、あらためてフルセットをアップすることになるので、このNo.2もだいぶ長くなったし No.3として立ち上げてくれたほうがいいかもね。 (ぶらっと) ---- ぶらっと様 ありがとうございます。 [[20111114163123]] で次トピ立てました ...
https://www.excel.studio-kazu.jp/wiki/kazuwiki/201111/20111110145634.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97043 documents and 608212 words.

訪問者:カウンタValid HTML 4.01 Transitional