[[20040706114101]] 『こんな在庫表を作りたいんです』(あき) ページの最後に飛ぶ

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

 

『こんな在庫表を作りたいんです』(あき)

下記のような在庫表を作りたいんです。

1日1回の在庫更新ではなく、

1日に何回か行われる仕入れの入庫時や、

お客さんが買った時の出庫時ごとに更新したいです。

要は入出庫の変動があるごとに入出庫数を入力し、

常に最新の在庫数が知りたいという表です。

私が入力するのは入庫数と出庫数のところだけで、

後は自動的にそれぞれが計算され、更新されていくといったもので、

さらには入庫累計・出庫累計もほしいんです。

という希望ばかりですいません。

一体どんな計算式をどこに入れたらそんな表ができるのでしょうか?

どなたかお力をお貸しいただけませんか?

品名   現在庫数  入庫数  出庫数  前在庫数  入庫累計  出庫累計

みかん

いちご

りんご   


 >現在庫数  入庫数  出庫数  前在庫数  入庫累計  出庫累計 

 各項目の意味を説明していただけませんか?

  (INA)


説明不足ですみませんでした。

 現在庫数は、今倉庫にある数。仕入れたとき・売ったときに更新される数。

 入庫数は、新たに仕入れたときの倉庫に収める数。

 出庫数は、お客さんに売ったときの倉庫から出る数。

 前在庫数は、新たに入出庫数を入力する前の在庫数。
 これは私が入力ミスしたときに、入力処理前の在庫数を確認するためのものですので無くてもいいとも思います。

 入庫累計は、1ヶ月のトータル入庫数。

 出庫累計は、1ヶ月のトータル出庫数。

 という意味で作成したいと考えています。
 
 こんな感じなんですが、おわかりいただけますでしょうか?(あき)


 >1ヶ月のトータル
 日付の項目(列)がないので、「1ヶ月のトータル」の定義は分かりませんが、
 簡単に作ってみたのでお試し下さい。

 Sheet1 の様式は、掲載して頂いたとおり、以下のようにして下さい。
  (なお、前在庫数は使用してません。)

     A      B        C      D      E        F        G 
 1  品名 現在庫数 入庫数 出庫数 前在庫数 入庫累計 出庫累計
 2 みかん  =F2-G2
 3 いちご  =F3-G3
 4 りんご  =F4-G4   
             ↑
           (数式)      

 1.ALT+F11キーで、VBEを起動
 2.プロジェクトウィンドウのSheet1 を Wクリック
 3.中央の真っ白なウィンドウ(コードウィンドウ)に以下のコードをコピペ

 Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Count <> 1 Then
        MsgBox "同時に複数のセルを変更することは出来ません。", vbExclamation, "エラー"
        Application.EnableEvents = False
        Application.Undo
        Application.EnableEvents = True
        Exit Sub
    End If

    If Target.Value = 0 Then Exit Sub

    Target.Select

    Application.EnableEvents = False

 '================
 '   C列 入庫
 '================
    If Target.Column = 3 And Target.Row >= 2 Then

        '色付け
        Range(Cells(Target.Row, 1), Cells(Target.Row, 7)).Interior.ColorIndex = 36

        If vbYes = MsgBox(Target.Value & "  でよろしいですか?" & Chr(13) & _
                   "入庫累計 = " & Cells(Target.Row, 6).Value & " → " & _
                   Cells(Target.Row, 6).Value + Target.Value, _
                  vbYesNo + vbQuestion, "入庫数の入力") Then

            '入庫累計
            Cells(Target.Row, 6).Value = Cells(Target.Row, 6).Value + Target.Value
        End If

        '色消し
        Range(Cells(Target.Row, 1), Cells(Target.Row, 7)).Interior.ColorIndex = xlColorIndexNone
    End If

 '================
 '   D列 出庫
 '================
    If Target.Column = 4 And Target.Row >= 2 Then
        '色付け
        Range(Cells(Target.Row, 1), Cells(Target.Row, 7)).Interior.ColorIndex = 35

        If vbYes = MsgBox(Target.Value & "  でよろしいですか?" & Chr(13) & _
                   "出庫累計 = " & Cells(Target.Row, 7).Value & " → " & _
                   Cells(Target.Row, 7).Value + Target.Value, _
                  vbYesNo + vbQuestion, "出庫数の入力") Then

            '出庫累計
            Cells(Target.Row, 7).Value = Cells(Target.Row, 7).Value + Target.Value
        End If

        '色消し
        Range(Cells(Target.Row, 1), Cells(Target.Row, 7)).Interior.ColorIndex = xlColorIndexNone
    End If

    Application.EnableEvents = True
 End Sub

  (INA)


 わー、INAさんありがとうございます。

 一瞬アルファベットの多さにどうしようっと固まってしまいました。

 今早速ためさせていただきました。
 INAさん、すごい!

 在庫表ができました!しかも入力すると確認の画面が出てきますね!

 私のようなおっちょこちょいにはとても重要です!

 ところで、Eの前在庫数の列を削除しようと思ったら「同時に複数のセルを変更することはできません」と出てしまいました、

