• ベストアンサー

データシート(サブフォーム)の複数条件抽出について。

データシート(サブフォーム)の複数条件抽出について。 現在メインフォーム上に、オートフォーム:データシート(基となるテーブル(マスターA)選択) をサブフォームとして置き、メインフォーム上にコンボボックス2個(コンボ1、コンボ2)&コマンドボタン1個設置してあります。 基テーブル(マスターA)には 種類    サイズ    商品名 の3フィールドがあります。 やりたい事は、コンボ1(対応フィールド:種類)及びコンボ2(対応フィールド:サイズ)で選択し コマンドボタンを押下で、サブフォーム内データの抽出です。 まだACCESSを始めたばかりの未熟者のため、ネットや本で調べながらやっているのですが どうしても上記がわからなくて完全に進行ストップしてしまったので ご教授願いたいと思い質問させて頂きました。 Filterをかけ、条件はANDで繋げば良いとは思うのですが どのようにコードを組み上げれば良いのか調べつかないため 何卒ご教授の程宜しくお願い致します。 また、質問させて頂いている間も引き続き自分で調べながら やっていこうと思います。

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

  • ベストアンサー
  • sykt1217
  • ベストアンサー率34% (277/798)
回答No.2

>私の環境は、ACCESS2000、DAO利用、そして今回はクエリを使用してもしなくても・・・ >というよりも、どのように組み上げたらいいのかわからなかったので・・・すみません。 方法は問わない、というより、ちょうど#1で示した例が殆ど使えますね^^ Accessは組み立て方やDB接続方法なども多種多様に存在しますので、その分覚える事が多いのは確かですね。 ただその方法一つでレスポンスに大きく関わってくる場合があるので、ある程度一人で組み立てられるようになると、次の課題は「レスポンス」になってくると思います。 >If rs.RecordCount <> 0 Then >   'レコードがあった際の処理 >こちらには、サブフォームへ表示させるコードを入れれば良いのですよね? その通りです。 >その際、サブフォームへ表示させるのはどのようにしたらいいのですか? 現状、どこまで組みあがってますか? 初期表示でサブフォームに表示、などの処理はまだ未実装でしょうか? 一応一から説明しておきますと、 ・データシートと連結させる用のワークテーブルを作成  ・フィールドは「種類」・「サイズ」・「商品名」 ・サブフォーム(データシート)とワークテーブルを連結させる  ・デザインビューでメインフォームを開き、サブフォームを右クリック→プロパティ  ・ソースオブジェクトに先ほど作ったワークテーブルを指定 ここまでが環境条件になります。 次にソース側ですが、 Set rs = qd.OpenRecordset でクエリで抽出したデータをrsにセットしたので、その抽出したデータを今度はワークシートに登録(Insert)してやる必要があります。 ですので、 Private Sub コマンドボタン_Click() Dim dbLocal As Database Dim rs As DAO.Recordset Dim rs2 As DAO.Recordset Dim qd As DAO.QueryDef Set dbLocal = CurrentDb Set qd = dbLocal.QueryDefs("クエリ_マスターA") qd![検索種類] = Me.コンボ1 qd![検索サイズ] = Me.コンボ2 Set rs = qd.OpenRecordset If rs.RecordCount <> 0 Then rs.MoveLast '一度抽出したデータの最終行に移動 rs.MoveFirst '最初の行に移動     DoCmd.RunSQL "delete * from ワークテーブル"  'ワークテーブルのデータを一度削除 Set rs2 = dbLocal.OpenRecordset("ワークテーブル") 'ワークテーブルを開く With rs2 Do While Not rs.EOF '抽出したデータの最終行までループ .AddNew 'ワークテーブルへの書き込み rs2!種類 = rs!種類 '抽出した「種類」をワークテーブルのフィールド「種類」へ rs2!サイズ = rs!サイズ '抽出した「サイズ」をワークテーブルのフィールド「サイズ」へ rs2!商品名 = rs!商品名 '抽出した「商品名」をワークテーブルのフィールド「商品名」へ .Update 'コミットのようなもの rs.MoveNext '抽出したデータの次の行へ Loop End With Else 'レコードがなかった場合の処理 End If End Sub こんな感じでワークテーブルに登録してやります。 サブフォームのソースオブジェクトにテーブル名をいれることで、そのサブフォームは書かれたテーブルと連結状態になります。 簡単にいうと 連結状態になる=テーブルのデータがその件数分だけ表示される ということですので、その連結させたテーブルにデータを入れてやれば、画面にも表示される、という仕組みです。 なんかふとクエリで抽出しないと動的に変わらなかった気もしますが・・・一応上記で試してみてください。

taho1999
質問者

お礼

sykt1217さん誠にありがとうございます。 とても丁寧且つ細かい説明頂き、理解しやすかったです。 今回のご提示頂いた方法は、今後私にとってはとても利用頻度が高くなると 思います。抽出したものを表示というものが多いので・・・。 まだ完全に理解しているわけではありませんが、 これからも勉強していきたいと思います。 まずは、自分で組めるようになるまで。 その先のレスポンスは、先の事過ぎるので、とりあえず考えないようにします。 誠にありがとうございました。 1歩進む事ができました。

