必要に迫られて簡易的な在庫管理システムを作りました。
在庫管理システムを作るにあたり、それはもう膨大な数のWebサイトを参考にしました。そのまま使えるAccessの在庫管理システムがあればいいのに、そのまま使えるものは一つもありませんでした。そこで在庫管理だけ必要な人向けの簡易なAccessデータベースを作りましたので、それを公開します。ごく簡単なデータベースです。
各々の環境に合わせて作り変えていただければ、と思います。特にデザインには自信がありません。各自のデザインセンスに合わせて作り変えてください。
Accessを単なるテーブルだけのデータベースとして使ったことはあっても、クエリやVBAを使ってシステムを組むのはこれが初めての経験でした。在庫管理システムは前職で使用していたSAPを念頭にして作りました。しかしAccessだけではSAPのようにはいきませんね。(注:SAPは在庫管理だけでなく、受注から組み立て・売上処理まで含んだシステムです)
この在庫管理システムはマクロを一切使用しておりません。VBAを基本としております。
最後にサンプルのデータベースをダウンロードできるようにしておきました。ここに記載のものをハナから入力するよりかは、ダウンロードしたAccessデータベースファイルを加工して使っていただいた方が便利かと思います。
データベースの改訂履歴
7月4日にVer.1.7のZipファイルをサーバーにアップしました。以下のリンクのページはGoogle検索には今の所は表示されません。
改訂日 | バージョン | 改訂内容 |
---|---|---|
2019/9/1 | 0.1 | とりあえず |
2019/9/2 | 0.2 | フォーム「F_入出庫履歴」で日付検索を追加 |
2019/9/6 | 0.3 | フォーム「F_入出庫履歴」と「F_在庫検索」と「F_安全在庫」にサブフォームを使うように変更した |
2019/9/8 | 0.4 | 保管場所移動(「F_在庫転送」)と「F_単位変換」機能を追加 |
2019/9/29 | 0.5 | フォーム開くと閉じるをマクロからVBAに変更。ExcelへのエクスポートをマクロからVBAに変更。フォーム「F_入出庫履歴」のサブフォームで品目型式をダブルクリックすると在庫検索を開くを追加 |
2019/10/17 | 0.6 | クエリ「Q_部品」、フォーム「F_部品検索」を追加。フォーム「F_入出庫処理」から呼び出せるようにした。 |
2019/10/19 | 0.7 | 「部品マスタ」・「仕入先マスタ」・「社員マスタ」を分割フォームからサブフォームに変更。マクロを全廃。 |
2019/10/27 | 0.8 | クエリの検索条件式をVBA記述に変更。他細かな修正。 |
2019/11/8 | 0.81 | テーブル「検索履歴」を追加、「F_入出庫履歴」・「F_在庫検索」・「F_部品検索」・「F_安全在庫」のフォームにて「txt_部品型式」をテキストボックスからコンボボックスにして検索履歴表示を可能に。 |
2019/11/9 | 0.82 | 0.6で追加した「F_部品検索」を「F_単位変換」と「F_在庫転送」でも使用可能にした。 |
2019/11/17 | 0.9 | 入出庫処理の取り消しを追加。(入出庫履歴の入出庫項目ダブルクリックにて) |
2019/11/19 | 0.91 | 入出庫処理の取消機能のバグ修正。 |
2019/11/20 | 0.92 | 入出庫処理の取消機能の為にテーブル「メイン」にフィールド「削除日付」を追加 |
2020/5/6 | 1 | ログイン画面の追加とそれに伴う各処理の修正。デザインがダサいの色付けをやめた。 |
2020/5/6 | 1.1 | デザイン修正と軽微なバグ修正。 |
2020/5/7 | 1.2 | パスワード更新のフォームをインポート忘れていて修正。 |
2020/5/8 | 1.3 | 「アクセス履歴」フォームにExcelへのエクスポートを追加。 |
2020/5/9 | 1.4 | 「品目マスタ」「社員マスタ」「仕入先マスタ」にExcelからの一括インポートを追加。 |
2020/5/31 | 1.5 | 「指図番号」「サイド番号」のテーブルを追加。テーブル「メイン」を「T_入出庫処理」に変更し、全てのテーブル名を「T_」から始まるように変更したため、全面的に修正。 |
2020/6/9 | 1.6 | 「部品」を「品目」に変更。「txt_部品型式」を「cmb_品目型式」に変更。部品という名称だと範囲が狭くなるため。 |
2020/6/12 | 1.61 | 一部「部品」が残っていたのを修正。ログイン関連を修正。 |
(未定) | -2 | 権限をより細かく。マスタを1つのフォームにタブコントロール上に配置。他。 |
2021/7/4 | 1.7 | テーブルはそのままにクエリ・フォーム・VBAを全面的に見直し |
テーブルやクエリを改造(項目を追加)した際の修正について
クエリから改造しようとして、一旦テーブルを削除・・・などとすると、後々とても面倒なことになります(経験上)。
各所に記述されているSQL文を修正した方が早いですので、その場合についてまとめました。必要に応じて参照ください。
フォームのプロパティ(共通)
Accessのフォームのプロパティを変更していく過程を⇩に記しましたので、変更する際の参考にしてください。
テーブルの作成
テーブルの数が多いために、一覧をタブにしました。
ID | オートナンバー型 |
品目コード | 数値型 |
品目型式 | テキスト型 |
メーカー | テキスト型 |
安全在庫 | 数値型 |
最小ロット | 数値型 |
標準ロット | 数値型 |
標準納期 | 数値型 |
仕入先コード | 数値型 |
保管場所コード | 数値型 |
Webサイト | ハイパーリンク型 |
削除 | Yes/No型 |
ID | オートナンバー型 |
保管場所コード | 数値型 |
保管場所 | テキスト型 |
ID | オートナンバー型 |
社員コード | 数値型 |
社員 | テキスト型 |
所属 | テキスト型 |
権限 | テキスト型 |
パスワード | テキスト型 |
平文 | テキスト型 |
削除 | Yes/No型 |
ID | オートナンバー型 |
入出庫コード | 数値型 |
入出庫 | テキスト型 |
ID | オートナンバー型 |
仕入先コード | 数値型 |
仕入先会社名 | テキスト型 |
郵便番号 | 数値型 |
住所 | テキスト型 |
電話番号 | 数値型 |
FAX番号 | 数値型 |
営業担当者 | テキスト型 |
携帯電話番号 | 数値型 |
Eメールアドレス | テキスト型 |
削除 | Yes/No型 |
ID | オートナンバー型 |
入出庫コード | 数値型 |
入出庫 | テキスト型 |
ID | オートナンバー型 |
日付 | 日付/時刻型 |
社員コード | 数値型 |
品目コード | 数値型 |
入出庫コード | 数値型 |
数量 | 数値型 |
単位コード | 数値型 |
削除 | Yes/No型 |
削除日付 | 日付/時刻型 |
ID | オートナンバー型 |
検索履歴 | テキスト型 |
ID | オートナンバー型 |
社員コード | 数値型 |
日時 | 日付/時刻型 |
成功or失敗 | Yes/No型 |
IPアドレス | テキスト型 |
ID | オートナンバー型 |
成功or失敗 | Yes/No型 |
ログイン | テキスト型 |
ID | オートナンバー型 |
指図番号 | テキスト型 |
予算 | 数値型 |
工数 | 数値型 |
ID | オートナンバー型 |
サイド番号 | 数値型 |
名前 | テキスト型 |
ID | オートナンバー型 |
バージョン | 数値型 |
更新内容 | テキスト型 |
ログイン画面
ログイン画面については別途記事を作成しております。
在庫管理システムの方にエクスポートした後、以下のVBAコードを修正します。
ログイン画面のVBA
VBAのコードのみを別のページに移動しました。参照される方はこちらをクリックしてください。
ログインパスワード変更のVBA
VBAのコードのみを別のページに移動しました。参照される方はこちらをクリックしてください。
ログイン履歴のVBA
VBAのコードのみを別のページに移動しました。参照される方はこちらをクリックしてください。
メインフォーム
F_メイン
【作成】からフォームの中の【空白のフォーム】を選んで、コマンドボタンを貼っていきます。1つコマンドボタンを作ったらコピペで増やしていくと、同じサイズのボタンになります。ヘッダーとフッターも使用しました。
メインメニューの下半分、管理者メニューとし、管理者でログインした以外はグレーアウトするようにしてあります。
- フォームの作成
コマンドボタンを配置します。ここでは「cmd_入出庫処理」「cmd_入出庫履歴」「cmd_在庫転送」「cmd_単位変換」「cmd_在庫検索」「cmd_安全在庫」「cmd_品目マスタ」「cmd_社員マスタ」「cmd_社員マスタ」「cmd_ログイン履歴」「cmd_閉じる」
としております。
メインフォームのVBA
- コマンドボタンのプロパティのイベントが空のままです。イベントを割り当てなければなりませんので、【プロパティシート】の【イベント】タブの【…】をクリックします。
- 【コードビルダー】を選んで【OK】をクリックします。上述のVBAのコードに飛びます。コマンドボタン1つ1つにこの作業が必要です。
- テキストボックスの【プロパティ】にて【…】をクリックします。
- 【コードビルダー】を選んで【OK】をクリック
メインフォームのVBAは下記の通りです。
VBAのコードのみを別のページに移動しました。参照される方はこちらをクリックしてください。
入出庫処理
F_入出庫処理
Access素人には苦労したフォームです。空白のフォームから下記のようにコントロールを配置していきます。