さらにBの現在庫数の計算式を下のセルに一気にコピペしようとしたら同じメッセージが出てしまいました。

このメッセージはINAさんの計算式に入っていましたので、ミスをしないようにするための手段でしょうか?(あき)


 >Eの前在庫数の列を削除しようと思ったら
 >「同時に複数のセルを変更することはできません」と出てしまいました、

 >さらにBの現在庫数の計算式を下のセルに一気にコピペしようとしたら
 >同じメッセージが出て しまいました。

 ひとまず処理内容的に問題ないか確認して頂くためのサンプルでしたので・・(^_^;)
 以下のように修正しました。

 Eの前在庫数の列も無くしましたので、以下のようにしてください。

     A      B        C      D      E        F        
 1  品名 現在庫数 入庫数 出庫数 入庫累計 出庫累計
 2 みかん  =F2-G2
 3 いちご  =F3-G3
 4 りんご  =F4-G4   

 Private Sub Worksheet_Change(ByVal Target As Range)

    'C,D列以外は終了
    If Target.Column < 3 Or Target.Column > 4 Then
        Exit Sub
    End If

    '変化したセルが2箇所以上のとき
    If Target.Count <> 1 Then
        MsgBox "同時に複数のセルを変更することは出来ません。", vbExclamation, "エラー"
        Application.EnableEvents = False
        Application.Undo
        Application.EnableEvents = True
        Exit Sub
    End If

    '0に変化したときは終了
    If Target.Value = 0 Then Exit Sub

    Target.Select

    Application.EnableEvents = False

 '================
 '   C列 入庫
 '================
    If Target.Column = 3 And Target.Row >= 2 Then

        '色付け
        Range(Cells(Target.Row, 1), Cells(Target.Row, 6)).Interior.ColorIndex = 36

        If vbYes = MsgBox(Target.Value & "  でよろしいですか?" & Chr(13) & _
                   "入庫累計 = " & Cells(Target.Row, 5).Value & " → " & _
                   Cells(Target.Row, 5).Value + Target.Value, _
                  vbYesNo + vbQuestion, "入庫数の入力") Then

            '入庫累計
            Cells(Target.Row, 5).Value = Cells(Target.Row, 5).Value + Target.Value
        End If

        '色消し
        Range(Cells(Target.Row, 1), Cells(Target.Row, 6)).Interior.ColorIndex = xlColorIndexNone
    End If

 '================
 '   D列 出庫
 '================
    If Target.Column = 4 And Target.Row >= 2 Then
        '色付け
        Range(Cells(Target.Row, 1), Cells(Target.Row, 6)).Interior.ColorIndex = 35

        If vbYes = MsgBox(Target.Value & "  でよろしいですか?" & Chr(13) & _
                   "出庫累計 = " & Cells(Target.Row, 6).Value & " → " & _
                   Cells(Target.Row, 6).Value + Target.Value, _
                  vbYesNo + vbQuestion, "出庫数の入力") Then

            '出庫累計
            Cells(Target.Row, 6).Value = Cells(Target.Row, 6).Value + Target.Value
        End If

        '色消し
        Range(Cells(Target.Row, 1), Cells(Target.Row, 6)).Interior.ColorIndex = xlColorIndexNone
    End If

    Application.EnableEvents = True
 End Sub


