• ベストアンサー

ACCESSのフォーム上で複数検索したい項目がある場合どうすればいいですか?

(1)部品ID (2)日付 (3)入庫か出庫  以上3つを検索したいのですがどうすればいいでしょうか? (1)の部品IDはリストBOXの一覧から選択し、選択したものをテキストBOXに表示させるという形で作成しました。 (2)の日付はテキストBOXに手入力という形です。 (3)の入庫か出庫はコンボBOXで選択するという形です。 検索ボタンを作成してクエリの更新をかけて表示したいと思うのですが、3つの条件のうちその時により、全ての検索条件を入力しなくても1つでも条件を入力するとその条件が表示させるようにさせたいのです。 あと、何も条件を入力せず、検索ボタンを押すと全てのデータが表示させれるようにもしたいのです。 どのようなコードを記述すればいいでしょうか? よろしくおねがいします

noname#89246
noname#89246

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

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.5

>”このオブジェクトに値を代入することはできません”と表示され・・ 失礼しました。フィルターのセットで最後が足りませんでした。あと[このオブジェクトに値を代入・・]のメッセージは抽出等で間違った指定方法をしているという事なのですが・・。 多分日付の抽出の仕方だと思いますので日付抽出のセットを少し変えましたのでメインフォーム上のボタンCmd1のクリック時のイベントを下記に変更してみてください。 Private Sub Cmd1_Click() Dim MyCriteria As String MyCriteria = "日付 =" If IsNull(Text2) Then MyCriteria = MyCriteria & True ElseIf Not IsNull(Text2) Then MyCriteria = MyCriteria & "#" & Me!Text2 & "#" Else End If strfilter = MyCriteria strfilter = strfilter & " And 部品ID Like '*" & Me.Text1.Value & "*' And 区分 Like '*" & Me.Cmb1.Value & "*'" Forms!フォーム名!サブフォーム名.Form.Filter = strfilter Forms!フォーム名!サブフォーム名.Form.FilterOn = True Forms!フォーム名!サブフォーム名.Requery End Sub メインフォーム上のテキストボックスやコンボの値をサブフォームのフィルターに代入するときはMe!Text1の指定で良さそうなので上記でサブフォームにフィルターをかけられます。(試したらフィルターかけられました。) これでどうでしょう。

noname#89246
質問者

お礼

お礼が遅くなって申し訳ありません。 できました!!本当に毎回ありがとうございます。 またよろしくおねがいします。

その他の回答 (4)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.4

>抽出条件をサブフォームに表示したいという記述を忘れていました 抽出条件をサブフォームの抽出条件に代入すれば行けるかと思いますが。 strFilter = "部品ID Like '*" & Me.Text1.Value & "*' And MyCriteria And 区分 Like '*" & Me.Cmb1.Value" Me.Filter = strFilter Me.FilterOn = True Me.Filter・Me.FilterOnは自分のFilterのセットとなりますのでこの部分を Forms!フォーム名!サブフォーム名.Form.Filter = strFilter Forms!フォーム名!サブフォーム名.Form.FilterOn = True Forms!フォーム名!サブフォーム名.Requery としてみてください。 抽出部分も strFilter = "部品ID Like '*" & [Forms]![フォーム名]![Me.Text1].Value & "*' And MyCriteria And 区分 Like '*" & [Forms]![フォーム名]![Cmb1].Value" にすれば行けるはずですが。

noname#89246
質問者

お礼

何度も質問に答えてくださってありがとうございます。 デバックがでるんです・・・ ”このオブジェクトに値を代入することはできません”と表示され、Me.Filter = strFilterが黄色にマーカーされます。 O_cyan様の回答をそのままコピーしているのでスペルミスではないと思うのですが・・・。 お時間があればまたよろしくおねがいします

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

>ACCESSの勉強法やお勧めの本・サイトなど教えていただければありがたいのですが 勉強法といっても特にはないのですが私は自分で考えた処理が動くかどうかSQLでもモジュールでも取りあえず試してみる事にしています。ダメならどこがダメなのか究明する。頭の中で考えた物を記述する感じですが・・。 そのためにはある程度の関数の記述の仕方と関数の概要が分かる本ですかね? Accessで使う私の持っている本はMicrosoftのAccess開発者用のアプリケーションマニュアルとVB開発者用マニュアルの厚さ3Cmくらいの分厚い本くらいですね。あまり読みませんが・・。^_^; 本は関数の便利な使い方みたいな物が多く載っている方が良いと思います。 サイトは結構いろいろあると思いますが一概にどこが良いとは言えません。 すいませんあくまで主観です。

noname#60992
noname#60992
回答No.2

