目次
顧客別の単価を設定するには?
こんにちは。伊川(@naonaoke)です。
今回は、顧客別に単価をACCESSで設定します。
これは、Yahooの知恵袋で質問されていた項目です。
少しだけ回答して、追加の答えを書くことなくベストアンサーになってしまいました。
問題提起
(株)IKAWAの阿久 世子男(アク セスオ)は、下記のような依頼を受けました。
・顧客別に単価設定をしたい。
・顧客テーブルと商品テーブルは作成済である。
どのように作成すればいいだろうか?
解決策
・顧客別単価を設定するテーブルを作成する。・オートルックアップクエリと、カンタンなVBAを利用してフォームを作成する。
顧客別単価を設定するテーブルを作成する。
作成手順 その1 現在のテータベースを確認する
上の図のように、MT_顧客ID(主キーは顧客ID)、MT_商品ID(主キーは商品ID)があるとします。
ここから、顧客別単価を管理するテーブルを作成します。
つまり、1社について、商品10個分のIDが作成されます。
作成手順 その2 顧客別単価テーブルを作成する。
赤枠の中は、顧客IDと、商品IDを合わせました。
主キーと主キーを組合わせても、重複はしません。
これは、Excelで作成したほうが楽です。
10社に、10個の商品IDを組合わせるので、100個のデータができます。
主キーができましたので、当然、データ入力は、オートルックアップクエリを使います。
作成手順 その3 データ入力で、オートルックアップクエリを使えるようにする
上の図のように、MT_発注というテーブルを作成します。
テーブルの構造は、上の図のようにしていますが、顧客別単価IDを作成します。
顧客別単価IDでオートルックアップクエリを作成します。
オートルックアップクエリに関しては、上の記事を参照してください。
オートルックアップクエリを使う準備は完了しました。
作成手順 その4 検索フォームを作成する
上の図のような入力フォームを作成しました。
社名、商品名を、コンボボックスにしています。
上の図のようにコンボボックスを2列にしています。
プロパティシートで、「列数」を2、「列幅」2cm;2cmにします。
そして、顧客IDに反映をさせます。
Private Sub 社名_AfterUpdate() Me.顧客ID.Value = Me.[社名].Column(1) End Sub
社名を選択すると、商品IDが、自動的に入力されます。
商品名を選択すると、商品IDも自動的に入力されるようにしています。
作成手順 その5 顧客別単価IDを作成する
顧客別単価IDは、顧客IDと商品IDを合体させたものです。
つまり、このフォームでは、商品が選択された時点で、商品IDも、顧客IDもフォーム上に表示されます。
Private Sub 商品名_AfterUpdate() Me.商品ID.Value = Me.[商品名].Column(1) Me.顧客別単価ID.Value = 顧客ID.Value & 商品ID.Value Me.発注日 = Date End Sub
顧客別単価IDが表示されることで、顧客別単価がオートルックアップクエリによって、自動で表示されます。
後は、オマケですが、発注日も自動で入力されます。
発注数量が、入力されると、自動で、計算され、合計金額は表示されます。
Private Sub 発注数量_AfterUpdate() Me.金額合計 = Me.発注数量 * 顧客別単価 End Sub
ここがポイント
データベースを作成するときは、オートルックアップクエリが使えるように設計することです。
また、いったん入力されたデータは、再度入力しないで、参照するがデータベースの原則です。
まとめ
オートルックアップクエリが使えると、後は、きわめて単純なVBAのコードを記載するだけです。
今回のサンプルファイルは、No40です。
わからない事を延々と考えるのは、無駄です。
- なんで作動かないの?
- もうやだ!VBAなんか嫌い!
- ネットで調べても情報がない!
必ず作動するコードが、ここにあります。