体重が3kg増えました(照)、どうもoReです。
今回は、データベースの項目を増やしていきます。
だって、在庫数だけ数えてもねぇ…
いろんなデータがあると解析できると思うの。
入庫処理・出庫処理プログラムまとめ
Mainフォームに入庫処理と出庫処理を書いていますが、
項目を追加する場合、この2つのプロシージャに追加しないと
いけなくなるので、今のうちにまとめちゃいましょう。
入庫処理と出庫処理のコードを見るとほぼ同じですよね。
違いといえば
・在庫数の増減の部分
在庫数をプラスするか、マイナスするかの違い。
'入庫処理 Knskcell.Offset(0, 4) = Knskcell.Offset(0, 4) + TextBox3 '出庫処理 Knskcell.Offset(0, 4) = Knskcell.Offset(0, 4) - TextBox3
・入出庫履歴シートへの入庫か出庫かの出力部分
入庫と出力するか、出庫と出力するかの違い。
'入庫処理 .Range("I3") = "入庫" '出庫処理 .Range("I3") = "出庫"
・メッセージの部分
『入庫しました。』と表示するか、『出庫しました。』と表示するかの違い。
'入庫処理 MsgBox "入庫しました。" '出庫処理 MsgBox "出庫しました。"
のみです。
Mainフォームに新たにNyuSyukkoプロシージャを作成します。
共通する部分はコピペしてサクッとまとめましょう。
↓こんな感じ
'入出庫処理
Private Sub NyuSyukko(ByVal NS As String) '引数NSは文字列で、入庫か出庫をちょうだい!!
Dim Knskcell As Range
If ComboBox1 = "" Then
MsgBox "入出庫者名を入力してください。"
ElseIf TextBox2 = "" Then
MsgBox "バーコードデータを入力してください。"
ElseIf TextBox3 = "" Then
MsgBox "個数を入力してください。"
Else
Set Knskcell = Range("C:C").Find(what:=TextBox2, lookat:=xlWhole)
If Knskcell Is Nothing Then
MsgBox "部品が登録されていません。"
Else
If NS = "入庫" Then '引数NSが入庫の場合
Knskcell.Offset(0, 4) = Knskcell.Offset(0, 4) + TextBox3
ElseIf NS = "出庫" Then '引数NSが出庫の場合
Knskcell.Offset(0, 4) = Knskcell.Offset(0, 4) - TextBox3
End If
'ここに項目追加処理を書くよ
With Sheet2 '入出庫履歴シートへ出力
.Rows(Rows.Count).Delete
.Rows(3).Insert
.Range("B3") = Now
.Range("C3") = ComboBox1
.Range("D3") = Knskcell.Offset(0, -1)
.Range("E3") = Knskcell.Offset(0, 1)
.Range("F3") = Knskcell.Offset(0, 2)
.Range("G3") = Knskcell.Offset(0, 3)
.Range("H3") = TextBox3 * 1
.Range("I3") = NS '引数NSの文字列を出力
End With
Call UserForm_Initialize
MsgBox NS & "しました。" '引数NSの文字列に しました。を合体
End If
End If
End Sub
コマンドボタン1クリックを変更
'出庫ボタンクリック
Private Sub CommandButton1_Click()
Call NyuSyukko("出庫") '引数に文字列の出庫を渡すよ!!
End Sub
コマンドボタン2クリックを変更
'入庫ボタンクリック
Private Sub CommandButton2_Click()
Call NyuSyukko("入庫") '引数に文字列の入庫を渡すよ!!
End Sub
動作確認しましょう。
ちゃんと、入出庫していますか?
データベースの項目追加
とりあえず、以下の項目を追加します。
・最大在庫数・最少在庫数・過剰在庫数・在庫不足数
・部品注文数・部品単価・部品合計金額
↓データベースシートに追加
では、追加した項目の処理を書いていきましょう。
過剰在庫数処理
・過剰在庫数=在庫数-最大在庫数
With Knskcell
.Offset(0, 7) = .Offset(0, 4) - .Offset(0, 5) '過剰在庫数=在庫数-最大在庫数
End With
在庫不足数処理
・在庫不足数=最少在庫数-在庫数
With Knskcell .Offset(0, 7) = .Offset(0, 4) - .Offset(0, 5) '過剰在庫数=在庫数-最大在庫数 .Offset(0, 8) = .Offset(0, 6) - .Offset(0, 4) '在庫不足数=最少在庫数-在庫数 End With
部品注文数処理
・部品注文数=最大在庫数-在庫数
With Knskcell
.Offset(0, 7) = .Offset(0, 4) - .Offset(0, 5) '過剰在庫数=在庫数-最大在庫数
.Offset(0, 8) = .Offset(0, 6) - .Offset(0, 4) '在庫不足数=最少在庫数-在庫数
.Offset(0, 9) = .Offset(0, 5) - .Offset(0, 4) '部品注文数=最大在庫数-在庫数
End With
部品合計金額処理
・部品合計金額=在庫数×部品単価
With Knskcell
.Offset(0, 7) = .Offset(0, 4) - .Offset(0, 5) '過剰在庫数=在庫数-最大在庫数
.Offset(0, 8) = .Offset(0, 6) - .Offset(0, 4) '在庫不足数=最少在庫数-在庫数
.Offset(0, 9) = .Offset(0, 5) - .Offset(0, 4) '部品注文数=最大在庫数-在庫数
.Offset(0, 11) = .Offset(0, 4) * .Offset(0, 10) '部品合計金額=在庫数*部品単価
End With
動作確認しましょう。
入出庫した際、過剰在庫数・在庫不足数・部品注文数・部品合計金額が
算出されていますか?
まとめ
特になし!!
次回 もうちょい項目追加するよ
コメント
初めまして、しんと申します。毎回オレグラミングで、VBAを勉強させていただいています。
入出庫をまとめたVBAについて質問させて下さい。
私の会社は、在庫管理ソフトを買うのは高いから、作れと言う難題を頂いて勉強して作ってるのですが、バーコードとロットが、完全一致した時に入出庫処理をしたいと思って、VBAを書いたのですが、構文的?解釈的に合っているのでしょうか?
C列の中から、TextBox1と同じものを探してね。
D列の中から、TextBox2と同じものを探してね。
と、並べて書いて、検索のAndの意味になるのかが、わかりません。何分初心者のため、うまく伝わらなかったらすみません。
しん様
はじめまして。
コメントありがとうございます。
>私の会社は、在庫管理ソフトを買うのは高いから、作れ…
男前で素晴らしい会社ですね(笑)
>並べて書いて、検索のAndの意味になるのかが、わかりません。
Andの意味にはなりません。
変数には1つのデータしか入りません。
上記のコードだと、
①C列の検索結果がKnskcellに入る。
②D列の検索結果がKnskcellに入る。(※上書きされる)
③D列の検索結果で条件分岐する。
と言った処理になると思います。
↓入れ子(Nest)にする場合の例
↓And演算子を使う場合の例(【VBA在庫管理#33】)
こんな感じになると思います。
oRe様
アドバイスというより、わかりやすい解説、回答まで頂きありがとうございます。完全に盲点でした。
確かにおっしゃられるように、kenskcellは、C列から、探したデータを入れると言ってるのに、D列のデータも入れたらおかしくなりますね。
大変勉強に、なりましたが、初心者丸出しの質問、恥ずかしい限りです。
ちなみに私の会社は、今紙で在庫管理していまして、監査の時にそのうちの一個の在庫を見せてくれと言うときにスムーズに提示出来なかったから、パソコンで作ってすぐ見せらるように…と言うのが事の発端です(泣)
oRe様のオレグラミングは、大変分かりやすく、誰にでも胸を張ってお勧めできる内容ですので、更新も大変だと思いますが、頑張って下さい。
最後に、こんな幼稚な質問に答えて頂きありがとうございました。
>こんな幼稚な質問に…
全然幼稚ではないですよ?
だって、初心者だもの!!
わからないのが、デフォです。
お役に立てたようで幸いです。
オレプログラミングで楽しく勉強させて頂いてます。
初歩的な質問で申し訳ないのですが、データベースの項目追加のコード
はどこに書いたらいいのでしょうか?
教えてください。
ポン様
はじめまして。
コメントありがとうございます。
>どこに書いたらいいのでしょうか?
在庫数が変わった後に書けばいいと思います。
とりあえず、ブログコード内の『’ここに項目追加処理を書くよ』
辺りに書けばいいと思います。