こんにちは、なかぜんです。
「Excelでの受発注管理が限界…」「業務をもっと効率化したい!」
そんなお悩み、ありませんか?
この記事では、Access初心者~中級者の方でも安心して取り組める「受発注管理システムの作り方」をわかりやすく解説します。フォームやVBAも使いながら、実務で役立つ仕組みを一緒に作っていきましょう!
システムの全体像をイメージしよう
主な機能と流れ
- 顧客・商品マスタ管理
- 受注データの登録・一覧表示
- 発注データの自動生成
- 在庫の引き当て処理
このような流れを、Accessのテーブル・クエリ・フォーム・VBAを組み合わせて構築します。
まずはテーブル設計から
以下は基本的なテーブル構成の一例です。
テーブル名 | 主なフィールド |
---|---|
T_顧客 | 顧客ID, 顧客名, 住所, 電話番号 |
T_商品 | 商品ID, 商品名, 単価, 在庫数 |
T_受注 | 受注ID, 顧客ID, 受注日 |
T_受注明細 | 受注明細ID, 受注ID, 商品ID, 数量 |
T_発注 | 発注ID, 発注日, 発注先 |
T_発注明細 | 発注明細ID, 発注ID, 商品ID, 数量 |
フォームで入力画面を作ろう
受注フォームの構成
- ヘッダー:顧客選択・受注日入力
- サブフォーム:商品ごとの受注明細入力
フォームとサブフォームを連動させることで、1件の受注に複数の商品をひもづけることができます。
実際のコード例:受注登録後に在庫を減らす
' フォームの「登録ボタン」クリックイベントに設定
Private Sub btn登録_Click()
Dim rs As DAO.Recordset
Set rs = Me.受注明細フォーム.Form.RecordsetClone
rs.MoveFirst
Do Until rs.EOF
CurrentDb.Execute "UPDATE T_商品 SET 在庫数 = 在庫数 - " & rs!数量 & _
" WHERE 商品ID = " & rs!商品ID
rs.MoveNext
Loop
MsgBox "登録が完了しました", vbInformation
End Sub
このコードでは、受注明細をループして商品ごとの在庫を減らしています。
注意点やよくあるミス
- 商品IDや顧客IDは必ずリレーションシップで接続
- 在庫数のマイナス計算に注意(負の在庫にならないようチェック)
- フォームにバリデーション処理(未入力チェック)を追加
とくにVBAでの在庫更新は、更新対象がないとエラーになります。テーブル構造をよく確認してから処理を書きましょう。
応用ポイント:自動発注処理
在庫が一定以下になったとき、自動で発注レコードを作成する仕組みも可能です。
' 商品ごとの在庫数をチェックして発注処理
If rs!在庫数 < rs!基準在庫 Then
CurrentDb.Execute "INSERT INTO T_発注 (発注日, 発注先) VALUES (Date(), '仕入先A')"
' 発注明細追加処理などもここで
End If
こうした処理を応用すれば、Accessでも本格的な業務システムに発展させていけます。
まとめ:小さく始めて、便利を実感しよう
今回は、Accessで受発注管理システムを作る基本的な流れをご紹介しました。
- テーブル設計 → フォーム作成 → VBAによる在庫管理
- 実務に合わせてどんどん拡張可能
Accessは最初こそ少し難しく感じるかもしれませんが、一度作れるようになると、業務の効率が大きく変わります。
まずはサンプルをまねしながら、自分なりの「業務アプリ」づくりにチャレンジしてみてくださいね。
この記事が「やってみたい!」の一歩につながれば嬉しいです。
楽天ブックス
¥2,178 (2025/05/01 14:30時点 | 楽天市場調べ)