INAさん、ありがとうございます。

もう少しお付き合いください、今度は入庫数に入力しても現在庫数に数が入ってくれません。

逆に出庫数に入力すると、現在庫数に数字が入ります。

せっかく教えていただいているのにすいませんが、ご確認していただけますか?(あき)


 数式のミスです。

     A      B        C      D      E        F        
 1  品名 現在庫数 入庫数 出庫数 入庫累計 出庫累計
 2 みかん  =E2-F2
 3 いちご  =E3-F3
 4 りんご  =E4-F4  

   (INA)


INAさん、本当にありがとうございました!

ばっちり大丈夫になりました。

うれしいです!

この表を使ってしっかり在庫管理していきます。

またよろしくお願い致します。

ありがとうございました。(あき)


 喜んで頂けて幸いです。ヾ(^_^)

  (INA)

私も↑を参考に作ってみました。で、A列に一行挿入してD列=入庫、E列=出庫にしたいのですが・・・D列は数値を変えてうまくいったのですがE列がうまくいきません。どのように数値を変更すればよいですか?(魚)

 できれば過去ログに質問を追加するのではなく、新規にスレを立ててください。
 その上で参照しているスレッドにリンクを貼るなどして下さい。

 さて、INAさんのコードをちょっとだけ変えました。
 コードの意味を理解すれば、それほど大変な変更は必要ないことが理解できると思いますが。
 (ROUGE)
'----
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column < 4 Or Target.Column > 5 Then Exit Sub
    If Target.Count <> 1 Then
        MsgBox "同時に複数のセルを変更することは出来ません。", _
            vbExclamation, "エラー"
        Application.EnableEvents = False
        Application.Undo
        Application.EnableEvents = True
        Exit Sub
    End If
    If Target.Value = 0 Then Exit Sub
    Target.Select
    Application.EnableEvents = False
'================
'   D列 入庫
'================
    If Target.Column = 4 And Target.Row >= 2 Then
        Range(Cells(Target.Row, 1), Cells(Target.Row, 7)) _
            .Interior.ColorIndex = 36
        If vbYes = MsgBox(Target.Value & "  でよろしいですか?" & Chr(13) & _
            "入庫累計 = " & Cells(Target.Row, 6).Value & " → " & _
            Cells(Target.Row, 6).Value + Target.Value, _
            vbYesNo + vbQuestion, "入庫数の入力") Then
            Cells(Target.Row, 6).Value = _
                Cells(Target.Row, 6).Value + Target.Value
        End If
        Range(Cells(Target.Row, 1), Cells(Target.Row, 7)) _
            .Interior.ColorIndex = xlColorIndexNone
    End If
'================
'   E列 出庫
'================
    If Target.Column = 5 And Target.Row >= 2 Then
        Range(Cells(Target.Row, 1), Cells(Target.Row, 7)) _
            .Interior.ColorIndex = 35
        If vbYes = MsgBox(Target.Value & "  でよろしいですか?" & Chr(13) & _
            "出庫累計 = " & Cells(Target.Row, 7).Value & " → " & _
            Cells(Target.Row, 7).Value + Target.Value, _
            vbYesNo + vbQuestion, "出庫数の入力") Then
            Cells(Target.Row, 7).Value = _
                Cells(Target.Row, 7).Value + Target.Value
        End If
        Range(Cells(Target.Row, 1), Cells(Target.Row, 7)) _
            .Interior.ColorIndex = xlColorIndexNone
    End If
    Application.EnableEvents = True
End Sub

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.