質問: アクセスのクエリ、リストボックスで複数選択をしたい フォームのリストボックスから選択してクエリで検索しています。 ▼フォーム 例) 北海道 東北 関東 ▼クエリ [forms]![フォーム]![地域] ← 抽出条件 リストで1つしか選べないのですが、これを複数選択出来るようにするにはどのようにしたら 良いのでしょうか? 今だと北海道しか選べないので、これを北海道、東北などと複数を選べるように変更したいと思っています ?ご存知の方教えてください。
回答: id__地域 1___北海道 2___東北 3___関東 まず、この簡単なテーブルをリストボックスの選択に応じてmsgbox で表示に挑戦されたらと。 1、tab1 作成しデータ登録。 2、フォームにリストボックス[地域]とテキストボックス[選択地域]を配置。 [地域].[値集合ソース]=select tab1.地域 from tab1; 3、以下の dbselect関数を標準モジュールに登録。 これで、テスト準備完了です。 <やるべき作業> 以下のコードを書くだけです。 private sub 地域_click() dim i as integer dim n as integer dim l as integer me.選択地域 = "" n = me.地域.listcount - 1 if n >= 0 then for i = 0 to n if me.地域.selected(i) then me.選択地域 = me.選択地域 & "'" & me.地域.itemdata(i) & "'," end if next i if len(me.選択地域) then msgbox dbselect("select * from tab1 where 地域 in (" & me.選択地域 & ")") end if end if end sub これだけで、複数選択に応じたデータがメッセージボックスに表示されます。 select * from tab1 where 地域 in ('北海道','東北') このような sql文を作成しているだけです。 後は、各フォームのレコードソースを、このsql 文にすれば事足ります。 public function dbselect(byval strquerysql as string, _ optional byval strseparator1 as string = ";", _ optional byval strseparator2 as string = "") as string on error goto err_dbselect dim i as integer dim j as integer dim r as integer dim c as integer dim m as integer dim n as integer dim rst as adodb.recordset dim fld as adodb.field dim datas as string set rst = new adodb.recordset ' ================= ' begin with: rst ' ----------------- with rst .open strquerysql, _ currentproject.connection, _ adopenstatic, _ adlockreadonly if not .bof then m = .recordcount - 1 n = .fields.count - 1 .movefirst for r = 0 to m for c = 0 to n datas = datas & .fields(c) & strseparator1 next c if len(strseparator2) then datas = datas & strseparator2 end if .movenext next r end if end with ' --------------- ' end with: rst ' =============== exit_dbselect: dbselect = datas exit function err_dbselect: msgbox "select 文の実行時にエラーが発生しました。(dbselect)" & chr$(13) & chr$(13) & _ "・err.description=" & err.description & chr$(13) & _ "・sql text=" & strquerysql, _ vbexclamation, " 関数エラーメッセージ" resume exit_dbselect end function なお、クエリ自身の改造は任せます。 私は、ダイレクトにレコードソースを指示することしかしていません。 私は、クエリ自体もフォームから更新して利用しています。 よって、クエリでフォームの[選択地域]を参照させることは、どうにも苦手です。