こんにちは、なかぜんです。
「この項目を入力したら、関連する他の項目も自動で埋まったらラクなのに…」
Accessを使っていると、そんな風に思う場面ってありませんか?例えば「商品コードを入力したら商品名や単価も自動表示される」など、よくあるニーズです。
実はこれ、Accessのフォームと少しのVBAを使えば、誰でも簡単に実現できます。
今回は、そんな「他フィールドを自動入力する方法」について、初心者の方にもわかりやすく丁寧に解説していきます!
どんな場面で使えるの?
この方法が役立つのは、次のような場面です:
- 商品コードを入力 → 商品名・単価を自動表示
- 社員番号を入力 → 氏名や部署を表示
- 顧客IDを入力 → 顧客名や住所を表示
つまり、「マスタ情報をもとに、入力ミスなく、素早くデータを入力したい」時にピッタリなんですね!
フォームで自動入力を実現する方法
① マスタテーブルを用意しよう
今回は例として「商品コードから商品名と単価を自動入力する」ケースを使います。
まず、次のような商品マスタテーブル(T_商品)を作っておきます:
- 商品コード(主キー)
- 商品名
- 単価
② 入力用のフォームを作成
次に、「商品コード」「商品名」「単価」の3つのテキストボックスを配置したフォーム(F_受注明細)を作ります。
この時、テキストボックスの名前を以下のようにしておくと、後のコードが書きやすくなります。
- 商品コード:txt商品コード
- 商品名:txt商品名
- 単価:txt単価
③ VBAで自動入力のコードを書く
フォームの「商品コード」テキストボックスにフォーカスが移った時(または変更された時)に、対応する商品名と単価を表示するようにします。
以下がそのコード例です。
' 商品コードが変更されたときにマスタから情報取得
Private Sub txt商品コード_AfterUpdate()
Dim rs As DAO.Recordset
Dim strSQL As String
' SQL文でマスタを検索
strSQL = "SELECT 商品名, 単価 FROM T_商品 WHERE 商品コード = '" & Me.txt商品コード & "'"
Set rs = CurrentDb.OpenRecordset(strSQL)
If Not rs.EOF Then
Me.txt商品名 = rs!商品名
Me.txt単価 = rs!単価
Else
MsgBox "該当する商品コードが見つかりません", vbExclamation
Me.txt商品名 = ""
Me.txt単価 = ""
End If
rs.Close
Set rs = Nothing
End Sub
ポイント解説:
txt商品コード_AfterUpdate
は、商品コードを入力し終えた後に実行されるイベントです。- SQLでマスタを検索し、結果があればフォームの他のフィールドに代入します。
- 存在しないコードを入れたときはメッセージを出して空欄にしています。
よくあるミスと注意点
- 商品コードが未入力のままEnter→エラー発生:入力チェックを追加するのがおすすめです。
- 商品コードが重複している:マスタ側で主キー制約を忘れずに!
- フォームのテキストボックス名が違う:コードと名前が一致しているか要確認。
ちょっと応用:連結コンボボックスを使ってさらに便利に!
もう一歩進んだ使い方として、「商品コードを選択できるコンボボックス」にする方法もあります。
この場合、コンボボックスで選んだ商品に応じて、他のフィールドが連動して表示されるようにします。
VBAを使わず、コンボボックスの列幅プロパティやAfterUpdateイベントだけで実現可能です。
' コンボボックスを使う場合の例
Private Sub cbo商品コード_AfterUpdate()
Me.txt商品名 = Me.cbo商品コード.Column(1)
Me.txt単価 = Me.cbo商品コード.Column(2)
End Sub
Column(1)やColumn(2)は、コンボボックスに設定したクエリの列順を示しています。
まとめ:業務効率アップにつながる入力補助!
今回は「入力時に他フィールドを自動入力する方法」を紹介しました。
Accessのフォームと少しのVBAを使えば、業務でよくある「入力の手間」や「ミス」を減らすことができます。
まずはシンプルな例から試してみて、慣れてきたら連結コンボボックスなどの応用にもチャレンジしてみてください。
「これ、自分でもできそう!」と思った方、ぜひ一度やってみてくださいね。
それでは、また次回の記事でお会いしましょう〜!
