• ベストアンサー

AccessのフォームでAND検索

Accessで今、土地物件を検索するものを作っています。 物件はテーブルに200件くらいあります。 そのテーブルのフィールドに「土地面積(坪)」と「価格」いう名前のフィールドがあるのですが、この2つは【○○~○○】という具合にフォームでボタンを押せば範囲検索が出来るようになっています。 だけど、OR条件になってしまいます。 出来れば、それをAND条件で検索できる様にしたいのです。 ソースは今このようになっています↓↓ テキスト:「tubo1」「tubo2」「kakaku1」「kakaku2」 Private Sub コマンド55_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("物件情報", dbOpenDynaset) If tubo1 <> "" Then If tubo2 <> "" Then    rs.Filter = "[土地面積(坪)] >=" & tubo1 & " And [土地面積(坪)] <=" & tubo2 Else rs.Filter = "[土地面積(坪)] =" & tubo1 End If If kin1 <> "" Then If kin2 <> "" Then rs.Filter = "[価格] >=" & kakaku1 & " And [価格] <=" & kakaku2 Else rs.Filter = "[価格] =" & kakaku1 End If End If End If Set rs = rs.OpenRecordset Set Me.Recordset = rs Me.Requery Set rs = Nothing Set db = Nothing End Sub です。宜しくお願い致します。 ちなみにAccess2007です。

質問者が選んだベストアンサー

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

条件が上書きされてますね。下記のようにすれば良いのでは? Private Sub コマンド55_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim rsf1,rsf2 As String Set db = CurrentDb Set rs = db.OpenRecordset("物件情報", dbOpenDynaset) If tubo1 <> "" Then If tubo2 <> "" Then    rsf1 = "[土地面積(坪)] >=" & tubo1 & " And [土地面積(坪)] <=" & tubo2 Else rsf1 = "[土地面積(坪)] =" & tubo1 End If If kin1 <> "" Then If kin2 <> "" Then rsf2 = "[価格] >=" & kakaku1 & " And [価格] <=" & kakaku2 Else rsf2 = "[価格] =" & kakaku1 End If End If End If If rsf1 <> "" And rsf2 <> "" Then  rs.Filter = rsf1 & " And " & rsf2 '両方に条件がある場合 Else rs.Filter = rsf1 & rsf2 '片方に条件がない場合 End If Set rs = rs.OpenRecordset Set Me.Recordset = rs Me.Requery Set rs = Nothing Set db = Nothing End Sub

minnie1015
質問者

お礼

アドバイスありがとうございます! 試してみたいと思います。

その他の回答 (1)

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

OR条件にもなっていませんよ どっちか片方だけですね というかkakakuが入力されればtuboは無視されますね (価格のほうで書き換えてしまっています) 坪のほうをfilter1、価格のほうをfilter2とでもして filter="(" & filter1 & ") and (" & filter2 & ")" のように連結しなきゃ

minnie1015
質問者

お礼

アドバイスをありがとうございます! さっそく試してみます。

