Access 2013でVBAを使用したレコードの抽出方法とは?

このQ&Aのポイント
  • Access 2013でVBAを使って複数の抽出条件を組み合わせてレコードを抽出する方法について説明します。
  • テーブル1にはメーカー名、製品名、購入日、ステータスのフィールドがあります。フォーム1のテキストボックスに入力された値をAND条件で抽出するコードが正常に動作しています。
  • 4行目のステータスに条件Aかつ条件B、または条件Aかつ条件Cを組み合わせて抽出したい場合、strfilter変数に複数の条件式を追加することで実現できます。
回答を見る
  • ベストアンサー

複数の抽出条件 AかつB、またはAかつCについて

ACCESS 2013 でVBAを使ったレコードの抽出を行いたいと考えています。 複数の抽出条件 AかつBまたはAかつCについて、行き詰っています。 テーブル1に、 メーカー名、製品名、購入日、ステータスの4つのフィールドを作成しました。 A社 ボールペン 2014/01/01 1 B社 万年筆   2014/01/02 2   C社 マジック  2014/02/03 4 D社 ボールペン 2014/03/08 5 A社 万年筆   2014/05/01 4 フォーム1に、メーカー名txt、製品名txt、購入日txt、 ステータスtxtのテキストボックスがあります。 メーカー名、製品名、購入日、ステータスを、テキストボックスに値が入力されていれば 全てAND条件で抽出するコードは書きあがっていて 正常に動作しています。 コードは次のような感じに書きました。 strfilter = strfilter & " AND メーカー名 Like '*" & Me.メーカー名txt & "*'" strfilter = strfilter & " AND 製品名 Like '*" & Me.製品名txt & "*'" strfilter = strfilter & " AND 購入日 = Me.購入日txt" strfilter = strfilter & " AND ステータス = Me.ステータスtxt" Forms.フォーム1.Filter = Mid(strfilter, 6) Forms.F01301_item_Quick_List.FilterOn = True 4行目を1と3、2~4などのように抽出したいので 次のように試したところ  strfilter = strfilter & " AND ステータス = 1" OR "ステータス = 3" 現状、1行目から3行目に関係なく、4行目の条件に当てはまるものが 抽出されてしまいます。 おそらく、”1~3行目とステータス = 1” 又は ”ステータス = 3”の 条件に一致する全て、になっているんだろう、とは思ったのですが よくよく見ると、上3行と関係ないものが抽出されてしまっています。 1行目から3行目の条件Aかつ、4行目の条件B(例えば1か2)、 1行目から3行目の条件Aかつ、4行目の条件C(例えば1か4)など 条件A or 条件B、条件A or 条件Cで 抽出する方法について、ご教授願います。

  • jjj22
  • お礼率58% (17/29)

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

  • ベストアンサー
  • m3_maki
  • ベストアンサー率64% (295/459)
回答No.1

> strfilter = strfilter & " AND ステータス = 1" OR "ステータス = 3" を   strfilter = strfilter & " AND (ステータス = 1" OR "ステータス = 3)" にしてください。

jjj22
質問者

お礼

カッコとAND、ORの位置に苦戦していました。 教えて頂いた箇所の通りに書き換えて、上手く動作するようになりました。 ありがとうございました。

