• ベストアンサー

Accessの検索フォーム

またまたAccessについての質問です。 検索フォームというのを作りました。 テーブルのデータから条件に合うものだけを抽出したいのです。 たとえば1つ目の検索フォーム[A]のテキストボックスに「AAA」を入力します。 そのあとBには「BBB」と入力します。 同じくCには「CCC」と入力します。 そして絞込みボタンを押したらAAAでBBBでCCCのものが抽出されます。 これはうまくいきました。 とりあえず、複数条件なので、わけもわからず「&」で結んでしまいました・・・。 ↓は絞込みボタンのクリック時です。↓ 困ったのは、すべて検索条件を指定しない場合です。 たとえば「AAA」で「CCC」のものを抽出したいとき、[A]のテキストボックスに「AAA」と入れ [C]のテキストボックスに「CCC」と入れます。 そして絞込みボタンをクリック。 するとBが未記入だからか、抽出されたのは真っ白でした・・・。 Option Compare Database Private Sub コマンド50_Click() Me.Filter = "契約='" & Me!テキスト51 & "'and A='" & Me!テキスト57 & "'" Me.FilterOn = True End Sub 組み合わせが自由になる検索フォームにするにはどうすればよいのでしょうか? 誰か助けてくださ~い!

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

  • ベストアンサー
  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.6

>ところが、「A」と「B」というような「契約」が入ってない条件で抽出すると・・・真っ白になりました。 なぜなのでしょうか??? 「契約」の入力の有無にかかわらず、抽出条件に指定されているためです。 ここの部分です。 sFilter = "契約='" & Me!テキスト51 & "'" 入力がないときに抽出条件から外したいのなら、 sFilter = "" IF IsNull(Me!テキスト51) = False Then  sFilter = "契約='" & Me!テキスト51 & "'" End IF としなければなりません。 ただ、これだと「契約」が未入力のとき、sFilterの内容は、 「and A='xxxxx' and B='yyyyy'」 のように、「and」から始まってしまいます。 これではエラーになります。 対策として、ダミーの条件をいれましょう。 つまり、 sFilter = "1=1" IF IsNull(Me!テキスト51) = False Then  sFilter = "and 契約='" & Me!テキスト51 & "'" End IF というようにします。 こうすると、sFilterの内容は、 「1=1 and 契約='qqqqq' and A='xxxxx' and B='yyyyy'」 もしくは 「1=1 and A='xxxxx' and B='yyyyy'」 のようになります。 できるだけ仕組みを覚えてくださいね。 そうしないと、直すことができないですよ。

ringo0120
質問者

お礼

ありがとうございます。 がんばってやってみます。 いろいろ本を読んだりしたのですがいまいち分からなくて・・。 何かオススメの本があったらまた教えてください。 ほんとにありがとうございました。

その他の回答 (5)

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.5

#3です。 >(初心者なもので、基本的な質問ですみません) なるほど。。。 少し、解説しておきます。 ●意味がわかれば簡単です ・「Me」は自分のフォームを指しています。 ・「Me.A」とすると「このフォームの中にあるAという名前のコントロール」となります。 ・「If IsNull(Me.A) = True Then」は、「Aというコントロールに入力がなかったら」となります。  (「End If」まで実行されます) ●テキストボックスの名前は関係あります。  修正・変更などのように、後で見るときのために、適切な名前に変えておくといいでしょう。  今の状態だと、  If IsNull(Me.A) = True Then   sFilter = sFilter & " and A='" & Me.A & "'"  End IF  は、  If IsNull(Me.テキスト57) = True Then   sFilter = sFilter & " and A='" & Me.テキスト57 & "'"  End IF  のようになります。  (上のコードは、全角スペースを入れたので、コピペできません)  *回答したときには、名前に気が付かなかったので、申し訳ないです。  そのまま貼り付けただけだと、「コントロールがありません」とかいうエラーが  でそうな気がしますけど。。。何故?  わからない箇所があれば、また聞いてください。

ringo0120
質問者

お礼

何度も何度もご親切にありがとうございます! 今から仕事に行ってやってみます! また夜に報告します。 ありがとうございました(^-^)

ringo0120
質問者

補足

お久しぶりですみません。 あれからやってみたのですが、90%はできました!! 「契約」と「A」の組み合わせとか、「契約」と「B」の組み合わせとか、「契約と「A」と「C」の組み合わせでうまく抽出できました。 ところが、「A」と「B」というような「契約」が入ってない条件で抽出すると・・・真っ白になりました。 なぜなのでしょうか??? またよろしくお願いします。

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.4