日付:テキストボックス(名前:txt_日付、プロパティで書式を「日付 (S)」に変更する)
品目:コンボボックス(名前:cmb_品目)、直下にラベル配置(名前:lbl_品目)
数量:テキストボックス(名前:txt_数量)
入出庫:コンボボックス(名前:cmb_入出庫)、右横にラベル配置(名前:lbl_入出庫)
単位:コンボボックス(名前:cmb_単位)、右横にラベル配置(名前:lbl_単位)
保管場所:コンボボックス(名前:cmb_保管場所)、右横にラベル(lbl_保管場所)社員:コンボボックス(名前:cmb_社員)、右横にラベル配置(名前:lbl_社員)
品目検索ボタン:コマンドボタン(名前:cmd_品目検索)
OKボタン:コマンドボタン(名前:cmd_OK)
Cancelボタン:コマンドボタン(名前:cmd_Cancel)
終了ボタン:コマンドボタン(名前:cmd_終了)
コンボボックスについてはもう少し記載しておきます。【プロパティシート】の【データ】タブの中の【値集合ソース】を下記のようにします。
cmb_品目:SELECT T_品目.品目コード,T_品目.品目型式 FROM T_品目 ORDER BY T_品目.品目型式;
cmb_入出庫:SELECT T_入出庫.入出庫コード,T_入出庫.入出庫 FROM T_入出庫;
cmb_単位:SELECT T_単位.単位コード , T_単位.単位 FROM T_単位;
cmb_保管場所:SELECT T_保管場所.保管場所コード,T_保管場所.保管場所 FROM T_保管場所;cmb_社員:SELECT 社員.社員コード,社員.社員 FROM 社員;
コンボボックスは【プロパティシート】にて【列数】を「2」にします。そうすることによって、コンボボックスのプルダウンにて「コード」と「名前」が同時に表示できるようになります。選択される時は「コード」の方にしてあります。各列の幅が長かったり、短かったりすると思います。サンプルでは「列幅」に「1.5cm;5cm」を入力してあります。この数値を調整してください。コンボボックスの直下にラベルを配置したのは、コードだけでは不十分ですので、コードに対応する名前をラベルに表示させて、間違いを防止するようにします。

