- ベストアンサー
アクセスでのテキストボックスの複数条件での抽出
- 学校名や学校区分、キャンパスを条件にしてレコードを抽出するためのテキストボックスがあります。
- 学校名を条件に抽出すると、指定された学校名に合致するレコードが表示されます。
- 学校名を抽出した後、その範囲で学校区分を指定することができます。しかし、学校区分の入力によって他の大学も抽出されてしまう問題があります。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
わかった。 フォームモジュールの先頭 Option Compare Database の次の行に Option Explicit これで分かるでしょう。
その他の回答 (7)
- m3_maki
- ベストアンサー率64% (296/460)
No6 です。 To hatena さん 失礼しました。 大丈夫ですね。
- m3_maki
- ベストアンサー率64% (296/460)
hatena さん お疲れのようですね。 >> 何もイミディエイトウィンドウには記載はありませんでした。。 > If 学校名1 <> "" Then Null チェック が必要かと。 ^^;
- hatena1989
- ベストアンサー率87% (378/433)
> 何もイミディエイトウィンドウには記載はありませんでした。。 それでは、下記の手順を試してください。 フォームをデザインビューで開き、「検索」コマンドボタンの「クリック時」プロパティに、[イベント プロシージャ] と設定されている確認。 設定されていたら、右端のビルドボタンをクリックして、VBAウィンドウが開き、Private Sub 検索_Click() のコードが表示されるか確認。 表示されたら、下記のように MsgBox のコードを挿入。 Private Sub 検索_Click() Dim strFilter As String MsgBox "検索_Click!" If 学校名1 <> "" Then strFilter = " And 学校名 = '" & 学校名1 & "'" End if If 学校区分1 <> "" Then strFilter = strFilter & " And 学校区分 = '" & 学校区分1 & "'" End If If キャンパス <> "" Then strFilter = strFilter & " And キャンパス = '" & キャンパス1 & "'" End If MsgBox "strFilter='" & strFilter & "'" Me.Filter = Mid(strFilter1, 6) Me.FilterOn = (strFilter <> "") End Sub フォームビューにして、学校名1、学校区分1、キャンパス1 に何か入力して、 検索ボタンをクリック。 MsgBox 2回表示されるか確認。 表示されるなら、表示された内容を押して得てください。
お礼
<フォームをデザインビューで開き、「検索」コマンドボタンの「クリック時」プロパティに、[イベント プロシージャ] と設定されている確認。 <設定されていたら、右端のビルドボタンをクリックして、VBAウィンドウが開き、Private Sub 検索_Click() のコードが表示されるか確認。 ↑こちら確認済みです。詳細な説明ありがとうございます。 そして標記のコードを貼り付け実行させ、2回ほどメッセージがでたので 2回クリックしましたが、実行結果はテキストボックスに入れた内容で抽出されず 何も変化はありませんでした。。 m3_maki さんもNo7で仰られているように実行には問題ないみたいですね。。 う。。何がいけないのでしょうか。。
- hatena1989
- ベストアンサー率87% (378/433)
> いわれた通りデバックからコードを貼り付けてみました。 それでは、そのフォームを開いて、検索ボタンを押してから、 キーボードの Ctrl + G を押してください。 VBAウィンドウが開きまずので、そこのイミディエイトウィンドウに 何か表示されてますか。 表示されていたら、それをコピーしてこの掲示板に貼り付けてください。
お礼
返信ありがとうございます。 何もイミディエイトウィンドウには記載はありませんでした。。
- hatena1989
- ベストアンサー率87% (378/433)
前回の回答のコードにタイプミスがありましたので、下記に修正してください。 Private Sub 検索_Click() Dim strFilter As String If 学校名1 <> "" Then strFilter = " And 学校名 = '" & 学校名1 & "'" End if If 学校区分1 <> "" Then strFilter = strFilter & " And 学校区分 = '" & 学校区分1 & "'" End If If キャンパス <> "" Then strFilter = strFilter & " And キャンパス = '" & キャンパス1 & "'" End If Me.Filter = Mid(strFilter1, 6) Me.FilterOn = (strFilter <> "") End Sub これで、うまくフィルタが掛からない場合は、上記の、End Sub の前に、 Debug.Print Me.Filter というデバック用コードを挿入して実行してみてください。 検索ボタンをクリックした後、Ctrl+G でイミディエイトウィンドウを表示させ、そこに表示された文字列をコピーしてここに貼り付けてもらえますか。
お礼
hatena1989さん、返信ありがとうございます。 とりあえず、再度実行してみたのですが動きません。 いわれた通りデバックからコードを貼り付けてみました。 Private Sub 検索_Click() Dim strFilter As String If 学校名1 <> "" Then strFilter = " And 学校名 = '" & 学校名1 & "'" End If If 学校区分1 <> "" Then strFilter = strFilter & " And 学校区分 = '" & 学校区分1 & "'" End If If キャンパス <> "" Then strFilter = strFilter & " And キャンパス = '" & キャンパス1 & "'" End If Me.Filter = Mid(strFilter1, 6) Me.FilterOn = (strFilter <> "") 'Me.FilterOn = True Debug.Print Me.Filter End Sub
- hatena1989
- ベストアンサー率87% (378/433)
> (1)のみの抽出の場合や(1)と(2)のみの > 場合があるのでandの完全一致ではありません。 Or条件でもないですね。 And 条件の場合分けでしょうね。 下記のコードでいかがですか。 Private Sub 検索_Click() Dim strFilter As String If 学校名1 <> "" Then strFilter = " And 学校名 = '" & 学校名1 & "'"Eend if If 学校区分1 <> "" Then strFilter = strFilter & " And 学校区分 = '" & 学校区分1 & "'" End If If キャンパス <> "" Then strFilter = strFilter & " And キャンパス = '" & キャンパス1 & "'" End If Me.Filter = Mid(strFilter1,5) Me.FilterOn = (strFilter <> "") End Sub
お礼
hatena1989 さん ご回答ありがとうございます。 プログラムの内容は大まかには理解できたのですが ボタンをクリックしても何も抽出されません。
要求する仕様が良く分からないのです。 「早稲田」or「大学」で、他の大学が出てくるのは当然だと思いますし、それが「学校名を抽出させたら、その範囲で学校区分の大学を抽出させたい」という仕様ではないのですか? なんで「大学」という範囲のレコードを抽出するのに、「早稲田大学」も一緒に抽出条件する場合があるのかはよく分かりませんが。 また、厳密に言うと「その範囲で学校区分の大学」もよく意味が分かりません。こんな掲示板に書いているのですから、別にきっちりかっちり書けといっているわけではありません。ただ、要求する動作がきちんと定義されていないのではないか、という印象をもちました。 フィルターの使い方という話ではなくて、そもそもデータベースの設計、というかデータの整理の仕方、運用の仕方に問題があるのではないですか?
お礼
bonaronさん Option Explicitをつけたら、実行できるようになりました! ありがとうございます。 ただ、当初質問した条件通りには抽出できませんでした。。 hatenaさん細かくありがとうございました。