クエリでSQLを作成しVBAのRecordsetで使用する - Access VBA入門
SQL文を作成する場合、テーブル名やフィールド名入力と文法などでクエリで作成した方が簡単な場合があります。そこでここではクエリからSQL文を作成し、Recordsetで抽出結果を表示するVBAを作成します。
もしVBA実行中にエラーが発生する場合は、「Access 64Bit版でDAO Object Libraryがエラーになる」を参照してください。
下の市町村別の耕作面積がデータの「T_全国耕地面積一覧」テーブルを使用します
クエリからSQLを作成する
クエリデザインでクエリを作成します。
「T_全国耕地面積一覧」テーブルの全フィールドを追加し、抽出条件に耕地面積が「>20000」と設定しました。
実行すると、耕地面積が20000を超えるレコードが表示さました。
クエリをSQL文にします。
リボンの[クエリ ツール]~[デザイン]~[表示]~[SQLビュー]をクリックします。
これでSQL文が表示されました。
後で使用しますので、コピーをメモ帳などに貼付けておいてください。
SQLをRecordsetで使用するVBAの作成
フォームを作成し、テキストボックスを配置します。
フォームのプロパティで、読み込み時イベントにイベントプロシージャを選択し、右の[…]ボタンをクリックします。
Form_Loadのプロシージャが表示されるので下のVBAを入力します。
・SQL=のところに、クエリで作成したSQL文を入力します。
・SQL文は長くなることが多いので、「 & _ 」を使用し、折り返すとVBA全体が見易くなります。
・SQLで抽出したRecordsetを、Do Loopでテキストボックスに代入しています。
Private Sub Form_Load()
Dim SQL As String
Dim rs As Recordset
Me!テキスト0 = Null
SQL = "SELECT T_全国耕地面積一覧.市町村名, T_全国耕地面積一覧.耕地面積, " & _
"T_全国耕地面積一覧.田耕地面積 FROM T_全国耕地面積一覧 " & _
"WHERE (((T_全国耕地面積一覧.耕地面積)>20000));"
Set rs = CurrentDb.OpenRecordset(SQL)
Do Until rs.EOF
Me!テキスト0 = Me!テキスト0 & rs![市町村名] & " : " & rs![耕地面積] & vbCrLf
rs.MoveNext
Loop
Set rs = Nothing
End Sub
実行すると耕作面積が2000を超える市町村名がテキストボックスに表示されました。