入出庫処理フォームのVBA
フォーム「F_入出庫処理」のVBAは下記の通りです。項目に空欄があると警告を出すようにしています。
「cmd_Cancel」ボタンを押すと、全てのコントロールを初期化してデータベースは更新しません。
データベースを更新したときにはAccessは何もアクションがないため、コントロールを初期化してメッセージボックスでデータベースを更新したことを報せます。
入出庫データは「T_入出庫処理」テーブルに格納されていきます。
VBAのコードのみを別のページに移動しました。参照される方はこちらをクリックしてください。
F_品目検索
会社では在庫品目の種類が思いの外多く、また類似の品目名が多々存在するために、品目検索のフォームを作りました。
当初はフォーム「F_入出庫処理」からのみ呼び出していましたが、「F_在庫転送」や「F_単位変換」からも呼び出せるようにしました。
Q_品目
検索のためにテーブル「T_品目」だけを置いたクエリ「Q_品目」を作ります。
抽出条件はVBAで記載しますので、ここでは書きません。
SQLビュー
SELECT T_品目.品目コード, T_品目.品目型式
FROM T_品目
ORDER BY T_品目.品目型式;
上記SQLをクエリにコピーするには【作成】タブから【クエリデザイン】を選びます。【テーブルの選択】は閉じて、現れたウィンドウのタブの部分で右クリックし、【SQLビュー】を選びます。【SQLビュー】の状態でコードをペーストし、タブから【デザインビュー】を選べば元に戻ります。
- SQLビューを選ぶ
F_品目検索のフォーム
空白のフォームから下記のようにコントロールを配置していきます。
品目型式:コンボボックス(名前:cmb_品目型式)
クエリ「Q_品目」を呼び出します。クエリの条件にテキストボックスの品目名の一部を使いますので、テキストボックスの下にそのような表記をラベルで作っておくと親切だと思われます。【プロパティシート】の【値集合ソース】は
select distinct T_検索履歴.検索履歴 from T_検索履歴
検索:コマンドボタン(名前:cmd_検索)
終了:コマンドボタン(名前:cmd_終了)
サブフォームコントロールは名前を「Q_品目のサブフォーム」としておきます。
F_品目検索のVBA
VBAのコードのみを別のページに移動しました。参照される方はこちらをクリックしてください。
Q_品目のサブフォームのVBA
「品目コード」の部分でも「品目型式」の部分でもダブルクリックするとフォーム「F_入出庫処理」に値が入るようにしていますので、同じ記述が並んでおります。
VBAのコードのみを別のページに移動しました。参照される方はこちらをクリックしてください。
モジュール
このフォームを使いまわしをするために、標準モジュールに下記の1行を入れます。どのフォームから呼び出したかを記憶し、SELECT CASE文で帰るフォームの処理を振り分けします。
Public strFormName As String
検索履歴機能
インターネットブラウザの検索テキストボックスのようにAccessのテキストボックスでも検索履歴を表示させたいと思い、検索履歴機能を追加してみました。
エッセンスは別記事にまとめてあります。
入出庫履歴
Q_メイン
- 【作成】-【クエリデザイン】から「メイン」「品目」「入出庫」「社員」「単位」を選びます。
- 「メイン」と他の共通するコードを連結します。例えば「品目コード」を結びます。この時、結合線をダブルクリックしてプロパティを開き、
2の「’メイン’の全レコードと’品目’の同じ結合フィールドのレコードだけを含める」とします。他の結合線も同様です。
※必要に応じて表示させる項目を追加・削除してください。
このクエリから「Q_入出庫履歴」と「Q_集計」に転用します。「Q_入出庫履歴」と「Q_集計」はQ_メインを使わずに独自に作っても全然構いません。
SQLビュー
下記の記述を【SQLビュー】からコピペすると早いです。
SELECT T_入出庫処理.日付, T_入出庫処理.品目コード, T_品目.品目型式, T_品目.[メーカー], T_入出庫処理.数量, T_単位.単位, T_入出庫.入出庫, T_保管場所.保管場所, T_社員.社員, T_品目.安全在庫, T_入出庫処理.削除, T_入出庫処理.ID, T_入出庫処理.削除日付, T_指図番号.指図番号
FROM (((((T_入出庫処理 LEFT JOIN T_社員 ON T_入出庫処理.社員コード = T_社員.社員コード) LEFT JOIN T_単位 ON T_入出庫処理.単位コード = T_単位.単位コード) LEFT JOIN T_入出庫 ON T_入出庫処理.入出庫コード = T_入出庫.入出庫コード) LEFT JOIN T_品目 ON T_入出庫処理.品目コード = T_品目.品目コード) LEFT JOIN T_保管場所 ON T_入出庫処理.保管場所コード = T_保管場所.保管場所コード) LEFT JOIN T_指図番号 ON T_入出庫処理.指図番号 = T_指図番号.指図番号;
Q_入出庫履歴
Q_入出庫履歴には「Q_メイン」を利用します。
VBAを使わずにクエリにて抽出条件を記載する場合です。画像ですと抽出条件が見づらいため、表にします。
フィールド | 日付 | 品目型式 | [Forms]![F_入出庫履歴]![txt_開始日付] | [Forms]![F_入出庫履歴]![txt_終了日付] |
テーブル | Q_メイン | Q_メイン | ||
並べ替え | ||||
表示 | ||||
抽出条件 | >[Forms]![F_入出庫履歴]![txt_開始日付] And <[Forms]![F_入出庫履歴]![txt_終了日付] | Like "*" & [Forms]![F_入出庫履歴]![cmb_品目型式] & "*" | ||
または | <[Forms]![F_入出庫履歴]![txt_終了日付] | Like "*" & [Forms]![F_入出庫履歴]![cmb_品目型式] & "*" | Is Null | |
>[Forms]![F_入出庫履歴]![txt_開始日付] | Like "*" & [Forms]![F_入出庫履歴]![cmb_品目型式] & "*" | Is Null | ||
Like "*" & [Forms]![F_入出庫履歴]![cmb_品目型式] & "*" | Is Null | Is Null |
SQLビュー
SELECT Q_メイン.日付, Q_メイン.品目コード, Q_メイン.品目型式, Q_メイン.数量, Q_メイン.単位, Q_メイン.[メーカー], Q_メイン.保管場所, Q_メイン.入出庫, Q_メイン.社員, Q_メイン.削除, Q_メイン.ID, Q_メイン.削除日付
FROM Q_メイン
ORDER BY Q_メイン.日付 DESC;
F_入出庫履歴
入出庫履歴を表示するフォームです。全て見えると規模によっては邪魔になりますので、「品目型式」、「履歴の開始日付」、「履歴の終了日付」で検索できるようにしています。
品目型式:コンボボックス(名前:cmb_品目型式)
開始日付:テキストボックス(名前:txt_開始日付)
終了日付:テキストボックス(名前:txt_終了日付)
サブフォームの配置は下記を参照ください。
サブフォームの配置の仕方
- 【デザイン】タブのコントロールのサブフォームをクリックします。このとき、【コントロールウィザードの使用】をONしておきます。
- 下の図のまま【次へ】をクリックします。
- 【テーブル/クエリ】から「Q_入出庫履歴」を選び、全ての項目を【選択したフィールド】へ移します。
- 【完了】でも良いですが、【次へ】をクリックすればサブフォームの名前を付ける画面になります。
サブフォームサイズや、フィールドの幅は各自適宜変えてください。
名前は「Q_入出庫履歴のサブフォーム」のままとしました。気に入らない方は変えてください。
- 【デザイン】タブからサブフォームコントロールを選ぶ
- 【次へ】をクリック
- 【既存のテーブルまたはクエリを使用する】のまま【次へ】
- サブフォームの名前を付けて【完了】
入出庫処理取り消し
当初、取り消し処理のコードを用意していましたが、「削除」フィールドを利用することにしました。
フォーム「入出庫履歴」のフィールド「入出庫」の項目をダブルクリックしますと、入出庫処理取り消しの確認のメッセージボックスが表示されます。そこで「はい(Yes)」を選択すると、該当する入出庫処理のフィールド「削除」にチェックが入ります。このチェックが入った処理は「在庫検索」処理にも反映されません。
入出庫履歴フォームのVBA
VBAのコードのみを別のページに移動しました。参照される方はこちらをクリックしてください。
入出庫履歴サブフォームのVBA
フィールド「品目型式」をダブルクリックした時に、「在庫検索」フォームを開き、テキストボックスにダブルクリックした箇所の「品目型式」を渡す記述です。
VBAのコードのみを別のページに移動しました。参照される方はこちらをクリックしてください。
在庫検索
Q_集計
「Q_メイン」クエリを利用して下記のように作ります。
- 計算がありますので、【デザイン】タブを開いて「Σ集計」をクリックしておきます。
- Σ集計をクリックすると、今度は「集計」という行が現れます。下記のように「数量」を計算(合計)できるようにします。
- 「数量の合計:数量」となっているフィールドはプロパティを開いて【表題】を「在庫数」にしておくと、フォームが表示された時に「在庫数」と表示されます。
「品目型式」の抽出条件はVBAで記載します。
※必要に応じて表示させる項目を追加・削除してください。
- デザイン】タブを開いて「Σ集計」をクリック
- Σ集計をクリックすると、今度は「集計」という行が現れる
- 「数量の合計:数量」となっているフィールドはプロパティを開いて【表題】を「在庫数」にしておく
SQLビュー
SELECT DISTINCTROW Q_メイン.保管場所, Q_メイン.品目コード, Q_メイン.品目型式, Q_メイン.[メーカー], Sum(Q_メイン.数量) AS [数量 の 合計], Q_メイン.単位, Q_メイン.安全在庫, Q_メイン.削除, Q_メイン.指図番号
FROM Q_メイン LEFT JOIN (T_品目 LEFT JOIN T_仕入先 ON T_品目.仕入先コード = T_仕入先.仕入先コード) ON Q_メイン.品目コード = T_品目.品目コード
GROUP BY Q_メイン.保管場所, Q_メイン.品目コード, Q_メイン.品目型式, Q_メイン.[メーカー], Q_メイン.単位, Q_メイン.安全在庫, Q_メイン.削除, Q_メイン.指図番号
HAVING (((Q_メイン.削除)=False))
ORDER BY Q_メイン.保管場所;
空白のフォームから下記のようにコントロールを配置していきます。
品目型式:コンボボックス(名前:cmb_品目型式)
検索:コマンドボタン(名前:cmd_検索)
終了:コマンドボタン(名前:cmd_終了)
サブフォームコントロールは名前を「Q_集計のサブフォーム」としておきます。
在庫検索フォームのVBA
VBAのコードのみを別のページに移動しました。参照される方はこちらをクリックしてください。
安全在庫
Q_安全在庫
「Q_集計」と似ていますが、数量の合計の抽出条件を下記のようにします。
<[T_品目].[安全在庫]
品目型式の抽出条件はVBAにて記載します。「数量の合計:数量」をVBAに記載する方法がわかりませんでした。このクエリに残っております。
※必要に応じて表示させる項目を追加・削除してください。
SQLビュー
SELECT DISTINCTROW T_品目.品目コード, T_品目.品目型式, Sum(T_入出庫処理.数量) AS 数量の合計, T_品目.安全在庫, T_入出庫処理.削除
FROM T_入出庫処理 LEFT JOIN T_品目 ON T_入出庫処理.品目コード = T_品目.品目コード
GROUP BY T_品目.品目コード, T_品目.品目型式, T_品目.安全在庫, T_入出庫処理.削除
HAVING (((Sum(T_入出庫処理.数量))<[T_品目].[安全在庫]) AND ((T_入出庫処理.削除)=False));
F_安全在庫
空白のフォームから下記のようにコントロールを配置していきます。
品目型式:コンボボックス(名前:cmb_品目型式)
検索:コマンドボタン(名前:cmd_検索)
終了:コマンドボタン(名前:cmd_終了)
サブフォームは「クエリQ_安全在庫」を選び「Q_安全在庫のサブフォーム」としました。
安全在庫フォームのVBA
VBAのコードのみを別のページに移動しました。参照される方はこちらをクリックしてください。
安全在庫設定に引っかかる品目が生じたら、発注担当者などにEメールを飛ばせるようにしたいと考えていました。AccessではEメールは飛ばせないであろうという先入観から調べてもいませんでしたが、実際にはやろうと思えばできるようです。AccessデータベースによるEメール送信のサンプルを作ってみました。そのうちにこの在庫管理システムにも実装したいと思います。サンプルは下記を参照ください。
在庫転送
F_在庫転送
空白のフォームから下記のようにコントロールを配置していきます。
コントロールは「F_入出庫処理」とほぼ同様です。
日付:テキストボックス(名前:txt_日付、プロパティで書式を「日付 (S)」に変更する)
品目:コンボボックス(名前:cmb_品目)、直下にラベル配置(名前:lbl_品目)
数量:テキストボックス(名前:txt_数量)
単位:コンボボックス(名前:cmb_単位)、直下にラベル配置(名前:lbl_単位)
転送元:コンボボックス(名前:cmb_転送元)、直下にラベル配置(名前:lbl_転送元)
転送先:コンボボックス(名前:cmb_転送先)、直下にラベル配置(名前:lbl_転送先)社員:コンボボックス(名前:cmb_社員)、直下にラベル配置(名前:lbl_社員)
品目検索ボタン:コマンドボタン(名前:cmd_品目検索)
OKボタン:コマンドボタン(名前:cmd_OK)
Cancelボタン:コマンドボタン(名前:cmd_Cancel)
終了ボタン:コマンドボタン(名前:cmd_終了)
コンボボックスのプロパティシートのデータタブの中の値集合ソースを下記のようにします。
cmb_品目:SELECT T_品目.品目コード,T_品目.品目型式 FROM T_品目 ORDER BY T_品目.品目型式;
cmb_単位:SELECT T_単位.単位コード , T_単位.単位 FROM T_単位;
cmb_転送元:SELECT T_保管場所.保管場所コード,T_保管場所.保管場所 FROM T_保管場所;
cmb_転送先:SELECT T_保管場所.保管場所コード,T_保管場所.保管場所 FROM T_保管場所;cmb_社員:SELECT 社員.社員コード,社員.社員 FROM 社員;
在庫転送フォームのVBA
VBAのコードのみを別のページに移動しました。参照される方はこちらをクリックしてください。
単位変換
F_単位変換
空白のフォームから下記のようにコントロールを配置していきます。
日付:テキストボックス(名前:txt_日付、プロパティで書式を「日付 (S)」に変更する)
品目:コンボボックス(名前:cmb_品目)、直下にラベル配置(名前:lbl_品目)
変換前数量:テキストボックス(名前:txt_変換前数量)
変換後数量:テキストボックス(名前:txt_変換後数量)
変換前単位:コンボボックス(名前:cmb_変換前単位)、直下にラベル配置(名前:lbl_変換前単位)
変換後単位:コンボボックス(名前:cmb_変換後単位)、直下にラベル配置(名前:lbl_変換後単位)
保管場所:コンボボックス(名前:cmb_保管場所)、直下にラベル(lbl_保管場所)社員:コンボボックス(名前:cmb_社員)、直下にラベル配置(名前:lbl_社員)
品目検索ボタン:コマンドボタン(名前:cmd_品目検索)
OKボタン:コマンドボタン(名前:cmd_OK)
Cancelボタン:コマンドボタン(名前:cmd_Cancel)
終了ボタン:コマンドボタン(名前:cmd_終了)
コンボボックスのプロパティシートのデータタブの中の値集合ソースを下記のようにします。
cmb_品目:SELECT T_品目.品目コード,T_品目.品目型式 FROM T_品目 ORDER BY T_品目.品目型式;
cmb_入出庫:SELECT T_入出庫.入出庫コード,T_入出庫.入出庫 FROM T_入出庫;
cmb_変換前単位:SELECT T_単位.単位コード , T_単位.単位 FROM T_単位;
cmb_変換後単位:SELECT T_単位.単位コード , T_単位.単位 FROM T_単位;
cmb_保管場所:SELECT T_保管場所.保管場所コード,T_保管場所.保管場所 FROM T_保管場所;cmb_社員:SELECT 社員.社員コード,社員.社員 FROM 社員;
単位変換フォームのVBA
単位変換は購買からの発注が「1式」「1箱」などを1式は「100個」とか1箱は「12個」などにする場合です。最初から1式で入荷しても在庫管理システムでは100個と入力する場合には不要な処理です。将来的に購買への発注伝票作成や購買が入力処理することも念頭に置いての処理です。
VBAのコードのみを別のページに移動しました。参照される方はこちらをクリックしてください。
マスタ
品目マスタ
品目の基本情報(マスタ)を編集したいときがきます。そのためのフォームを作ります。
上半分にテキストボックスを、下半分にサブフォーム(テーブル品目を選択)を配置していきます。
フォームの【レコードソース】にテーブルを割り当てるのではなく、テキストボックスをサブフォームのテキストボックスに合わせていきます。
サブフォームの項目の分だけ上半分にテキストボックスとチェックボックスを配置します。
テキストボックスとサブフォームのテキストボックスの関連付け
上半分のテキストボックスの【プロパティ】の【データ】にて、【コントロールソース】の右端の【…】をクリックします。
- テキストボックスの【プロパティ】にて【…】をクリックします。
下記のように、サブフォーム-フィールド-<値>とし、<値>のところでダブルクリックします。
テキストボックスには
=[品目のサブフォーム].[Form]![品目コード]
という具合に値が入り、サブフォームのテキストボックスと連動します。
- 【式の値】で<値>をダブルクリックする
最後にフォームに「終了ボタン:コマンドボタン(名前:cmd_終了)」を追加しておきます。
品目マスタのVBA
VBAのコードのみを別のページに移動しました。参照される方はこちらをクリックしてください。
社員マスタ
社員マスタのVBA
VBAのコードのみを別のページに移動しました。参照される方はこちらをクリックしてください。
サブフォームで「T_社員」を選択する以外は「品目マスタ」同様です。
仕入先マスタ
仕入先マスタのVBA
VBAのコードのみを別のページに移動しました。参照される方はこちらをクリックしてください。
サブフォームで「T_仕入先」を選択する以外は「品目マスタ」同様です。
その他
バーコード
各種コードをバーコードで表示させる方法を簡単に記しておきました。(Excelによる帳票サンプル付き)
2021年7月8日、バーコードフォントをインストールしなくても実現できるように作り直しました。
完成したら
完成すると、フォームの表示だけにしたくなります。その際のAccessの設定は下記リンクに記載がありますので参照ください。ここでダウンロードするデータベースは編集できるように下記リンクのような処理は施しておりません。
・フォームオープン時のVBA記述
・Accessのオプション設定
https://www.feedsoft.net/access/guide-form/guidef81.html
バックアップ
私は経験したことがありませんが、データベースはたまに破損するようです。
こまめにバックアップを取って万が一に備えましょう。
データベースの分割
ここの記事を参考にされている方は小規模な組織での運用で品目点数や入出庫回数も少ないかもしれません。
しかし、時間を追うごとに蓄積されるデータが多くなり、重くなるかもしれません。そんな時はデータベースをテーブルとフォームなどに分割するといいかもしれません。方法は【データベースツール】タブから【Accessデータベース】を選びます。これでファイルが2つに分割されます。テーブルのファイルをファイルサーバ上に置いておき、フォーム等のファイルを利用者のローカルPCにコピーして使います。
注意
保存先を移動させるとアクセスできなくなります。
デザインについて
旧式のAccessの形式(*.mdb)にて作成しております。従ってコマンドボタンがフラットになっています。
【ファイル】タブから【名前を付けて保存】にて*.accdb形式にて保存すれば、3Dのコマンドボタンをデザインすることができます。他にもデザイン的にかっこよくできるかと思います。
ダウンロード
拡張子.mdb形式にしましたので、Access2002~Access2019で開けると思います。データベースを開くとログイン画面がポップアップ表示されます。そのウィンドウで右クリックし、「閉じる」をクリックしてください。また「コンテンツの有効化」をクリックします。これで編集して使えるようになります。

