Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトルAccessのフォームで複数あいまい検索条件
記事No172099
投稿日: 2017/12/13(Wed) 16:27
投稿者masunona
解決済: ON
OS:win10
Access Version:2010

氏名、住所、生年月日等フィールドが20程度ある顧客情報のテーブルがあり、それを絞込検索したいです。
フォームにテキストボックスを5つ配置し、最大5つのあいまい一致で検索できるようにしたいです。

いままでは絞込条件が3つ程度でした。
それぞれ、未入力あるなしを調べ、どのテキストボックスが未入力だったらどのクエリ、
というのをひとつずつ作っていました。
今回絞込条件が5つに増えたことで、この方法だと、
クエリを30以上作らなければならなくなり、困っています。

もっとよい方法はないでしょうか?
教えていただけたら嬉しいです。

Dim rsl As Integer, strQry As String

'IsNull関数により、選択状況を確認(未選択で-1、選択済で0が返される)
rsl = -(IsNull([Forms]![MAIN]![テキストボックス1]) * 1 + IsNull([Forms]![MAIN]![テキストボックス2]) * 2 + IsNull([Forms]![MAIN]![テキストボックス3]) * 4)

Select Case rsl
Case 0 '未入力なし(=-{(0*1)+(0*2)+(0*4)})氏名と生年月日と住所で絞込
strQry = "クエリ1"
Case 1 '(=-{(-1*1)+(0*2)+(0*4)})生年月日と住所で絞込
strQry = "クエリ2"
Case 2 '(=-{(0*1)+(-1*2)+(0*4)})氏名と住所で絞込
strQry = "クエリ3"
Case 3 '(=-{(-1*1)+(-1*2)+(0*4)})住所で絞込
strQry = "クエリ4"
    ・・・
    Case Else
MsgBox "不明", , "Error"
End Select

[Forms]![MAIN]![リスト31].RowSource = strQry

タイトルRe: Accessのフォームで複数あいまい検索条件
記事No172100
投稿日: 2017/12/13(Wed) 17:43
投稿者ナバ
解決済: ON
こんばんは。

> 今回絞込条件が5つに増えたことで、この方法だと、
> クエリを30以上作らなければならなくなり、困っています。
> もっとよい方法はないでしょうか?

それぞれのクエリはWhere句が違うだけですよね?

フォームの.RowSourceプロパティにクエリ名を代入するのではなく、
テキストボックスの入力状態によりWhere句を組み立てていき、
最後にSQL文として完成させた文字列を代入するようにしたらどうでしょう。

タイトルRe^2: Accessのフォームで複数あいまい検索条件
記事No172101
投稿日: 2017/12/13(Wed) 21:39
投稿者hatena
解決済: ON
ナバさんも回答されているように、リストボックスのRowSourceにはSQLも設定できますので、
VBAでSQLを生成すれば、クエリは不必要です。

提示のコードなら、下記のように記述できます。

Dim strSQL As String
Dim strWhere As String

strSQL = "SELECT * FROM テーブル名" '現状のクエリのWHERE句を除いたもの

If Not IsNull(Me.テキストボックス1) Then
    strWhere = strWhere & " AND 氏名='" & Me.テキストボックス1 & "'"
End If

If IsDate(Me.テキストボックス2) Then
    strWhere = strWhere & " AND 生年月日=#" & Me.テキストボックス2 & "#"
End If

If Not IsNull(Me.テキストボックス3) Then
    strWhere = strWhere & " AND 住所='" & Me.テキストボックス2 & "'"
End If

If strWhere = "" Then
   strSQL = strSQL & ";"
Else
   strSQL = strSQL & " WHERE " & Mid(strWhere, 6) & ";"
End If

Me.リスト31.RowSource = strSQL

条件が増えたら、If Nor IsNull(・・・) Then ・・・・の文を追加するだけです。

タイトルRe^3: Accessのフォームで複数あいまい検索条件
記事No172104
投稿日: 2017/12/14(Thu) 16:16
投稿者masunona
解決済: ON
ナバ さま
hatena さま

丁寧に教えていただきありがとうございます!!
ひとつひとつクエリを作成する必要が無くなるだけでもすごく楽にはなるのですが,
もうひとつうかがいたいのは,
やはり,このやりかたであっても,30以上のパターンすべての
VBAを記述する必要はありますよね?

(氏名だけで検索する,氏名と生年月日で検索する,氏名と生年月日と住所で検索する,
住所と生年月日で検索する,氏名と生年月日と住所で検索する・・・)

そのパターンを減らすことは難しいですよね・・。
ずうずうしくすみません。

タイトルRe^4: Accessのフォームで複数あいまい検索条件
記事No172105
投稿日: 2017/12/14(Thu) 23:16
投稿者hatena
解決済: ON
> 丁寧に教えていただきありがとうございます!!
> ひとつひとつクエリを作成する必要が無くなるだけでもすごく楽にはなるのですが,
> もうひとつうかがいたいのは,
> やはり,このやりかたであっても,30以上のパターンすべての
> VBAを記述する必要はありますよね?
>
> (氏名だけで検索する,氏名と生年月日で検索する,氏名と生年月日と住所で検索する,
> 住所と生年月日で検索する,氏名と生年月日と住所で検索する・・・)

いえ、条件を設定したフィールドの数だけ If ・・・ Then 文を記述するだけです。

氏名と生年月日と住所の3つのフィールドが対象なら、If ・・・ Then文は3つです。
私の回答のコードをもういちどよく読んで、コードの意味を理解してください。


あと、前回の回答では完全一致の条件でしたが、あいまい条件(部分一致)にしたいなら、
条件式を生成するコードを下記のようにLike演算子で比較するように変更します。

strWhere = strWhere & " AND 氏名 Like '*" & Me.テキストボックス1 & "*'"

タイトルRe^5: Accessのフォームで複数あいまい検索条件
記事No172107
投稿日: 2017/12/20(Wed) 12:21
投稿者masunona
解決済: ON
>hatena さま

ご連絡が大変大変遅くなってしまって申し訳ありません。

お返事いただいた日から毎日少しずつ作業していて,
先ほどやっと完成しました!
コードの意味を理解するのにとても時間がかってしまい・・・。

いらなくなったクエリを削除してスッキリです!!
本当にありがとうございました!!!!!

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る