#3です。 そうですね。同じようにすればOKです。 (全く同じではでないですけど) 次のような感じになります。 'テキストボックスC If IsNull(Me.C) = False Then sFilter = sFilter & " and C='" & Me.C & "'" End IF の後ろに次のコードを追加します。 'テキストボックス(開始日付) If IsNull(Me.txStartDate) = False Then sFilter = sFilter & " and " & Me.txStartDate & "<=date" End IF 'テキストボックス(終了日付) If IsNull(Me.txEndDate) = False Then sFilter = sFilter & " and date<=" & Me.txEndDate End IF ただし、 ・txStartDateは開始日付のテキストボックス ・txEndDateは終了日付のテキストボックス ・dateはテーブルの日付フィールド名 ・日付のフィールドが、どのように定義されているか不明なので、  上記のコードのままではうまくいかない可能性はあります。  その場合、日付フィールの型に合わせた記述をする必要があります。 を表しています。 また、開始日付と終了日付は一方のみの入力で動作します。

ringo0120
質問者

補足

またまたありがとうございます! 昨夜から帰ってやってみたのですが、いろいろ触ったからでしょうか?うまく出来ていた検索ができなくなってしまいまいした・・・(;;) 「契約」のところはうまく絞り込んでくれるのですが、「A」のボックスのみに入力して絞り込みをしたら 真っ白になってしまいました~・・・。「B」も「C」も同じく絞り込めません。 「契約」に入れて、「A」(またはB/C)に入れて、ふたつ絞り込み条件を入れると「契約」の中の「A」が表示されるはずなのに、「契約」のみが絞り込まれます。 テキストボックスの名前とか関係あるんですか? (初心者なもので、基本的な質問ですみません) いろいろ書き直したので、前回「回答!」に書いて下さってたのをそのままコピーして貼り付けました。 Private Sub コマンド50_Click() Dim sFilter As String sFilter = "契約='" & Me!テキスト51 & "'" 'テキストボックスA If IsNull(Me.A) = True Then sFilter = sFilter & " and A='" & Me.A & "'" End IF 'テキストボックスB If IsNull(Me.B) = True Then sFilter = sFilter & " and B='" & Me.B & "'" End IF 'テキストボックスC If IsNull(Me.C) = True Then sFilter = sFilter & " and C='" & Me.C & "'" End IF Me.Filter = sFilter Me.FilterOn = True End Sub それぞれのテキストボックスのプロパティの名前のところには A テキスト57 B テキスト65 C テキスト67 D テキスト69 となっています。 またぜひよろしくお願いします。 ほんとにすみません~・・・。

  • ngsvx
  • ベストアンサー率49% (157/315)
回答No.3

単純に、入力がなければ、条件に加えないようにしたらどうでしょうか? Me.Filterに設定する内容を予め作っておきます。 Private Sub コマンド50_Click() Dim sFilter As String sFilter = "契約='" & Me!テキスト51 & "'" 'テキストボックスA If IsNull(Me.A) = True Then sFilter = sFilter & " and A='" & Me.A & "'" End IF 'テキストボックスB If IsNull(Me.B) = True Then sFilter = sFilter & " and B='" & Me.B & "'" End IF 'テキストボックスC If IsNull(Me.C) = True Then sFilter = sFilter & " and C='" & Me.C & "'" End IF Me.Filter = sFilter Me.FilterOn = True End Sub

ringo0120
質問者

お礼

ありがとうございます!! うまくいきました!! それと・・・もうひとつ質問なんですが・・・。 日付○日~○日、も選びたいんですが、同じようにすれば良いのでしょうか? よろしくお願いします。

  • H-black
  • ベストアンサー率35% (26/73)
回答No.2

私の場合もクエリですけれど、ringo0120さんのおっしゃる「テキスト51」の前後にワイルドカード「"*"」をつけて&で繋げています。あとNull記述もしてますね。 こんなカンジです。 Like "*" & [forms]![フォーム名]![テキスト名] & "*" Or Is Null これを各抽出条件に入れています。 検索条件が多い場合にクエリの抽出条件の列が1列で済むので重宝してます。書くのめんどくさいですけどね。

ringo0120
質問者

お礼