Ver.1.7(2021年7月4日版)(テスト用のデータを含んだままです)
Ver.1.61(2020年6月12日版)
Ver.1.5(2020年5月31日版)
一部データが入っていますが、テスト用のデータは概ね削除してあります。データインポート用のExcelファイル同梱です。
仮データのうち、テーブル「メイン」「品目」「保管場所」「社員」「検索履歴」を空にしたものです。(「仕入先」は元々空です)
テーブル「単位」「入出庫」「バージョン履歴」も削除したい(作り変えたい)方はご自身で行ってください。
参考⇩
仮データを含む版のAccessデータベース
ファイルはこちら(在庫管理システム(仮データ付).zip)
コードの付け方
会社では社員番号が「0」から始まる8桁の数値なので、それをそのまま用います。サンプルのデータベースでは「1」から始まる5桁の数値にしました。所属の項目がありますが、ない方が良い場合もあるでしょう。人事異動の度に書き換えていたら大変です。
品目コード(あるいは商品コード)は「20」~「29」で始まるコードで割り振ります。これはインストアマーキングと呼ばれるスーパーマーケットなどでの野菜などのパッケージ化されていない商品にコードを割り振るルールだそうです。組織や管理する品目の規模にも依りますが6桁前後あればこと足りるのではないでしょうか。
単位コードはサンプルのデータベースには「5」で始まる3桁の番号にしました。サンプルのデータベースではインボイスの単位を参照しました(リンク切れ)。
入出庫コードはサンプルのデータベースには「6」で始まる3桁の番号にしました。
保管場所コードはサンプルのデータベースには「7」で始まる3桁の番号にしました。
JANコードについて、興味深いサイトがありました(こちら)
最後に
在庫管理システムのパッケージを購入するほどの規模ではない会社・組織にて、しかし在庫管理はしなくてはならない方向けです。市販のパッケージと比較して不足する機能は多々あります。
処理の削除機能と削除されたデータが在庫に計上されないような処理を入れました。どうでしょうか?入出庫コードの取消を使うようにした方がいいでしょうか?
改善・追加したい機能
可能な限りの改善改良は行ってみますので、お気軽にコメントに要望等をご記入ください。また、もっと容易な方法があるよ、というアドバイスもいただければ幸いです。Ver.2.0として下記のいくつかを取り入れます。
- 指図番号とサイド番号のマスタを忘れていました⇨追加しましたが、追加したのみです。
- ローカルPCの画面解像度が異なるとフォームの見え方が変わります。それをなんとかしたい⇨着手中
- 新規ユーザーの場合は管理者が仮パスワードを登録して本人に通知し、最初のログイン時に本パスワードに変更する方法に変えようかと思います
- 棚卸し用データのエクスポートと集計結果をインポート
- 閲覧・編集権限をより細かく設定したい
- ログ(履歴)関連を増やしたい
- 購買発注や営業・管理部門の経験がないため、そのあたりを勉強して追加できれば(しないかも)いいですね
ログイン画面のみのサンプルを作成しました。⇩