フォームフィルタを使わないとすれば、クエリを作成するのが良いと思います。 データ一覧を参照するのが目的ならば、選択クエリを作成して抽出ボタンなどを押した際にクエリを実行させればよいと思います。 何か他の目的があるのならば、追加クエリなどで一旦テーブルにデータを入れたほうが良いかもしれません。 クエリを作成する前に、抽出条件をきっちり決めなくてはいけません。 出庫・入庫は必ずどちらかが選択されているものとしても、部品IDと日付が両方入力されている場合の抽出条件をANDにするかORにするかによって、クエリの作り方が少し違います。 直接質問には関係ないですけれど、日付を選ぶのには ActiveXのカレンダーコントロールや、DatePickerなどが便利ですよ。 (クエリを実行させる際に抽出条件によってエラーが起きないよう考えておく必要があります。)

noname#89246
質問者

お礼

回答ありがとうございます。 クエリでも出来るのですね。勉強になります。 紹介して頂いたActiveXのカレンダーも使ってみます。 ありがとうございました

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.1

簡単に処理したいのであれば Filterを使ってやれば出来ます。 部品IDを選択し表示するテキストボックスをText1、日付を入力するコントロールをText2、入庫か出庫をCmb1としてテーブルのフィールド名を区分、検索ボタンをCmd1とした場合。 Cmd1ボタンのクリック時イベントに Private Sub Cmd1_Click() Dim MyCriteria As String MyCriteria = "日付 =" If IsNull(Text2) Then MyCriteria = MyCriteria & True ElseIf Not IsNull(Text2) Then MyCriteria = MyCriteria & "#" & Me!Text2 & "#" Else End If strFilter = "部品ID Like '*" & Me.Text1.Value & "*' And MyCriteria And 区分 Like '*" & Me.Cmb1.Value" Me.Filter = strFilter Me.FilterOn = True End Sub としてフォームにFilterをかければ出来ます。 または クエリのWhere句で抽出条件に同様となる記述をしないと出来ません。

noname#89246
質問者

お礼

回答ありがとうございます。 早速試してみます。 O_cyan様には本当にいつも助けられています。 もしよければACCESSの勉強法や、お勧めの本・サイトなど教えていただければありがたいのですが・・・。 またお時間のある時よろしくお願いします

noname#89246
質問者

補足

早速試してみましたができません(>_<) 抽出条件をサブフォームに表示したいという記述を忘れていました。 また回答いただけるとありがたいです。よろしくおねがいします。