ありがとうございます! ワイルドカード、私も最初やったのですが、どうもうまくいきませんでした。 H-blackさんの言うように書いてみるとできました! なので、もうひとつの巨大検索フォームに使わせてもらいました~!!(^-^) ありがとうございました!

  • yamutya
  • ベストアンサー率15% (3/20)
回答No.1

クエリでうまくできます。 フォームにテキストボックス入力窓を3つ開け クエリの抽出条件の欄にそのフォームの入力窓を入力して行きます。一行目は A と BとCを同じ行に 2行目はAとB 3行目はAとC 4行目は BとC 5行目はA 6行目はB 7行目はCと7行に分ければいいでしょう。アンド ではなくて オア で検索されるので 入力のない欄があってもだいじょうぶです 

ringo0120
質問者

お礼

ありがとうございますーー!! この方法、簡単だし、うまくできました!! なので、これも検索フォームに使わせてもらいます!! ほんとにありがとうございました!!

関連するQ&A

  • Accessでの検索フォーム作成

    お世話になります。 Accessを使い始めて半月ぐらいの初心者です 次のような条件の検索フォームの作成を依頼されたのですがうまく出来ません。 (1)Accessのフォームフィルタを使用した検索フォームで、3つのテキストボックス(以下TB)を同一 フォーム上に用意し、抽出を実行するボタンと解除するボタンをTBの隣にそれぞれ用意する (2)あいまいな条件(部分一致)で検索出来るようにする (3)抽出結果も同一フォーム上に表示 (4)任意のTBに入力した値で抽出後、他のTBを利用し 絞り込み検索を実行できるようにしたい 現在は下記のように作成しました。 ●テーブル [管理番号]、[品名品番]、[仕入先名]のフィールドを持つテーブルを用意。 ●フォーム(表形式) 上記テーブルに連結した検索フォームを作成し、抽出する値を入力する TBの名前はそれぞれ下のように付けました。 フィールド名    TB名 ・[管理番号]⇒管理番号検索 ・[品名品番]⇒品名品番検索 ・[仕入先名]⇒仕入先名検索 ・[抽出実行ボタン]のイベント(管理番号で検索時) Private Sub コマンド47_Click() Me.Filter = "管理番号 Like '*" & Me!管理番号検索 & "*'" Me.FilterOn = True End Sub ・[抽出解除ボタン]のイベント(管理番号で検索時) Private Sub コマンド49_Click() Me!管理番号検索 = Null Me.FilterOn = False End Sub 他2つも同様に作成して実行した結果、単体での抽出はうまくいくのですが さらに絞り込もうと他のTBに値を入力して抽出を実行すると先の抽出が解除され 単体でのフィルタがかかって抽出されてしまいます。 どなた様か良い案が御座いましたらご指導ください。 初心者のため、説明不足な点があるかと思いますが 不明な点がございましたらご質問くださいませ。 宜しくお願い致します。

  • access 検索について教えてください。

    フォームにテキストボックス(テキスト0)を配置し、県名を入力するとこのフォーム(検索フォーム)にレコード内容が表示されるようにしました。クエリの県名の抽出条件にform![検索フォーム]![テキスト0]とし、検索フォームの更新後処理に Private Sub テキスト0_AfterUpdate() DoCmd.Requery End Sub と記載し利用しています。 ここで質問ですが、抽出条件に[me].[テキスト0]と記載し、上記内容のコードを記載しましたが、検索フォームが表示できません。 どこがいけないのでしょうか? お願いします。

  • Accessの絞りこみについて教えて下さい。

    Access初心者です。顧客テーブルがあり、名前で絞りこみをかけたいのですが、エラーになってしまい困っています。 顧客テーブルからフォームを作り、フォームヘッダーにテキストボックスとボタンを作成しました。 絞り込みは苗字でもHITするようにし、テキストボックスには名前を入力、ボタンで絞り込みをかけるというかたちです。。 テキストボックス名は検索用、ボタンの名前は検索にしています。 そこで下記VBAコードを入力したところ、パラメータが出てきてしまい、絞り込み出来ません。 Private Sub 検索_Click() Me.RecordSource = "select * from 顧客リスト where 氏名 like ‘*" & 検索用 & "*’" End Sub どうしたらよいでしょうか? 教えて下さい。 よろしくお願いします。

  • Accessで検索フォームを作成したいです。

    いつもお世話になっています。 Accessで検索フォームを作成したいのですが、webで調べてあてはめても上手くいきません。どうか、ご指導の程宜しくお願い致します。 (成分:テーブル) ID     成分 1    AAA 2     BBB 3     CCC 合計14レコードです。 (薬品と品番:テーブル) 薬品名    成分 あああ AAA いいい BBB えええ BBB あああ    CCC           合計200レコードです。 検索フォームを作成したいのですが、薬品名(例:「あああ」)を入力すると同じフォーム内で「AAA」「CCC」・・・とすべて一覧表示されるようにするにはどうしたらいいのでしょうか? Access初心者で、説明も物分りも悪いですがご指導の程宜しくお願い致します。 Access2002を使っています。

  • Accessであいまい検索するフォームをつくってみたんですが?

    Accessの初心者です。 本などをみながらあいまい検索ができるようなフォームをつくってみましたがフォームを開いた時、全レコードが表示されてしまいます。 クエリーの抽出条件はLike "*" & Forms!フォーム1!テキスト0 & "*"にしてテキストボックスプロパティの更新後処理でDoCmd.Requeryとしました。(意味がよくわからないんですけど) フォームを開いた時やテキストボックスになにも入力されていない時、全レコードが表示されないようにするにはどうすればいいのでしょうか? よろしくお願いします。

  • 【Access】複数フィールドを対象とする検索

    Access上で「検索ボタン」をクリックすると、 「データ」フォームのフィールド1、フィールド2、フィールド3のいずれかに「検索条件1」の語を含み、かつ、フィールド4、フィールド5、フィールド6のいずれかに「検索条件2」の語を含むレコードを抽出できるようにしたいと思います。 検索条件はテキストボックスに入力するようにしており、テキストボックス名は「検索条件1」、「検索条件2」となっています。 以下のコードでやってみたのですが、「実行時エラー13、型が一致しません」というエラーが出てうまく抽出できません。 Private Sub 検索ボタン_Click() Dim filter1 As String filter1 = "フィールド1 like '*" & Me!検索条件1 & "*' or フィールド2 like '*" & Me!検索条件1 & "*' orフィールド3 like '*" & Me!検索条件1 & "*'" And " フィールド4 like '*" & Me!検索条件2 & "*' or フィールド5 like '*" & Me!検索条件2 & "*' orフィールド6 like '*" & Me!検索条件2 & "*'" DoCmd.OpenForm "データ", acNormal Forms!データ!.filter = filter1 Forms!データ!.FilterOn = True End Sub 「検索条件1,2」のテキストボックスがあるフォーム上の「検索ボタン」をクリックすると、 「データ」フォームが開き、検索をかけるという流れをイメージして作成 しています。 どなたか正しい記述を教えていただけませんでしょうか。 よろしくお願いいたします。

  • Access 検索フォーム

    いつもお世話になってます。 Accessの検索フォームについて教えて下さい。 業務マスターと仕事DBという2つのデーターベースがあります。 業務マスターは共有のサーバーの中にあり、得意先テーブルをリンクして、それをもとに得意先フォームを作りました。 非連結のテキストボックス(txt検索)と非連結のリストボックス(一覧)がり、リストボックス(一覧)のクエリ得意先の抽出に使うフィールドの条件に、Like"*"&[Forms]![得意先フォーム]![txt検索]&"*" を入れました。 txt検索に文字を入れ、一覧リストボックスで絞込をし、選ぶとフォームに表示されるという流れにしたのですが・・・。 Private Sub txt検索_AfterUpdate() Me![一覧].Requery End Sub Private Sub 一覧_AfterUpdate() Dim rs As Object Set rs = Me.Recordset.Clone rs.FindFirst "[得意先ID] = " & Str(Nz(Me![一覧], 0)) If Not rs.EOF Then Me.Bookmark = rs.Bookmark End Sub [Forms]![得意先フォーム]![txt検索]というパラメータがでて(今まで出たことがない) 文字を入力しても実行できませんでした。参照元が分からないのかなと思いますが、どうしたらうまくいくのか分かりません。どなたかお知恵をかしていただけないでしょうか。Accessは2003を使っています。よろしくお願いします。

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

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

  • 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検索の様に複数曖昧検索ができない     中途半端な検索で抽出してる状態です。     どなたか手直しいただけますでしょうか? 

  • Accessのクエリ

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

専門家に質問してみよう