• 締切済み

(続き)accessでの2段階クエリの作り方

お世話になります。 accessで下記の質問を立てましたが、解決できなかったので再度質問いたします。 (http://okwave.jp/qa/q6890851.html) 下記に説明をしています、分かりにくいかもしれません。。 どうぞご指導をお願い致します。 ◆DBの構成◆ 1)テーブル名:名簿(フィールドは下記の通り)  ID,名前1、名前2(担当者名)、ふりがな、住所、電話、住所1、住所2(マンション名等)、備考等) 2)フォーム名:検索フォーム  デザインビューで初めから作成して、テキストボックスを1つ作っています。  名前は『キーワード検索ボックス1』です。  またテキストボックスの下に検索をしてヒットした名簿を表示するサブフォームを入れています。 3)サブフォームのクエリ ・元データ   ⇒名簿のテーブル。全フィールドを挿入して作成。     メインフォーム内のサブフォーム名は『(sub)キーワード検索』  ・抽出条件   ⇒フィールドの『名前1』、『名前2』、『ふりがな』、『住所1』、『住所2』、『備考』の抽出条件欄に    1行ごとずらして、『Like & "*" & [Forms]![検索フォーム]![キーワード検索ボックス1] & "*"    とした。  ・マクロ   ⇒メインフォームのテキストボックスの隣に検索という名前をつけたボタンを配置。    マクロは再クエリでコントロール名を『(sub)キーワード検索』とした。    ボタンのプロパティのイベントタブでクリック時に上記のマクロが実行されるように登録した。 ◆やりたい事◆  accessで会社の顧客名簿を作成しました。  今の状態は1個のキーワードだと検索結果がサブフォームに表示されます。  それを、2段階で絞りこんでいく方法を探しています。  テキストボックスをもう一個作り、2個のキーワードで絞りこみたいです。   まず、1個のキーワードで『名前1』、『名前2』、『ふりがな』、『住所1』、『住所2』、『備考』のフィールドを検索してヒットしたものをサブフォームで表示させる。さらにそこから、また任意のキーワードを 『キーワード検索ボックス2』に入力してボタンをクリックすると、同じサブフォーム(または別のフォームに)絞りこみ検索結果が表示されるようにしたい。またVBAは苦手なので、クエリで解決をしたいです。   ◆出来たこと、出来なかった事◆ ・質問NO(6890851)で指導を頂いた、chuparkさんのある一つのフィールドに 『Like "*" & [Forms]![検索フォーム]![名前検索1] & "*" And Like "*" & [Forms]![検索フォーム]![名前検索2] & "*"』と入れると、そのフィールドに対しては2個のキーワードがヒットするとサブフォームに表示される事が出来た。 ⇒これだと1つのフィールドに対してなので、やりたい事ではない。  1つのフィールドだけでなく、検索したいフィールド全てに対してまず1個のキーワードで  検索されたものを表示させ、そこから更にキーワードを検索して表示させたい。   ・クエリに新しいフィールドを作りました。そこは全てのフィールドを『&』で結び、 抽出条件にchuparkさんの条件を入れてました。 ⇒これだと一度に2個のキーワードを検索してしまう。1回目と2回目を比較もしたいので、一度ではなく、段階を踏んで検索が出来ない。また、フォーム自体を開いた時にサブフォームが真っ白になり メッセージも出て見辛い。。(どんなメッセージが忘れました…)                                                        以上

みんなの回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

No1、No2です。質問で 3)サブフォームのクエリ ・元データ   ⇒名簿のテーブル。全フィールドを挿入して作成。     メインフォーム内のサブフォーム名は『(sub)キーワード検索』  ・抽出条件   ⇒フィールドの『名前1』、『名前2』、『ふりがな』、『住所1』、『住所2』、『備考』の抽出条件欄に    1行ごとずらして、『Like & "*" & [Forms]![検索フォーム]![キーワード検索ボックス1] & "*"    とした。 ということなので、No1の(1)は同じ事なのでそのままクエリを使ってください。

  • ksd_hiro
  • ベストアンサー率76% (29/38)
回答No.3