関連するQ&A

  • アクセスでのテキストボックスの複数条件での抽出

    Private Sub 検索_Click() Dim strFilter1 As String Dim strFilter2 As String Dim strFilter3 As String strFilter1 = "学校名 = '" & 学校名1 & "'" strFilter2 = "学校区分 = '" & 学校区分1 & "'" strFilter3 = "キャンパス = '" & キャンパス1 & "'" Me.Filter = strFilter1 & " or " & strFilter2 & " or " & strFilter3 Me.FilterOn = True End Sub (1)学校名・(2)学校区分・(3)キャンパスと3つのテキストボックスがあり 3つの抽出条件を満たすレコードをフォームに表示させたいのですが 学校名を仮に早稲田大学といれ絞れるのですが次に学校区分を大学 と入れるとほか大学も抽出されてしまいます。 学校名を抽出させたら、その範囲で学校区分の大学を抽出させたいのですが どのようにすればいいのでしょうか? (1)のみの抽出の場合や(1)と(2)のみの 場合があるのでandの完全一致ではありません。

  • 複数条件で抽出後結果をフォームに表示する方法

    フォーム上で「客先名」と「納入日」を指定して、その指定したものだけを表示したいと思い、下記のURL参考にさせていただき、自分で必要と思われる箇所を変更してみたのですが、「コンパイルエラー:プロシージャの外では無効です」とでて、うまくいきません。 私の知識不足でどこがどう悪いのかわからないので、どうかお助けください。 参考URL:http://hatenachips.blog34.fc2.com/blog-entry-129.html ※「納入日」はたとえば「2013/05/01~2013/05/20」というふうに範囲指定したいです。 ※作ったテキストボックス名は txt客先名、min年月日、max年月日 で、 抽出したいフィールド名は「客先名」と「納入日」です。 ↓URLを参考に自分なりに書き換えてみたコード Private Sub cmdFilter_Click() Dim strFilter As String, strExp As String, aryOpe As Variant If Not IsDate(Me.min年月日) Then MsgBox "日付ではありません。" Me.min年月日.SetFocus Exit Sub End If If Not IsDate(Me.max年月日) Then MsgBox "日付ではありません。" Me.max年月日.SetFocus Exit Sub End If If Not IsNull(Me.txt客先名) Then strFilter = strFilter & " AND 客先名 Like '*" & Me.txt客先名 & "*'" End If If Not IsNull(Me.min年月日) Then strFilter = strFilter & " AND 納入日 >= #" & Nz(Me.min年月日) & "#" End If If Not IsNull(Me.max年月日) Then strFilter = strFilter & " AND 納入日 <= #" & Nz(Me.max年月日) & "#" End If Me.Filter = Mid(strFilter, 3) If strFilter = "" Then Me.FilterOn = False Else Me.FilterOn = True End If End Sub Private Sub cmdFilterOff_Click() Me.Filter = "" Me.FilterOn = False Me.txt客先名 = Null Me.min年月日 = Null Me.max年月日 = Null End Sub 以上、よろしくおねがいします。

  • Accessフォームでの複数条件検索

    検索用テキストが4つとコンボボックスが1つあり、検索ボタンというコマンドボタンを押すと 該当するレコードを表示させるフォームを作りました。 以下がそのVBAです。 Private sub 検索ボタン_click() Dim strfilter As String, strexp As String, aryope As Variant If Not IsNull (me.一) Then strfilter = "And 出版社 Like '*" & Me.一 & "*'" End If If Not IsNull (me.コンボ62) Then strfilter = "And 種類 Like '*" & Me.コンボ62 & "*'" End If If Not IsNull (me.三) Then strfilter = "And 番号 Like '*" & Me.三 & "*'" End If If Not IsNull (me.四) Then strfilter = "And 発刊日 = # " & Format (me.四. "yyyy-mm-dd") & "#" End If If Not IsNull (me.一) Then strfilter = strfilter & " AND " & BuildCritera ( "タイトル", dbText, "*" Replace ( me.五, "", "*AND*") & "*") End If 改正したいことは   1. 検索用テキストボックスに入力された値全てを満たすレコードを表示したい(現在は例えば     出版社、タイトル、番号の3つを入力するとそれぞれの項目にヒットする物がすべて検出さ     れる)   2. テキストボックス[三]の番号は完全一致で抽出したい(26を抽出したいのに126や2673     等も抽出されてしまう)   3. テキストボックス[四]の発刊日は西暦表示から和暦で入力して検索したい     (テキストボックス[四]をコンボボックスに変え、西暦・和暦両方表示にし、[四A]を追加して     月日という名前にしてこれら年月日をくっつけて完全一致で検索する方法を考えましたが     記述がわかりません)   5.タイトルがWeb検索の様に複数曖昧検索ができない     中途半端な検索で抽出してる状態です。     どなたか手直しいただけますでしょうか? 

  • ファイルメーカーで複数条件データを抽出する方法

    filemaker で、複数条件のデータ抽出を行いたいのですがその方法が分かりません。 フィールドAとフィールドBにそれぞれaまたはb、cまたはdの値が入力される場合、aかつc、aかつd、bかつc、bかつdの件数を求めたいと 考えております。 =Exact(A;"a")and Exact(B;"c")のように入力してみましたがうまくいきませんでした。 知恵をお貸し頂ければ幸いです。 宜しくお願い致します。

  • Accessで複数条件抽出

    Accessで複数条件抽出をする方法を教えてください。 フォーム内に[A]、[B]のテキストボックスがあり、検索用のテキストボックス[C]を設けており、[C]入力した文字が[A]または[B]に入力されているデータと一致するものを抽出したいのですが、以下のようなコードではうまくいきません。 Me.Filter="A='" & Me![C] & "'" Or "B='" & Me![C] & "'" どのようにすればうまく抽出できるか教えてください。

  • 【Excel】複数の条件を設定した重複セルの抽出

    【Excel】複数の条件を設定した重複セルの抽出 例えば、A列にA社からD社のデータが行に複数個ずつ並び、B列にそのクライアントに問い合わせた日付が入力されている場合。 A社に問い合わせた日付は1/1、1/3、1/5。B社に問い合わせた日付が1/1、1/1、1/3、1/5、1/5となっているデータで、 B社の3~7行目の日付で重複している1/1と1/5の行のみを抽出する方法ってありますか? 作業自体はB社だけでなく、複数あるので、関数か何かで出来る方法があれば教えていただきたいです。

  • Access クエリ抽出条件の「Between」の記述で

    こんにちは。Access2000を使用しています。 「抽出条件」フォーム上のテキストボックス "txt開始コード"と"txt終了コード"の入力条件を 「抽出」選択クエリの抽出条件として Between [forms]![抽出条件][txt開始コード] And [forms]![抽出条件][txt終了コード] 記述しました。 抽出条件は「業務データ」テーブルの"業務コード" に対応しており、「業務コード」はテキスト型長さ4 で定義してありますが、「0000」~「9999」の数値 が格納されています。また、フォーム上のテキストボックスの書式は「0000」としています。 条件を何も入力しない時はデータを抽出しますが、条件 を指定すると何も抽出されなくなってしまいます。条件 の指定を、 Between '[forms]![抽出条件][txt開始コード]' And '[forms]![抽出条件][txt終了コード]' のようにシングルクォーテーションで囲んでもうまくいき ません。文字列なのに数値が入っているのでアクセス側で 自動認識しうまくいかないのか、検討がつきません。 どなたか解決策をお願いいたします。

  • 行抽出・関数・複数条件

    以下の質問をみて、一つの条件のものを作ることは出来ました。 しかし、AND()やCOUNTIFS()などを用いながら自分なりに複数条件の行抽出をしてみようとトライしてみたのですが、きちんとした行を返してくれません。 どなたか、以下の質問を少し変えて、 ************************************************************** <A列> <B列> <C列> 7/1 りんご 100円 7/2 ぶどう 200円 7/2 すいか 300円 7/3 みかん 100円 このような表があって、100円とりんごを含む行をそのままの形で、 別のセル(同じシート内)に抜き出したいのですが。 7/1 りんご 100円 ************************************************************** といった表示をする関数を書いていただけないでしょうか。 よろしくお願いします。 http://okwave.jp/qa/q3200952.html

  • 複数条件でのデータ抽出について

    こんにちは。エクセルのVBAを勉強中ですが、 どうしてもわからないので助言をお願いします。 品名 規格 詳細 適合 1   A   B   ○ 2   A   B  3   A   C   ○ このような文字列があり、 複数条件を指定して、たとえば「Aと○」を両方含む行を抽出し 別のシートへコピーしたいと思っています。 AdvancedFilterを使おうと思っていますが、 どうも使い方がよくわかりません。 よろしくお願いします。

  • 複数条件でのレコード抽出について

    いつも大変お世話になっています。 複数条件でのレコード抽出で教えていただけますでしょうか? 下記のようなサンプルコードを見つけ、実際に抽出できることを確認しました。 ただ、テーブル名:学生名簿の 身長と体重のデータ型が数値型である必要が あるようで、他の型では Set rs = CurrentDb.OpenRecordset(SQL) でエラー となってしまいます。テキスト型の入力でエラーが出ないように記述するには どうしたらよいのでしょうか? Access2010、Win7を使用しています。 サンプルコードは身長と体重を入力し、条件にあった内容をテキスト1に出力する コードです。 ーーサンプルコードーー Option Compare Database Private Sub コマンド8_Click() Dim SQL As String Dim rs As Recordset If IsNull(Me!テキスト2) Then MsgBox "抽出する身長を入力してください。" Me!テキスト2.SetFocus Exit Sub End If If IsNull(Me!テキスト3) Then MsgBox "抽出する体重を入力してください。" Me!テキスト3.SetFocus Exit Sub End If Me!テキスト1 = Null SQL = "SELECT 学生ID,身長,体重 FROM 学生名簿 WHERE 体重>=" & Me!テキスト3 & " AND 身長>=" & Me!テキスト2 Set rs = CurrentDb.OpenRecordset(SQL) Do Until rs.EOF Me!テキスト1 = Me!テキスト1 & rs![学生ID] & ": " & rs![身長] & " " & rs![体重] & vbCrLf rs.MoveNext Loop Set rs = Nothing End Sub