ous">

小さな在庫管理

在庫管理導入からシステム作成まで詳細解説!

商品在庫画面の追加機能作成 [VBA在庫管理システムVer01#28]

前回、商品在庫画面の受払履歴リストを作成しました。

この記事では、在庫リストの動作設定を追加していきます。


VBA在庫管理システムVer01

受払履歴の機能追加

受払履歴リストは同一日付で入出庫数を合算した、入出庫日毎のリスト表示となっています。
ここに、入出庫数を合算しない明細毎のリスト表示が可能となるように、機能を追加していきます。
チェックボックスを利用し、入出庫日毎と明細毎のリスト表示の切り替えを作成します。

詳細チェックボックスの作成

商品在庫画面に詳細チェックボックスを追加します。

ツールボックスでチェックボックスを選択し、受払履歴のヘッダー部でドラッグして、コントロールを追加します。

プロパティウィンドウで詳細設定します。

※プロパティ設定後のユーザーフォーム


受払履歴の表示設定

受払履歴の表示

受払履歴を表示するプロシージャ ShowItemStockDetailList を一部修正します。

Sub ShowItemStockDetailList()

’~~~~~~~~~~~~~~~~~~~~~~~~~~

'最終行の取得
Dim wsStockExtractionRow As Long
wsStockExtractionRow = wsStockExtraction.Cells(Rows.Count, 6).End(xlUp).Row

'同一日付で合計
Dim i As Long

If chkDetail.Value = False Then  ←ここを追加
    With wsStockExtraction
        For i = wsStockExtractionRow To 4 Step -1
            If .Cells(i, 7).Value = .Cells(i - 1, 7).Value And .Cells(i, 8).Value = .Cells(i - 1, 8).Value Then
                    .Cells(i - 1, 9).Value = .Cells(i, 9).Value + .Cells(i - 1, 9).Value
                    .Range(Cells(i, 6), Cells(i, 9)).Delete shift:=xlUp
            End If
        Next
    End With
End If

’~~~~~~~~~~~~~~~~~~~~~~~~~~

End Sub

@1.同一日付で合計
詳細チェックボックスの値による分岐を追加します。
詳細チェックボックスにチェックが入っていないときは、日付で合算します。
チェックが入っているときは、合算はせずに入出庫データのままの詳細表示となります。

受払履歴の詳細表示

詳細チェックボックスのクリック時の動作を設定します。

Private Sub chkDetail_Click()

'異常値の回避
If lstStock.ListIndex = -1 Then
    Exit Sub
End If

'受払履歴の表示
Call ShowItemStockDetailList

End Sub

@1. 異常値の回避
在庫表リストボックスの選択がないときは、処理を実行しません。

@2. 受払履歴の表示
サブルーチンを実行し、サブルーチンの中でチェックボックスの値を判定し、受払履歴を日別または詳細表示へと変更します。

受払履歴のリセット

商品在庫リストボックスのクリック時の動作を設定します。
商品在庫リストボックスはダブルクリックすると商品検索が実行され受払履歴が表示されますが、その予備動作としてクリック時の動作を設定します。

Private Sub lstStock_Click()

'チェックボックスの設定
chkDetail.Value = False

'受払履歴の表示解除
lstStockDetail.Clear

End Sub

@1.チェックボックスの設定
詳細チェックボックスのチェックを外します。

@2.受払履歴の表示解除
受払履歴リストボックスをクリアします。

詳細情報のリセット設定

詳細データをリセットするプロシージャに詳細チェックボックスの解除コードを追加します。

Sub Reset()

'詳細情報の表示解除
cmbItemID.Text = ""
texSupplier.Value = ""
texOrderUnit.Value = ""
texPackage.Value = ""
texMaxStock.Value = ""
texOrderPoint.Value = ""
texStockPosition.Value = ""

'商品在庫表の選択解除
lstStock.ListIndex = -1

'チェックボックスの設定  ←ここを追加
chkDetail.Value = False

'受払履歴の表示解除
lstStockDetail.Clear

End Sub

@1. 詳細情報の表示解除
各表示を削除します。

@2.商品在庫表の選択解除
インデックス番号 = -1 を受け渡し、選択を解除します。

@3.チェックボックスの設定
詳細チェックボックスのチェックを外します。

@4.受払履歴の表示解除
受払履歴リストボックスをクリアします。

システムへの機能追加について

この記事では、出来上がったシステムに機能追加する例を解説しました。

ここまでは、プロシージャ内で正常動作するか、コードミスはないか、シンプルなコードになっているかなどに注力してきたかと思います。


ユーザーフォームを使用するときは、プロシージャの実行時に他のプロシージャが動作する場合がありますので、プロシージャ間の連携には注意が必要となってきます。

解説用のシステムでは、画面遷移に関しては、メインの実行コードは商品名称コンボのChangeプロシージャにおき、関連するオブジェクトのコードは商品名称コンボに値を渡す程度に留めています。
また、実行ボタン等のコードは単体で動作するようにし、実行後の画面状態は商品名称コンボやサブルーチンで実行させる構造として、プロシージャ間の連携を保っています。


機能を追加する場合は、追加機能の動作が他のプロシージャに与える影響を考慮しつつ、循環コードにならないように注意が必要となります。
また、様々な使用状況を想定し、網羅的な実行テストも必要です。

解説用のシステムは機能が少ないので、コード確認や実行テストは容易に実施できますが、規模の大きなシステムや追加機能が多いシステムでは大変な作業になってきます。


VBAで小規模なシステムを作る場合でも、システムの骨格をしっかりと作り込み、変化への対応力をつけることがポイントとなります。
また、機能追加に関しては、無いに越したものはないので、要件定義の段階でしっかりと設計するのが一番の近道です。



商品在庫画面の追加動作の設定ができました。
次回は発注リストを例に帳票を作成していきます。
www.minizaiko.com