関連するQ&A

  • Access2002での複数項目検索について

    教えてください。 Access2002でデータベースを作っています。 ふたつのテーブルから選択クエリを作成、そのクエリ内で部分一致のパラメータを設定し、 複数項目(5つ)の検索を行っていましたが、検索のたびに毎回5つのダイアログボックスを クリア(必要項目を入力、入力しないパラメータは「OK」でとばす)するのがめんどくさいと 使用者にいわれ、検索フォームからの検索に変えたいと思っています。 その場合、  (1)選択クエリを基としたフォームを新規作成し、  (2)非連結のテキストボックスを5つ作り、それぞれ適当な名前を付け、  (3)クエリの抽出条件の欄の現在パラメータ設定をしているところを、       [Forms]![フォーム名]![テキストボックス名]に変える だけではできないのでしょうか。。 いろいろWeb上で調べたり、本を読んで見よう見まねでつくってみましたが、出来上がった フォームから検索ボタン(「クエリの実行」ボタン)を押しても、全件が表示されてしまうの です。 パラメータではできているのに・・・。 どなたか、ご教示くださるとうれしいです。 よろしくお願いいたします。

  • accessでの複数条件での検索について

    現在accessで売上管理を作成しています。 T_一覧には売上日付、担当者、品名、金額、入力者、入力日付のデータが格納されています。 F_一覧は、T_一覧を基に、すべてのデータが閲覧できるフォームです。 ヘッダー部分に、売上日付、担当者、入力者、入力日付のテキストボックスを配置し、「検索」コマンドボタンを押下すると、検索したい条件に一致するデータのみが表示されるようにしたいです。 現在は担当者と入力者に検索したい値を入力し、「検索」ボタンを押下すると、条件に合ったデータのみが表示されるのですが、売上日付と入力日付に検索したい日付を入力しても、なにも検索できません。 担当者と入力者はQ_検索をT_一覧より作成し、抽出条件にLikeを使っています。 日付はどのように抽出条件にかけばよいのでしょうか?

  • Access2000で複数の検索項目を作りたいのですが・・・

    こんにちわ。 今、Accessで社員録を作成しているんですが、複数の検索について教えて下さい。 ■テーブル テーブル名:社員録 フィールド名:ID・検索名・氏名・所属ID・所属 ■クエリ クエリ名:社員録クエリ フィールド名:ID・検索名・氏名・所属ID・所属 検索名抽出条件:検索名フィールド: Like [Forms]![社員録 縦]![けんさく]         所属フィールド: Like [Forms]![社員録 縦]![抽出検索名] ■フォーム フォーム名:社員録フォーム:テキスト1・テキスト2・ボタン1       社員録サブフォーム:データソース:社員録クエリ テキスト1:所属を入力 テキスト2:検索名を入力 ボタン1:マクロの再クエリを実行する ■ここからが質問です■ (1)テキスト1又は、2が空白のとき社員録全体から検索かフィルタ。 (2)テキスト1・2が、入力されてる時、両条件から検索かフィルタ。 をしたいのですが、何かいい方法がありましたら教えて下さい。 説明が、長くなってしまってスミマセン。。。

  • Accessの検索用フォーム

    Access初心者です。 テキスト学習をしていまして「フォーム」上で膨大なデータを、「検索用」にコンボボックスを作成して検索をかけることができる・・・とありました。 検索用のコンボボックスとして「日付」で検索をしたいと思うのですが、日付の表示方法を「カレンダー」のように表示することはできますか? また、設定の仕方を教えていただけると助かります。 よろしくお願いいたします。

  • Accessのフォームにて

    Accessの配達管理のフォーム(表形式、ある条件にて抽出済み)にて ●日付 ●顧客ID  ・  ・ ●配達者CD 上記のフィールドがあるとします。 このフォームのヘッダー部分に非連結のテキストボックスA、Bを作成し、 テキストボックスAに配達者CDを入力すると、 テキストボックスBに配達者名が表示される。 フッター部分に「印刷」ボタンを作成し、これをクリックすると、 フォーム一覧の配達者CDにヘッダー部分のテキストボックスAの 配達者CDが入力されるというシステムを作りたいのですが、 テキストボックスAの配達者CDを参照させて、テキストボックスBに 配達者名を表示させるというのがうまくいきません。 テーブルにて、配達者マスタ ●配達者CD ●配達者名 は、作成しています。 よろしくお願いいたします。

  • 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 組み合わせが自由になる検索フォームにするにはどうすればよいのでしょうか? 誰か助けてくださ~い!

  • Access 検索した値を別フォームに

    Accessのシステムを会社で作ってます。 検索したIDをサブフォーム(データシート型) で表示したレコードを編集フォーム(別フォーム)に呼び出したいのですが上手く出来ません。 ネットでも検索しましたが良いのがありませんでした。 どなたか、お手数ですがコードを教えていただけないでしょうか? 何卒よろしくお願いします。 *adodbとDAOのどちらか使う必要があるならDAOを使用して作成したいです。 *クエリは使わずに作成したいです。 ○検索フォーム 検索ボタン ID入力テキスト 編集ボタン サブフォーム(データシート型) 編集ボタンを押すと ○編集フォーム 単帳型 *レコード項目 ID プロジェクト名 日付 モジュールNO

  • access クエリ 検索フォームの作り方

    よろしくお願いします。 やりたいこと: フォーム上で、テキストボックスに入力した値を検索して表示したい。 本やウェブで調べて、なんとか一度はやっと出来たのですが、 誤って何かを変更してしまい、使えなくなってしまいました。 今となってはどの資料を見て作れたのかわからなくなりました。 やったこと: クエリ :クエリA   条件にforms!フォームA!txt0を入力 フォーム:フォームA ヘッダーに非連結のテキストボックスtxt0を作成 txt0の更新後処理:docmd.requeryを入力 しかし、txt0に入力しても検索されません。 フォームのプロパティのレコードソース欄にクエリAを選択するようですが、 選択するクエリ名が表示されないので、クエリ名を入力しましたがダメでした。 どこか間違っているのでしょうか。VBAまでは勉強できないので上記範囲内でお願いします!

  • Access2003 検索用フォームでの検索がうまくいかない

    Access2003 検索用フォームでの検索がうまくいかない とある、テーブルを参照するフォームを作成。 そしてテキストbokを設けて、各項目毎にキーワードを指定してデータを抽出できるようにしたいのですが、 どうもうまくいきません。 検索は出来ているのですが、全部ひっかからないのです。 例えば ID という項目を検索するbox に"1"を入力して ID=1の全データを抽出しようとすると、一部検索にかかってこないものがある という具合です。 テーブルに入力されている数字や文字が本当に一致しているかどうかも調べましたが確かに一致しています。 実際、テーブルを開いて ctr+f で検索すると全てひっかかります。 何が原因なのでしょうか??? 私の作った手順は以下のとおりです。 テーブル作成(エクセルからインポート) ※空白の欄もあります フォーム新規作成でフォーム作成 フォーム上にテキストbox作成 クエリ作成 (Like "*" & [Forms]![フォーム名]![テキストbox名] & "*" ) マクロ作成⇒フィルタ実行/上の手順で作ったクエリを登録 マクロをフォーム上へドロップ およそこのような手順です。

  • ACCESSで困っています。

    ACCESSで在庫管理のDBを作成しています。 クエリで入庫を+、出庫を-する1日の在庫数の表示はすることが出来ました。 ここから広げて、本日の在庫を明日の前日在庫として表示し、入庫数を+、出庫数を-。という形を日々作っていきたいのです。 何かいい方法はありますか? それとこの在庫数を元に何月何日にどの部品を入庫・出庫したかの履歴を作成したいのですが、何か方法ありますか? 説明不足で申し訳ありませんが、宜しくお願いします。

専門家に質問してみよう