>◆やりたい事◆ > accessで会社の顧客名簿を作成しました。 > 今の状態は1個のキーワードだと検索結果がサブフォームに表示されます。 > それを、2段階で絞りこんでいく方法を探しています。 > テキストボックスをもう一個作り、2個のキーワードで絞りこみたいです。  > まず、1個のキーワードで『名前1』、『名前2』、『ふりがな』、『住所1』、『住所2』、『備 >考』のフィールドを検索してヒットしたものをサブフォームで表示させる。さらにそこから、 >また任意のキーワードを >『キーワード検索ボックス2』に入力してボタンをクリックすると、同じサブフォーム(また >は別のフォームに)絞りこみ検索結果が表示されるようにしたい。 ご希望の事は、クエリを2重にして作成すればVBAを使わなくても、クエリと再クエリのマクロだけで可能です。 サブフォームのレコードソースのクエリ名が記載されていないので、仮に「Q_検索」としておきます。 この「Q_検索」のコピーを作成し名前を「Q_検索2」に変更し、デザインビューで、以下を修正変更して保存します。 1.テーブルの表示から、「Q_検索」を追加し、デザインビュー下側のデザイングリッドのテーブルの名称を全て、「名簿」から「Q検索」に変更します。 2.デザイングリッドの抽出条件の、 Like "*" & [Forms]![検索フォーム]![キーワード検索ボックス1] & "*" の[キーワード検索ボックス1]の部分を全て[キーワード検索ボックス2]に変更します。 3.デザインビュー上側のフィールドリストエリアから、「名簿」テーブルを削除します。 次に、サブフォームをデザインビューで開き、レコードソースを「Q_検索」から[Q_検索2]に変更して保存します。 以上で目的の抽出が可能だと思います。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

もうついでだから、少し便利に? ボタンを二つ追加します。 名前         標題 cmdすべて表示    すべて表示 cmd検索開始     検索開始 上記を設定したら、フォームの コード表に以下を貼り付け保存してください。 「クエリ名」はサブフォームのレコードソース になるクエリです。実際に合わせて変更してください。 Private Sub cmdすべて表示_Click() Me.埋め込み0.Form.RecordSource = "名簿" Me.埋め込み0.Form.Requery End Sub Private Sub cmd検索開始_Click() Me.埋め込み0.Form.RecordSource = "クエリ名" Me.埋め込み0.Form.Requery End Sub 使い方は、「すべて表示」をクリックすると サブフォームのレコードソースが「名簿」に置き換わり、 サブフォームに全データが表示されます。 「検索開始」をクリックするとサブフォームの レコードソースがクエリに置き換わり、検索 できるようになります。 必要なら設定してみてください。 なお、サブフォームのレコードソースは 初期値はクエリのままでいいです。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

いろいろ考えてみましたが、やはりVBAを使わないと 簡単にはいきそうもありません。VBAといっても それほど大変なことではないので一応方法を あげておきます。 (1) クエリの抽出条件に   Nz([Forms]![検索フォーム]![キーワード検索ボックス1]) を入れていきます。そのとき上記を フィールド|名前1  |名前2 |ふりがな  テーブル |     |    | 並び替え |     |    | 表示   |     |    | 抽出条件 |入れる |    | または  |     |入れる |       |     |     |入れる のように重ならないようにいれていってください。 クエリのSQL文ではOrでつながっていきます。 (2) フォームにボタンを三つ設定します。 それぞれプロパティで、名前、標題を 名前         標題 cmd抽出1       抽出1 cmd抽出2       抽出2 cmdフィルタ解除   フィルタ解除 のように設定してください。 (3) 以下をメインフォームのコード表に貼り付け 保存してください。 なお、以下のコード中で 「埋め込み0」 とありますが、これはサブフォームを表示しているコントロール名で サブフォームそのものの名前ではありません。初期値は「埋め込み0」 のような名前で登録されます。 Private Sub cmd抽出1_Click() Me.埋め込み0.Form.Requery End Sub Private Sub cmd抽出2_Click() Dim str As String Dim strFilter As String str = Me!キーワード検索ボックス2 strFilter = " 名前1 Like '*" & str & "*' Or 名前2 Like '*" & str & "*' Or ふりがな Like '*" & str & "*' Or 住所1 Like '*" & str & "*' Or 住所2 Like '*" & str & "*' Or 備考 Like '*" & str & "*'" Me.埋め込み0.Form.Filter = strFilter Me.埋め込み0.Form.FilterOn = True End Sub Private Sub cmdフィルタ解除_Click() Me.埋め込み0.Form.FilterOn = False End Sub (4) 使い方は、 テキストボックスにデータを入れ、ボタンをクリックしていきます。 抽出2まで済むと、フィルタ解除のボタンをクリックすると、 抽出1のデータが表示されます。抽出2のボタンをクリックすると 再び抽出2のデータが表示されます。 わからないところがあれば補足してください。