関連するQ&A

  • ACCESS どこがおかしいのか?

    ACCESSで。クエリからフォームを作成し、検索フォームを作成しようとしています。 AND条件とOR条件を作り検索(抽出)を行いたいのですが、何が間違っているのか、 検索をかけるとすべて「登録がありません」になってしまいます。 どこが間違っているのか、もしくは代替案を教えていただけますでしょうか。 以下は記述した、VBAコードです。 Private Sub 検索ボタン_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim stFil As String Set db = CurrentDb() Set rs = db.OpenRecordset("Q_Autoweb", dbOpenDynaset) 'オプションボタンで条件を選択 If 検索条件 = 1 Then rs.Filter = "[タイトル]='" & タイトル検索 & "' and [本文]='" & テキスト15 & "'" Else rs.Filter = "[タイトル]='" & タイトル検索 & "' or [本文]='" & テキスト15 & "'" End If Set rs = rs.OpenRecordset Set Me.Recordset = rs If rs.EOF = True Then MsgBox "登録がありません" Else Me.ID = rs!ID Me.案件名 = rs!案件名 Me.タイトル = rs!タイトル Me.本文 = rs!本文 End If rs.Close Set rs = Nothing db.Close Set db = Nothing End Sub よろしくお願いします。

  • フォームから削除をしたいです

    ACCESSで、VBAを使用し、レコードを削除しようとしています。 自分の書いたコードは以下の通りです。 --------------------------------------------------------------- Private Sub cmd削除_Click() If vbYes = MsgBox("現在表示中のレコードを削除してもよろしいですか?", _ vbYesNo + vbInformation + vbDefaultButton2) Then Set DB = CurrentDb  Set RS = DB.OpenRecordset("SELECT * FROM メール _ WHERE ID=ID") RS.Delete          Me.コード.SetFocus Call 画面クリア ボタン使用不可 Set RS = Nothing Set DB = Nothing End If End Sub -------------------------------------------------------------- コレを実行すると、開いたフォームのIDのレコードではなく、上から順番に消えてしまいます。どこが間違っているのでしょうか。 恐れ入りますが、ご教授願えますでしょうか。

  • ExcelからAccessデータを検索するマクロ

    Excel、Accessとも初心者です。 下記を参考にさせて頂いております。 http://okwave.jp/qa/q441987.html これを、(1)~(3)に対応させたいのですが どのように書き換えればよろしいのでしょうか? (1)A1→ A列の最後まで (2)対応するレコードフィールド2   → 規定した複数のレコードフィールド     (例えば、フィールド3とフィールド5とフィールド8) (3)Excel, Accessともに2007です。 (4)検索の経過は表示させない  (少しでも早く処理したい。ひとつひとつ検索結果を表示すると遅くなると聞ききました) ・・・・・・・・・・・・・・・・・・・・・・・・・ Sub Macro1() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = OpenDatabase("c:\abc.mdb") Set rs = db.OpenRecordset("tbl_a", dbOpenDynaset) rs.FindFirst "[フィールド1]='" & Range("A1").Value & "'" If rs.NoMatch Then   Range("B1").Value = "" Else   Range("B1").Value = rs![フィールド2] End If rs.Close Set rs = Nothing Set db = Nothing End Sub ・・・・・・・・・・・・・・・・・・・・・・・・・ よろしくご教授お願いします。

  • Accessのテーブル取り込み付いて

    お世話になります。 Access2000のVBAで、テーブルの取り込み処理に ついて教えて下さい。 下記のようなソースで、ACCESSのテーブルを取り込み →エクセルに書き出しをしているのですが、 (1)の箇所で取り込み処理の時間が大量にかかっていることが わかりました。 処理速度が速くなるような、別のコーディングがあるのでしたら 教えて頂きたいので宜しくお願いします。 ----------ソース-------------------------- --------(1)--------------- With CurrentDb.QueryDefs(テーブル) .Parameters("[ID]") = "1111" Set rs = .OpenRecordset End With --------(1)--------------- If (Not rs.EOF) Then oApp.Sheets(1).cells(count, i + 1) = rs(i).Name oApp.Sheets(1).cells(count + 1, 1).CopyFromRecordset rs End If rs.Close Set rs = Nothing db.Close -----------------------------------------

  • アクセスVBA 変数での抽出条件の書きかた

    顧客データテーブルからの抽出です。 変数を使った書き方がわかりません。 よろしくお願いします。 テーブルのレコードには [氏名]:鈴木 [telnum]:0123456789 が存在します。 Private Sub テキスト0_BeforeUpdate(Cancel As Integer) Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("顧客マスタ", dbOpenDynaset) Dim str As String str = "0123456789" rs.Filter = "[telnum] = ' " & str & " ' " Set rs = rs.OpenRecordset MsgBox (rs!氏名) ’←エラーメッセージ”カレントレコードがありません。”が出ます End Sub

  • 【Access】 郵便番号を検索するシステム

    よろしくお願いいたします。 現在、Accessのフォームにて、任意の番号をテキストボックス("(1)")に入力し"検索ボタン"を押すと、該当する郵便番号がフォーム上のテキストボックス("(2)")に表示されるシステムを作っています。 また、郵便番号は"郵便番号一覧"というテーブルにまとめています。 (テーブルには約14万件の"郵便番号"と"住所"が含まれています) ここで質問があるのですが、同じ郵便番号であっても複数の住所が該当するケースがあります。 テーブルにもそうした件が多数含まれていますが、現在の私のVBAでは、その内のひとつの住所しか表示することが出来ません。 そこで、複数の住所が存在する場合は、該当する住所の一覧が表示され、その中から1件を選べるようなシステムを作りたく考えています。 様々な参考書を読み続けてきましたが、完全に行き詰まりました。お知恵を拝借頂けますと幸いです。 -------------------------------- 尚、現在のVBAは下記の通りです。 Private Sub 検索ボタン_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("郵便番号一覧", dbOpenTable) With rs .Index = "郵便番号" .Seek "=", Me.(1) End With If Not rs.NoMatch Then With Me .(2) = rs!住所 End With End If rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub

  • SQLSERVERからデータを取得する方法

    SQLSERVERに商品テーブルを作り ACCESSにローカルテーブル(下記の例では入力テーブル)を 作りました。 ACCESS VBAで ACCESSのローカルテーブルを1件ずつ読み SQLSERVERの商品テーブルを検索したいのですが 下記の例 どちらが処理スピードが速いのですか? なお下記以外にも処理スピードが速い方法が あったら教えてください。 ●例1 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) sql = "SELECT 商品名 FROM 商品テーブル " sql = sql & "where 商品ID = '" & rt![商品ID] & "'" Set rs = db.OpenRecordset(sql) If rs.RecordCount = 0 Then MsgBox "NG" Else MsgBox rs![商品名] End If ●例2 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) Set rs = db.OpenRecordset("商品テーブル", dbOpenDynaset) rs.FindFirst "商品CD = '" & rt![商品CD] & "'" If rs.NoMatch Then MsgBox "NG" Else MsgBox rs![商品名] End If よろしくお願いします。

  • accessの検索フォームについて(複数条件)

    access初心者です。 本などを参考に検索フォームを作成しました。 1つの条件で検索することは出来たのですが、複数の条件を入力するとうまく検索出来ません。 全ての条件を満たすデータの抽出を行いたいと思います。 「あ」「い」「う」というテキストボックスを用意しています。 Private Sub コマンド14_Click() If Not IsNull(Me.txt_あ) Then ' Me.Filter = "あ LIKE '*" & Me!txt_あ & "*'" End If If Not IsNull(Me.txt_い) Then ' Me.Filter = "い LIKE '*" & Me!txt_い & "*'" End If If Not IsNull(Me.txt_う) Then ' Me.Filter = "う LIKE '*" & Me!txt_う & "*'" End If Me.FilterOn = True End Sub よろしくお願いします。

  • Access VBA 削除

    またお世話になります。 Access2003を使用しています。 不要になったアカウントを削除できるようなものを作成したいのですがうまくいきません。 リストボックスに表示されたアカウントを選択し、 ボタンを押すとテーブルから削除できるというものを考えています。 テーブル名: tbl_ユーザー フィールド名: ユーザー名 パスワード アカウント フォーム名: frm_Account_Delete  リストボックス: UserList  コマンドボタン: Del いろいろ調べて自分なりに作ってみたのですがエラーが出てしまいました。 ―――以下VBAコード――― Dim db As Database Dim rs As DAO.Recordset Set db = CurrentDb() Set rs = db.OpenRecordset("tbl_ユーザー") If IsNull(UserList) Then MsgBox "削除するアカウントを選択してください" Else If MsgBox(UserList & "を削除しますか?", vbYesNo) = vbYes Then db.TableDefs.delete UserList     MsgBox "UserListを削除しました。" End If End If rs.Close db.Close Set db = Nothing ―――以上――― これだと”このコレクションには項目がありません”というエラーが出ます。 アドバイスをよろしくお願いします。

  • Accessでメッセージを表示しきれない。

    Accessでメッセージボックスを表示しています。 クエリのリストが、多いとメッセージを表示仕切れません。 改善策を探しています。 Access2000を使用 モジュールの記述は下記の内容です。 Public Function koukiMessage() Call kouki End Function Sub kouki() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("受注管理 完了工期-Check") Do Until rs.EOF varRet = "No." & rs!業務番号 & Chr(9) & Format(rs!業務完了, "gggee\年mm\月dd\日") & Chr(9) & "残工期 " & rs!残工期 & "日" & " :" & rs!業務名 StrMsg = StrMsg & vbNewLine & varRet rs.MoveNext Loop If varRet <> "" Then MsgBox "業務の完了工期が1ヶ月以内になりました。" & vbNewLine & StrMsg, 48, "完了工期の確認です。" Else: Close End If rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub

専門家に質問してみよう