Microsoft Accessでフォームを開いたタイミングで、テーブルの複数列の値をリストボックスへ表示したい場合、VBAを使って動的に値を設定する方法があります。テーブルをそのまま値集合ソースに指定できない場合でも、フォームの読み込みイベントでSQL結果をリストボックスへ渡すことで柔軟な制御が可能です。この記事では、テーブルAのA列とB列をフォームAのリストボックスへ表示する具体的な方法を解説します。
AccessのリストボックスへVBAでデータを設定する基本的な考え方
Accessのリストボックスには「値集合ソース」という設定がありますが、用途によってはテーブルを直接指定すると管理しにくい場合があります。
そのような場合は、フォームが開いたときに実行される「フォームの読み込み時イベント(Form_Load)」や「開く時イベント(Form_Open)」でVBAを実行し、リストボックスのRowSourceプロパティへSQL文を設定します。
例えば、テーブルAにA列とB列があり、その2列をリスト表示したい場合は、SELECT文で必要な列だけ取得してリストボックスへ渡します。
フォーム表示時にリストボックスへ2列をセットするVBAコード
フォームAを開いたタイミングでテーブルAのA列とB列を表示する場合、以下のようなコードをフォームの読み込み時イベントへ記述します。
Private Sub Form_Load()
Me.リストボックス名.RowSource = "SELECT A列, B列 FROM テーブルA;"
Me.リストボックス名.Requery
End Sub
「リストボックス名」の部分は、実際に作成したリストボックスの名前へ変更してください。また、「A列」「B列」「テーブルA」も実際のフィールド名とテーブル名に合わせて修正します。
列幅や表示形式を調整して見やすくする方法
2列表示のリストボックスでは、列数や列幅を設定すると見やすい表示になります。
例えば、A列をコード番号、B列を名称として表示する場合は、列数を2に設定し、列幅を調整します。
Private Sub Form_Load()
With Me.リストボックス名
.ColumnCount = 2
.ColumnWidths = "3cm;5cm"
.RowSource = "SELECT A列, B列 FROM テーブルA;"
.Requery
End With
End Sub
この設定により、左側にA列、右側にB列を表示したリストボックスを作成できます。
DAOを使ってVBAでリストへ値を追加する方法
SQLをRowSourceへ直接指定する方法以外にも、DAOを利用してレコードを取得し、リストボックスへ1件ずつ追加する方法があります。
例えば、検索条件によって表示内容を変更したい場合や、複雑な処理を行いたい場合はDAOを使う方法が便利です。
Private Sub Form_Load()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT A列, B列 FROM テーブルA")
Me.リストボックス名.RowSource = ""
Do Until rs.EOF
Me.リストボックス名.AddItem rs!A列 & ";" & rs!B列
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
End Sub
フォームを開くたびに最新データを表示するポイント
テーブルの内容が変更される可能性がある場合は、フォームを開くたびにリストボックスを更新する仕組みにしておくことが重要です。
フォームのLoadイベントでRowSourceを設定しておけば、フォーム表示時に毎回最新のテーブル内容を取得できます。
例えば、新しいデータがテーブルAへ追加された場合でも、フォームを閉じて再度開くだけでリストボックスへ反映されます。
まとめ|Access VBAならフォーム表示時に自由な条件でリスト設定が可能
Accessのフォームでテーブルの値をリストボックスへ表示する場合、値集合ソースを直接指定する方法だけでなく、VBAで動的に設定する方法があります。
単純に2列を表示するだけならRowSourceへSELECT文を設定する方法が簡単です。一方で条件指定や加工処理が必要な場合はDAOを利用した方法が適しています。
フォームの表示タイミングでデータを取得する仕組みにしておくことで、常に最新の情報を表示でき、管理しやすいAccessデータベースを作成できます。


コメント