関連するQ&A

  • Access 2段階のクエリの作り方

    お世話になります。 Access2000での標記について質問です。 会社で顧客名簿を改良しています。 『名簿一覧』というメインテーブルがあり、名前、住所、電話、住所等のフィールドがあります。 検索が簡単に出来るように任意のフォームにテキストボックスを1個作成して、 そのボックスにキーワードを入力すると名前、ふりがな等のほぼ全てのフィールドで あいまい検索されるクエリを作成しています。 そして、その結果はテキストボックスの下にサブフォームで検索結果が表示されます。 上記のキーワード検索した後、更に検索をかけるにはどうすればいいのでしょうか。 検索はまたキーワードでの検索をしたいです。 またVBAの知識がないので、クエリで解決したいです。 よろしくお願いします!!

  • アクセス2000でクエリを組んだのですが。。。

    こんにちわ。アクセス初心者です。まず順に追って説明します。 (1)15000件ある顧客名簿と1500件ある担当会社のテーブルをリレーションで結び、クエリを組みました。「Q_顧客名簿」と名づけました。その時点で15000件データが存在します。 (2)フォーム「Q_顧客名簿」を元にフォームを作成しました。そして氏名の曖昧検索をしたいのでまずフォームのテキストボックスに「氏名検索」と名づけて、クエリの画面に戻り「Q_顧客名簿」を元に新たなクエリを組み、「氏名」のフィールドの抽出方法に以下のような文を入れました。 『Like "*" & [forms]![集合フォーム_1]![氏名検索] & "*"』 このクエリを「Q_氏名検索」と名づけました。 (3)フォームの左端をに「Q_氏名検索」が生きるよう設定をし、「氏名検索」のテキストボックスに「再クエリ」を組んだのですが、顧客データ数が15000あるはずなのが11000まで減ってしまいました。 おそらく検索式に何かが足りないのだと思うのですが、SQLやVBAがわからないのでどうすればいいかわかりません。 アクセスの詳しい方、教えていただけませんでしょうか?よろしくお願いいたします。

  • Access2007でサブフォームを再クエリする

    ==環境== OS:Windows XP Professional Ver.2002 Service Pack 3 Access 2007 マクロを使って下記の操作をしようとしています。 以前Access2000を使っていて使用できたマクロが、Access2007では動かなくなってしまいました。 このマクロをどう修正したらいいのかわかりません。 [1]フォームAに作られた一覧表(テキストボックスを使って表示している) ----------------------------------- 品名------金額a-----金額b-----合計 製品1----5000-------6000@------11000 製品2----4000-------3000-------7000 ----------------------------------- [2]そのうち明細が見たい箇所のテキストボックスをクリック  ※この場合、製品1の金額bの明細を表示させたいので   `@マークが付いているテキストボックスをクリックしています。 [3]サブフォームを持つフォームBが開く [4]フォームBの検索条件 テキストボックスの『品名検索欄』に「製品1」を入力 オプショングループの『金額区分』の「b」がON [5]フォームBを再クエリ  ※フォーム上には再クエリボタンが設置されています。   サブフォームは「sub_form」という名前で配置されています。 ==2000でのマクロ== [3]から[5]について、以下のように作成しています。 (1)フォームを開く ・フォーム名:フォームB (2)値の代入 ・アイテム:[Forms]![フォームB]![品名検索欄] ・式:[Forms]![フォームA]![品名] (3)値の代入 ・アイテム:[Forms]![フォームB]![金額区分] ・式:2 (4)キー送信 ・キー操作:+{F9} ・待機:いいえ ==2007での状況== 2000で作成したマクロをそのまま使うと(4)が動かないようです。 フォームB上では品名と金額区分が入力されており、 サブフォームに表示されるはずのデータは空です。 フォームB上の「再クエリ」ボタンを押すとデータが表示されました。 試しに(4)キー送信を再クエリ(コントロール名:sub_form)に変えたところ 「カレントレコードには'sub_form'という名前のフィールドはありません。」 と表示されてしまいました。 このマクロをどう直したらいいでしょうか。 皆さん、よろしくお願いいたします。

  • Access 再クエリについて

    メインフォーム(単票)に合計を表示したサブフォームと、その合計の元になり入力可能なサブフォームを作成しました。 この入力可能なサブフォームにデータを入力した場合、合計のサブフォームの表示を更新したいのですが、 入力可能なサブフォームに更新後処理で再クエリを指定したのですが、名前が正しくないとエラーが表示されます。 サブフォームに再クエリの指定はどのようにするのでしょうか? 名前:(入力可能なフォーム) ■F調査データ(売上構成)のサブフォーム 名前:合計サブフォーム ■売上構成比 店舗別合計のサブフォーム 更新したいフィールド名 売上構成の合計

  • アクセス2007にて複数フィールドに対してのあいまい検索のやり方がわかりません

    アクセス2007を使用しています。 初心者ですので説明がわかりずらいかもしれませんが、都度補足していきますのでよろしくお願いいたします。 現在、顧客を管理するためのデータベースを作成しています。 新規顧客のデータを入力する→【F新規入力】フォーム 既存の顧客のデータを名前、もしくは住所から検索する→【F検索】フォーム を作成しました。 【F新規入力】フォームから入力されたデータは【T顧客データ】に格納されます。 【F新規入力】には『名前1』『名前2』『住所1』『住所2』『住所3』『住所4』というフィールドがあります。 『名前1』は必須入力で『名前2』は空欄でもOKとします。 住所に関しては都道府県名~地番までを『住所1』~『住所4』に分けて入力します。 【F検索】にはテキストボックス『名前検索』と『住所検索』があります。検索ボタンとサブフォームもあります。 検索キーワードを入力して検索ボタンを押すとサブフォーム内に検索キーワードを含むデータが表示されるようにしたいのです。 間違っているのかも知れませんが、【Q検索クエリ】を作成し、抽出条件を【F検索】の『名前検索』『住所検索』に入力されたキーワードであいまい検索、【Q検索クエリ】を元にサブフォームを作成すればできると思っているのですが、検索条件をあてはめるフィールドが多くて、どのように条件を設定すればいいのかわかりません。 たとえば 『名前検索』キーワード……山 『住所検索』キーワード……中町 と入力し、検索ボタンをおすと『名前1』『名前2』のいずれかに"山"を含み、かつ『住所1』~『住所4』のいずれかに"中町"を含むデータが表示される たとえば 『名前検索』キーワード……木 『住所検索』キーワード……空欄 と入力し、検索ボタンをおすと『名前1』『名前2』のいずれかに"木"を含むデータが表示される ようにするのが目標なのですが、どなたかお知恵を貸してください。。。

  • Accessのクエリ

    初めまして。Accessのクエリについての質問です。 Access2003を使っています。 検索フォームを作り、その検索フォームにテキストボックスを2つ作り、そのテキストボックスに検索したい言葉を入力し、コマンドボタンで作った検索ボタンを押すとマクロでフィルタの実行がされデータを抽出できるというものを作りました。フィルタには選択クエリを使用しています。抽出したい2つのフィールドの抽出条件にあいまい条件のLike "*" & [Forms]![フォーム名]![テキストボックス名] & "*"を入れています。 今はテキストボックスが2つですが、もっと増やしていろんな条件で検索出来るようにしたいので、3つ目のテキストボックスを作り、抽出条件も同じように入れました。ですが、そうすると今までちゃんとできていた最初の2つのテキストボックスによる抽出が違った結果となりでてきました。このとき、新しく作った3つ目のテキストボックスは空欄なので最初と同じ結果が出ると思ったのですが、これは抽出条件が3つはできないということでしょうか?どなたか教えてください。

  • ACCESS2003でクエリを使った検索フォームを作っています。

    ACCESS2003でクエリを使った検索フォームを作っています。 クエリは以下の様になっています。 ----------  番号   タイプ   品名  1111   AA     商品1  2222   AA     しょうひん2  3333   BB     商品しょうひん3 ---------- 品名のフィールドの抽出条件に ---------- Like "*" & [Forms]![品名検索フォーム]![品名検索] & "*" ---------- と入れています。 品名検索フォームは帳票タイプで、フォームヘッダーにテキストボックスを設け 「品名検索」と名前をつけています。 テキストボックスに【商品】と入力すれば番号1111と3333が、【しょうひん】と入力すれば 番号2222と3333が抽出されるように設定し、ここはうまく動きました。 ただ、このフォームを開いた際、テキストボックスは空欄になっているため、全レコードが 表示されてしまいます。テキストボックスが空欄の際は、何も表示したくないのですが どこを触ればいいのでしょうか? どうかよろしくお願いいたします。

  • アクセスのクエリの”ここ”を理解したい。(IDの自動入力について)

    アクセスでクエリだけをつかって(VBAをつかわず)簡易システムを作りたいのですが、下記のことについて教えてください。理解した上で”確信”を持ちたいのです。下図のわかりにくい質問図で申し訳ありません。 ************************************************* (クエリデザインビュー)        『備考入力クエリ』 《テーブル名:備考》.............《テーブル名:名簿》   ....... ID ...... ←----..........ID    備考1           氏名    備考2           住所 ************************************************* フィールド: ID   氏名   住所   備考1   備考2 テー ブル:名簿  名簿   名簿   備考    備考 ************************************************* とクエリを作成したときに、クエリ上で、「備考1」「備考2」に入力すると、結果的にテーブルの「備考」のIDにはクエリの連結したもの(テーブル:名簿のID)が自動入力される。このような理解にたった前提で簡易システムを構築しても間違いないでしょうか?私が試した限りではそうなるのですが、何故できたのか偶然の発見で、確信がないのです。それでこの考え方の正誤について教えてください。ここでつまづくとすべてが狂ってしまいそうで・・・。よろしくお願いいたします。

  • (access )任意の数字以上でクエリ抽出したい

    フォーム上にテキストボックスと、サブフォームのクエリを配置しております テキストボックス(textbox1)に数字を入力し、その数字以上のフィールドを抽出したいのですが、上手く行きません 現在クエリの抽出条件に以下の式を入力していますが、レコードが一切表示されません。 (抽出はできますが) >=([Forms]![フォーム名]![textbox1]) どなたかご教授お願い致します

  • Accessで「キーワード検索」をしたい

    前任者が作ったデータベースを触っています。 私自身はAccessの基本操作がわかるくらいでVBAとかはよくわかりません。 今回その修正がしたいと思っています。 検索用フォームがあり、現在3つのコンボボックスがあってそれを選択して 「検索開始」をしています。 今回、その検索用フォームに「キーワード検索」というテキストボックスを1つ追加したいです。 検索の対応となるフィールドは2つあります。 「質問」「回答」 このどちらかのフィールドに「キーワード検索」した文字があればレコードを抽出してほしいです。 とりあえず検索結果を表示するためのクエリの「質問」「回答」の抽出条件に同様に Like "*" & [Forms]![F_検索フォーム]![キーワード] & "*"と入れてみました。 なんとなく違う気はするのですが、どうやってやれば良いのかイマイチわかりません。 またこの同じクエリに IIf(IsNull([Forms]![F_検索フォーム]![区分1cd]),True,[区分1cd]=[Forms]![F_検索フォーム]![区分1cd]) 抽出条件欄に「True」 これが3つのコンボボックス分あります。 何のためのフィールドでしょうか? また、私が追加する「キーワード検索」テキストボックスの分も作らないといけないものでしょうか? 素人質問で申し訳ありませんがアドバイスいただけたら助かります。 Accessのテキストは職場にたくさんあるのですが、私のレベルでは読んでも??ばかりです。 よろしくお願いします。

専門家に質問してみよう