PR

Accessで作る!受発注管理システムの作り方

Access
スポンサーリンク
スポンサーリンク

こんにちは、なかぜんです。
「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は最初こそ少し難しく感じるかもしれませんが、一度作れるようになると、業務の効率が大きく変わります。
まずはサンプルをまねしながら、自分なりの「業務アプリ」づくりにチャレンジしてみてくださいね。

この記事が「やってみたい!」の一歩につながれば嬉しいです。