Accessで顧客管理作成 [売上履歴追加]

前回の「Accessで顧客管理作成 [入力支援機能]」で作成した「顧客情報入力」フォームに売上履歴を入力する機能を追加する手順を紹介します。
ackoky3190.gif

<機能追加手順>
●売上履歴を保存するためのテーブルを作成します。
Accessで顧客管理ソフト作成[入力支援機能]で作成したaccdbファイルを起動し、
リボン「作成」タブの「テーブルデザイン」をクリックします。
ackoky3010.gif

新規テーブルが表示されますので、売上明細データとして必要な項目を設定します。
今回は、下記の項目を設定します。
売上番号 オートナンバー型
顧客ID 数値型 長整数型
売上日 日付/時刻型
商品名 テキスト型 フィールドサイズ40
数量 数値型 倍精度浮動小数点型
単価 通貨型
金額 通貨型
(Access2013以降は「テキスト型」→「短いテキスト」)
ackoky3020.gif

主キーとなる項目を設定します。
売上番号を選択し、リボン「デザイン」タブの「主キー」をクリックします。
ackoky3030.gif

テーブルを保存します。テーブル右上の「×」ボタンを押下すると、名前を付けて保存画面が表示されますので、テーブル名に「売上明細データ」と付けて「OK」ボタンを押下します。
ackoky3040.gif

●「顧客情報入力」フォームへ売上明細データを入力する機能を追加します。
フォーム「顧客情報入力」を選択して右クリックし、ショートカットメニューの「デザインビュー」をクリックしてデザインビューを表示します。
ackoky3050.gif
ackoky3055.gif

「顧客情報入力」フォームの下部に売上履歴用のスペースを空けるため、項目の配置を調整します。
ackoky3060.gif

テーブル「売上明細データ」を「顧客情報入力」フォームの下部にドラッグします。
ackoky3070.gif

サブフォームウィザードが表示されますので、メインフォーム(顧客マスタ)とサブフォーム(売上明細データ)のデータ連結させる項目を指定します。今回は、メインフォームの顧客マスタの「ID」とサブフォームの売上明細データの「顧客ID」を連結させますので「ID」と「顧客ID」を指定し、「次へ」ボタンを押下します。
ackoky3080.gif

サブフォームの名前を付けて「完了」ボタンを押下します。今回は自動的に表示される名前をそのまま使用します。
ackoky3090.gif

「顧客情報入力」フォームの下部に売上明細データのサブフォームが追加されました。
ackoky3100.gif

サブフォームの上にあるタイトルラベル「売上明細データのサブフォーム」とサブフォーム内にある「売上番号」項目と「顧客ID」項目は今回は表示不要なので削除し、
サブフォームの幅を調整します。
ackoky3110.gif

数量と単価が入力された際、金額が自動計算されるよう処理を追加します。
「数量」項目を選択し、「更新後処理」プロパティの「・・・」を押下します。
ackoky3120.gif

ビルダーの選択画面が表示されますので、「コードビルダー」を選択して「OK」ボタンを押下します。
ackoky3130.gif

数量の更新後処理(数量_AfterUpdate)へ「数量 × 単価」の計算結果の小数以下を四捨五入して「金額」項目に表示するVBAコードを記述します。
ackoky3140.gif
Private Sub 数量_AfterUpdate()
    Me.金額 = Nz(Me.数量, 0) * Nz(Me.単価, 0)
    If Me.金額 > 0 Then
        Me.金額 = Fix(Me.金額 + 0.5)
    Else
        Me.金額 = Fix(Me.金額 - 0.5)
    End If
End Sub

<VBAコード補足解説>
Nz関数を使用したNz(Me.数量, 0)やNz(Me.単価, 0)は、その項目に値が入力されていない場合に0に置き換える処理です。この処理により、数量×単価の計算時にどちらかの項目が未入力によるNullエラーを回避することができます。
また、VBAには四捨五入のRound関数がありますが、VBAのRound関数は一般的な算術型丸め処理ではなく、銀行型丸め処理のため、Fix(Me.金額 + 0.5)のように金額に0.5を加算し、小数以下を切り捨て(Fix関数)することより四捨五入計算を行います。金額がマイナスの場合は、Fix(Me.金額 - 0.5)により四捨五入計算を行います。


VBAコード記述後には、メニューバー「デバッグ」の「顧客管理のコンパイル」でコンパイルを行なってください。コンパイルを行なうことにより記述間違いがないかどうかも確認できます。
ackoky3145.gif

同様に、単価の更新後処理にも金額を計算するVBAコードを記述してコンパイルします。
ackoky3150.gif

ackoky3170.gif
Private Sub 単価_AfterUpdate()
    Me.金額 = Nz(Me.数量, 0) * Nz(Me.単価, 0)
    If Me.金額 > 0 Then
        Me.金額 = Fix(Me.金額 + 0.5)
    Else
        Me.金額 = Fix(Me.金額 - 0.5)
    End If
End Sub

以上で、売上履歴を入力する機能が追加できました。
ackoky3190.gif


完成したファイルを下記ボタンからダウンロード出来ます。
download.gif