その他の回答 (1)

  • sykt1217
  • ベストアンサー率34% (277/798)
回答No.1

ちょっと環境がわからないので、一部の例を記します。 質問する際はAccessのいくつか、DAOを用いているのか、ADOを用いているのか、Accessクエリは使用するか否かなどを書いてもらえると回答しやすくなります。 一部例:DAO・Accessクエリを使用した場合 (1)Accessクエリ「クエリ_マスターA」を作成(名前はテキトーです) (1)-1 「クエリ_マスターA」のフィールドに「種類」「サイズ」「商品名」をセット (1)*2 フィールド「種類」の抽出条件に「[検索種類]」をセット(抽出条件名はテキトーです) (1)-3 フィールド「サイズ」の抽出条件に「[検索サイズ]」をセット(抽出条件名はテキトーです) (2)コマンドボタンの「クリック時」のイベントを作る(Private Sub コマンドボタン_Click()) (2)-1 イベント内で以下を記入 Private Sub コマンドボタン_Click()  Dim dbLocal As Database  Dim rs As DAO.Recordset  Dim qd As DAO.QueryDef  Set dbLocal = CurrentDb  Set qd = dbLocal.QueryDefs("クエリ_マスターA")  qd![検索種類] = Me.コンボ1  qd![検索サイズ] = Me.コンボ2  Set rs = qd.OpenRecordset  If rs.RecordCount <> 0 Then    'レコードがあった際の処理  Else    'レコードがなかった場合の処理  End If End Sub たぶんこれで出来ると思います。 DAOを用いる場合は、エディタの「ツール→参照設定」に「Microsoft DAO x.x Object Library」があることを確認して下さいね。(ない場合はリストから探してチェックを入れて下さい。)   

taho1999
質問者

補足

sykt1217さんありがとうございます。 そして大変失礼致しました。 私の環境は、ACCESS2000、DAO利用、そして今回はクエリを使用してもしなくても・・・ というよりも、どのように組み上げたらいいのかわからなかったので・・・すみません。 1点確認があるのですが If rs.RecordCount <> 0 Then    'レコードがあった際の処理 こちらには、サブフォームへ表示させるコードを入れれば良いのですよね? その際、サブフォームへ表示させるのはどのようにしたらいいのですか? 大変お手数をお掛けしますが、引き続きお付き合い頂けれ有難いです。 あまりに未熟で申し訳ございません。

