在庫管理は入出庫履歴が命、VBAで自動で履歴をつける 【VBA在庫管理#06】

Excel VBA 部品在庫管理アイキャッチ画像部品在庫管理

最近、のどが痛くて風邪かしら? どうもoReです。

在庫管理って、在庫数が正確なのと同じくらい
入出庫履歴も大事なのかしら…

と言うわけで

いつ、誰が、何を、何個、入出庫したか?
入出庫履歴を作成していきます。

入出庫履歴シート作成

まずは、入出庫履歴シートを作成します。

こんな感じで作成しました。

※シート名を『入出庫履歴』にするのを忘れずに

入出庫履歴シート

入出庫した際に、入出庫履歴シートの各項目に
データを自動で入力させていきます。

 

TextBox 追加

誰が入出庫したのか

何個入出庫するのか

 

入力できるように、在庫管理用ユーザーフォームにテキストボックス
追加します。

テキストボックス追加

 

わかりやすいように、上から

TextBox1 入出庫者名(誰が)

TextBox2 バーコードデータ(何を)

TextBox3 個数(何個)

というように配置します。

 

前回作成した在庫管理入出庫プログラムでは、TextBox1がバーコードデータだったので、
在庫管理入出庫プログラムの検索対象部分をTextBox2へ変更しましょう。

 

出庫処理/入庫処理

Set Knskcell = Range("C:C").Find(what:= TextBox2,lookat:= xlWhole)

 

また、出庫-1・入庫+1処理するところをTextBox3へ変更しましょう。

出庫処理

Knskcell.Offset(0,4) = Knskcell.Offset(0,4) - TextBox3

入庫処理

Knskcell.Offset(0,4) = Knskcell.Offset(0,4) + TextBox3

 

TextBox 未入力処理

まずは、どうゆう動作をさせるかを考えましょう。

oRe肘つき

条件として

①入出庫者名を入力させる ←人
②バーコードデータを入力させる ←人
③個数を入力させる ←人
④入庫か出庫のボタンを押させる ←人
⑤入出庫履歴シートの各項目へ入力させる ←自動(VBAプログラム)

こんな感じですかね。

では、オレグラミングしていきましょう(笑)

 

①入出庫者名を入力させる

・入出庫者名を入力していなければと言うことは

テキストボックス1が空白だった場合
If TextBox1 = "" Then

 

②バーコードデータを入力させる

・バーコードデータを入力していなければと言うことは

テキストボックス2が空白だった場合
If TextBox2 = "" Then

 

③個数を入力させる

・個数を入力していなければと言うことは

テキストボックス3が空白だった場合
If TextBox3 = "" Then

 

合体させると

If TextBox1 = "" Then
  入出庫者名 未入力の実行プログラム
ElseIf TextBox2 = "" Then
  バーコードデータ 未入力の実行プログラム
ElseIf TextBox3 = "" Then
  個数 未入力の実行プログラム
Else
  どれも入力済の実行プログラム
End If

となるので、どれも入力済の実行プログラムのところに
前回作成した在庫管理入出庫プログラムを入れていきます。

 

また、各テキストボックスの未入力の実行プログラムのところに
メッセージを出します。

 

・入出庫者名を入力してください。

・バーコードデータを入力してください。

・個数を入力してください。

Private Sub CommandButton1_Click()
  Dim Knskcell As Range

  If TextBox1 = "" 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 “部品が登録されていません。”
    ElseIf Knskcell = "" Then
      MsgBox “部品が登録されていません。”
    Else
      Knskcell.Offset(0, 4) = Knskcell.Offset(0, 4) - TextBox3
    End If
  End If
End Sub

このようにしました。
動作確認してみてください。
ちゃんと動いてますか?

oReのぞき見

入出庫履歴シートへ入力(出力かな?)

入出庫した部品のデータ等を、入出庫履歴シートへ
VBAプログラムを使って自動で出力していきます。

 

先程作成した入出庫履歴シートを見ると
2行目が項目になってます。

入出庫履歴シート

 

という事は、3行目以降に入出庫したデータ等を
出力していかなければなりませんね?

Range(“B3”) = 日時

Range(“C3”) = 入出庫者

このように書きますか?

 

はい! これではだめですよね。

oReびっくり

1回目の入出庫はうまくいきますが、2回目の入出庫の時
また同じ3行目に入出庫データが出力されてしまいます。

 

これは入出庫履歴ではなくて、最後に入出庫した部品データです。

 

やり方は色々ありますが、とりあえずこう書きましょう。

Private Sub CommandButton1_Click()
  Dim Knskcell As Range

  If TextBox1 = "" 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 “部品が登録されていません。”
    ElseIf Knskcell = "" Then
      MsgBox “部品が登録されていません。”
    Else
      Knskcell.Offset(0, 4) = Knskcell.Offset(0, 4) - TextBox3
      Worksheets("入出庫履歴").Cells(Rows.Count,2).End(xlUp).Offset(1,0) = Now
      Worksheets("入出庫履歴").Cells(Rows.Count,3).End(xlUp).Offset(1,0) = TextBox1
      Worksheets("入出庫履歴").Cells(Rows.Count,4).End(xlUp).Offset(1,0) = Knskcell.Offset(0, -1)
      Worksheets("入出庫履歴").Cells(Rows.Count,5).End(xlUp).Offset(1,0) = Knskcell.Offset(0, 1)
      Worksheets("入出庫履歴").Cells(Rows.Count,6).End(xlUp).Offset(1,0) = Knskcell.Offset(0, 2)
      Worksheets("入出庫履歴").Cells(Rows.Count,7).End(xlUp).Offset(1,0) = Knskcell.Offset(0, 3)
      Worksheets("入出庫履歴").Cells(Rows.Count,8).End(xlUp).Offset(1,0) = TextBox3*1
      Worksheets("入出庫履歴").Cells(Rows.Count,9).End(xlUp).Offset(1,0) = "出庫"
    End If
  End If
End Sub

 

入庫処理

・マイナスをプラスに変更

Knskcell.Offset(0, 4) = Knskcell.Offset(0, 4) + TextBox3

 

・出庫を入庫に変更

Worksheets("入出庫履歴").Cells(Rows.Count,9).End(xlUp).Offset(1,0) = "入庫"

動作確認してみてください。
入出庫履歴にちゃんと自動で出力されてますか?

 

まとめ

バーコードリーダー説01

次回 入出庫履歴プログラムの説明などなど

ExcelVBA部品在庫管理【目次】へ戻る

コメント

タイトルとURLをコピーしました