関連するQ&A

  • データシート(サブフォーム)の複数条件抽出について。

    データシート(サブフォーム)の複数条件抽出について。 データシート(サブフォーム)の複数条件抽出について。 環境:ACCESS2000 DAO利用  現在メインフォーム上に、オートフォーム:データシート(基となるテーブル(マスターA)選択) をサブフォームとして置き、メインフォーム上にコンボボックス2個(コンボ1、コンボ2)&コマンドボタン1個設置してあります。 基テーブル(マスターA)には 種類    サイズ    商品名 の3フィールドがあります。 やりたい事は、コンボ1(対応フィールド:種類)及びコンボ2(対応フィールド:サイズ)で選択し コマンドボタンを押下で、サブフォーム内データの抽出です。 上記をクエリ使用でも、vba利用でもどちらでも大丈夫です。 先日この質問板で丁寧に教えて頂いたのですが、 回答して下さった方もおっしゃってたのですが、 動的に動かないとの事で、やっているうちにやはり 動的でないと難があるようなので 再度ご質問させて頂きました。 何卒ご教授の程宜しくお願い致します。 先日の質問板は下記です。 http://okwave.jp/qa/q5845718.html また、質問させて頂いている間も引き続き自分で調べながら やっていこうと思います。

  • Access2007 サブフォームでフィルタリングする方法

    お世話になっております。 フォーム上に関連性のないサブフォームがあります。 フォームのコンボボックスでデータを選び検索ボタンをクリックすると、サブフォームのフィールドがコンボボックスのデータで抽出できるようにしたいと思います。 このように書いてみましたが、検索ボタンをクリックするとサブフォームの全てのデータが消えてしまい、実現できませんでした。 Me.FilterOn = True Me.Filter = "(Forms!フォーム!サブフォーム1!コンボ Like '*" & Me.フィールド & "*')" サブフォームでフィルタリングできる方法を教えていただければ幸いです。 よろしくお願いいたします。

  • コンボボックスからのデータ抽出

    Access2000です。 hozon - テーブル コンボボックス-nenn(2003,2004) コンボボックス-tsuki(1月から12月) コンボボックス-hi(1日~31日) コマンドボタン-抽出ボタン があり、各コンボボックスで抽出したい年月日を選択してコマンド抽出ボタンをクリックして その下にサブフォームにてテーブルから抽出したデータを表示したいのですが、どのようなコードになるのか教えてくださいませんか? データは月別の場合と日にちべつの場合とできればうれしいのですが、、 初心者なのでよろしくお願いします。

  • サブフォームをリクエリしたい

    メインフォームのコマンドボタンを押下するとvbaを使ってテーブルのデータを更新します。 メインフォームの中にはサブフォームがあり、 そのサブフォームとテーブルがリンクしています。 サブフォームにはテーブルのデータが表示されており、 メインフォームのコマンドボタン押下→テーブルデータ更新 がされると、全て#Deletedという文字が表示されます。 なので、 Private Sub cmd_データ更新_Click() Call データ更新 Me.Controls("Fサブ").Form.Requery End Sub としたのですが、 「実行時エラー’2465’:指定した式で参照されている’Fサブ’フィールドが見つかりません。」 が発生します。 Me.Controls("Fサブ").Requery これにしても同じでした。

  • コンボボックスでのサブフォーム抽出について

    コンボボックスでのサブフォーム抽出について教えて下さい。 T_支払というテーブルにてSUBフォームを作り、メインフォームに貼り付けてます。 コンボボックスにて月度を選択すると、その月の一覧がSUBフォームに表示する様にしたい のですが、今一わかりません。 途中までフォームの形はできたのですが、そこから止まってしまっています。 この先何をすればよいのか教えていただけないでしょうか? ほぼ初心者なものでよろしくお願いします

  • ACCESSサブフォームにデータ反映されない

    よろしくお願いします。 Access2010を使っています。 メインフォームにあるテキストボックス2つに条件を入力し、 抽出したデータをサブフォームで表示させたいと思います。 ●メインフォーム名「フォーム1」 テキストボックス2つ「tex1」「tex2」 ●データ元クエリ「q1」 フィールド名「ID1」「ID2」「Name」 ●サブフォームSQL SELECT q1.Name FROM q1 WHERE (((q1.ID1) = Forms![フォーム1]!tex1) And ((q1.ID2) = Forms![フォーム1]!tex2))); フォームを開き、tex1とtex2に入力してもサブフォーム表示が変わりません。 サブフォームをデータシートで別に開くと、データ抽出できていることは確認できました。 サブフォームのコントロールソースへSQLを入力するだけでは、 メインフォーム内でのデータは反映されないんでしょうか??

  • ACCESS 帳票フォームとデータシートをトグルボタンで切り替え

    フォーム上でサブフォームの帳票フォームとデータシートをトグルボタンかコマンドボタンで切り替えることはできないでしょうか? 現在、抽出したデータをサブフォーム(帳票フォーム)に表示させており、そのデータにある金額の合計を表示させています。 帳票フォームは見やすいのですが、データシートですと抽出したデータの一部をコピーしEXCELで使用したりできます。見やすさを諦めてデータシートに変更すると抽出したデータの合計が計算できません。 できれば、帳票フォームとデータシートどちらも使用したいのですが、いちいちデザインからサブフォームのプロパティで規定のビューから変更するのが面倒です。 上記にありますようにトグルボタンかコマンドボタンで切り替えることができれば便利なのですが・・・。 良い方法がありましたらお知恵を貸して下さい

  • ACCESSのサブフォーム教えてください☆

    お世話になっております。 メインフォームではなくサブフォームの抽出方法で、コンボボックスでサブフォームのフィールド(例えば、商品名)を選択後、テキストボックスで文字列(例えば、ソフトクリーム)を指定して検索する方法です。メインフォームでのやり方は調べて(VBA)分かったのですがサブフォームは試行錯誤してやってみたのですがうまくいきません。 すみませんが、宜しくお願いします。

  • サブフォームをリクエリするには?

    アクセスのフォームにはサブフォームがあり、 親フォームの上にあるコマンドボタンで、テーブルに対してアクションクエリでレコードの削除やレコードの更新を行います。 サブフォームにはそのテーブルをソースとしたデータを表示させているのですが、 親フォームの上にあるコマンドボタンのイベントの最後に、 Me.Controls("サブフォーム").Requery を入れても、フォームのデータが#Deletedになります。 Me.Requery でも、サブフォームのデータは#Deletedになってしまいます。 フォームを開きなおしたり、並べ替えをすればデータが表示されますが コマンドボタン押下後にイベントを実行し終わったら、サブフォームのデータも更新されたデータを表示するさせるには どうすればいいでしょうか?

  • access2007 サブフォームのエクスポート

    担当営業・売上月度別のデータを抽出用フォームを作成しました。 メインフォームでは担当を選択するためのコンボボックスと 売上月度を選択するためのコンボボックスを配置しています。 サブフォームはメインフォームで選択された条件の明細が 表示される設定となっています。 このサブフォームに表示された内容をエクセルにエクスポート させたいのですが、メインフォームにボタンを配置しても メインフォームの担当と売上月度の日付のみが エクスポートされるだけでサブフォームの内容がなに一つ エクスポートされません。 担当・。売上月度で抽出されたサブフォームの内容を エクスポートするにはどうすれば良いでしょうか? ご指導の程、宜しくお願い致します。