• ベストアンサー

アクセス 2つのフィールドをOR検索したい

受注管理システムを作っています。アクセス初心者です。VBAは独学で少しかじっている程度です。 受注Tには、受注日・得意先・工事名などほぼ全ての情報が入っています。 その中に、フィールド「営業担当者」と「工事担当者」があります。 「山田太郎」が営業担当者だったり、工事担当者だったり、どちらも兼務することもあります。 「山田太郎」が関係する、受注Tのレコードを全て検索結果に出したい場合、どのようにしたらよいですか? 自分なりに、OR検索を試みましたが、うまく行きませんでした。

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

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

>表が変化しない。 以下のことを確認してみてください。 「担当者」テーブルに重複した名前がある。 山田 鈴木 山田 のような場合、山田を選択しても名前が 重複しているため変化はありません。

yuayua-tt
質問者

お礼

またまた、ありがとうございます。 名前は、フルネイムで入れていて、重複もありません。 おそらく私のやり方がおかしいのでしょう・・・ テーブルやフォームももう一度見直してみます。 ありがとうございました。

その他の回答 (6)

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

No5に貼り付けるとき変な貼り付けを したようです。見にくいので訂正 しておきます。 こちらで設定した方法を掲載しておきます。 準備: 担当Tというテーブルを作成 フィールドは担当とし、テキスト型 とする。フィールドは一つだけ。 主キーは設定しない。 工事担当、営業担当の名前をすべて入れておく。 (重複しないように) (1) フォームの「新規作成」をクリック (2) 「基になるテーブルまたはクエリの選択」で受注Tを選択 (3) 「オートフォーム表形式」を選択して「OK」とする。 (4) できたフォームを適当な名前で保存。 (5) できたフォームをデザインビューで開く。 (6) 詳細の上部にマウスを当て、矢印が十字になったら クリックして2~3cmくらい下に下げる。 残りのラベルもすべて選択して下に下げる。 (7) 空いたスペースにコンボボックスとボタンを 設定。それぞれの名前は以下。 コンボボックス  コンボ ボタン      cmd検索 (8) コンボボックスの値集合ソースに準備した担当Tを 指定。 (9) ボタンのプロパティの「クリック時」右端をクリックし、 「ビルダの選択」を表示し、「コードビルダ」を選択 して「OK」とする。 (10) 出てきたコード表を、 Private Sub cmd検索_Click() Me.Filter = "[営業担当者] = '" & Me!コンボ & "'" & " OR [工事担当者] = '" & Me!コンボ & "'" Me.FilterOn = True End Sub のようにしあげて、保存する。 以上です。これで一度確かめてみてください。

yuayua-tt
質問者

お礼

ご丁寧にありがとうございます。 アドバイス通りにやりましたが、できませんでした。 コンボボックスから担当を選び、cmd検索ボタンを押してみて、なにも表が変わりません。 cmdボタンの設定の仕方が間違っているのでしょうか? 私のやった方法は、コントロールウィザードはoffにして、ボタンを設置。名前をcmb検索にする。 cmd検索ボタンのプロパティーくクッリク時イベントのコードビルダーにコードを貼り付けました。 どこかやり方がおかしいでしょうか・・・

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

こちらで設定した方法を掲載しておきます。 準備: 担当Tというテーブルを作成 フィールド名は「担当」とし、テキスト型 とする。フィールドは一つだけ。 主キーは設定しない。 工事担当、営業担当の名前をすべて入れておく。 (重複しないように) (1) フォームの「新規作成」をクリック (2) 「基になるテーブルまたはクエリの選択」で受注Tを選択 (3) 「オートフォーム表形式」を選択して「OK」とする。 (4) できたフォームを適当な名前で保存。 (5) できたフォームをデザインビューで開く。 (6) 詳細の上部にマウスを当て、矢印が十字になったら クリックして2~3cmくらい下に下げる。 残りのラベルもすべて選択して下に下げる。 (7) 空いたスペースにコンボボックスとボタンを 設定。それぞれの名前は以下。 コンボボックス  コンボ ボタン      cmd検索 (8) コンボボックスの値集合ソースに準備した担当Tを 指定。 (9) ボタンのプロパティの「クリック時」右端をクリックし、 「ビルダの選択」を表示し、「コードビルダ」を選択 して「OK」とする。 (10) 出てきたコード表を、 こちらで設定した方法を掲載しておきます。 準備: 担当Tというテーブルを作成 フィールドは担当とし、テキスト型 とする。フィールドは一つだけ。 主キーは設定しない。 工事担当、営業担当の名前をすべて入れておく。 (重複しないように) (1) フォームの「新規作成」をクリック (2) 「基になるテーブルまたはクエリの選択」で受注Tを選択 (3) 「オートフォーム表形式」を選択して「OK」とする。 (4) できたフォームを適当な名前で保存。 (5) できたフォームをデザインビューで開く。 (6) 詳細の上部にマウスを当て、矢印が十字になったら クリックして2~3cmくらい下に下げる。 残りのラベルもすべて選択して下に下げる。 (7) 空いたスペースにコンボボックスとボタンを 設定。それぞれの名前は以下。 コンボボックス  コンボ ボタン      cmd検索 (8) コンボボックスの値集合ソースに準備した担当Tを 指定。 (9) ボタンのプロパティの「クリック時」右端をクリックし、 「ビルダの選択」を表示し、「コードビルダ」を選択 して「OK」とする。 (10) 出てきたコード表を、 Private Sub cmd検索_Click() Me.Filter = "[営業担当者] = '" & Me!コンボ & "'" & " OR [工事担当者] = '" & Me!コンボ & "'" Me.FilterOn = True End Sub のようにしあげて、保存する。 以上です。これで一度確かめてみてください。 のようにしあげて、保存する。 以上です。これで一度確かめてみてください。

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

フォームにあるコンボボックスの名前を コンボ とします。実際に合わせて以下のコード中の名前を変更してください。 フォームにボタンを一つ設定します。名前をcmd検索とします。 そのボタンのクリック時のイベントで以下のように設定します。 Private Sub cmd検索_Click() Me.Filter = "[営業担当者] = '" & Me!コンボ & "'" & " OR [工事担当者] = '" & Me!コンボ & "'" Me.FilterOn = True End Sub

yuayua-tt
質問者

お礼

ありがとうございます。 アドバイス頂きました通りに、やってみましたが、 cmd検索ボタンを押してみても、何も反応がありません。 余計なコードが残っていないかも見ましたが、大丈夫でした。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

アクセスのデザイングリッドで フィールド  営業担当者 ・・・ 工事担当者 抽出条件  山田太郎・・・・・・ 空白 または・・・・・・・・・・・・・・・・・・・山田太郎 のようにしたら仕舞いでは。これはアクセスのデザイングリッドの特有の条件の書き方であるが、エクセルの フィルタオプションの設定の条件記述でも似たような書き方を要求する。 ーー 上記をSQLビューに表示すると 私のデータ例では SELECT テーブル2.ID, テーブル2.工事番号, テーブル2.営業担当者, テーブル2.地区, テーブル2.工事担当者 FROM テーブル2 WHERE (((テーブル2.営業担当者)="山田 太郎")) OR (((テーブル2.工事担当者)="山田 太郎")); と、単にORで2つを連ねるだけでは。 >うまく行きませんでした。 どういう風にやって、どういう結果になったか書いて質問すること。 VBAといってもSQLを使っているのか、フィルタでやっているのかわからない。

yuayua-tt
質問者

補足

ありがとうございます。 知識の少ない私が最初にやった方法は以下です。 もともとは 受注検索(営業担当者)Fで、担当者を選び、検索をかけると、受注案件のレコード一覧が表示される、というのを使っていました。 検索したい担当者のところは、コンボボックスで担当者一覧が出て選べるようにしてあります。 そして、私が行った方法は 検索結果のレコードソースにしているクエリの営業担当者抽出条件には、 [Forms]![受注検索(営業担当)F]![営業担当者]  工事担当者の抽出条件に一行ずらして、 [Forms]![受注検索(営業担当)F]![工事担当者]  結果は、抽出条件上段の営業担当者のレコードのみが抽出されました。 VBA、SQLを勉強してみます。

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.2

下記のSQLでどうですか (担当者テーブルを作成してコードで検索するほうがいいと思いますよ。 漢字のミスとかスペースの有無とかを吸収できるので) --- SELECT * FROM 受注T WHERE 営業担当者 = "山田太郎" OR 工事担当者 = "山田太郎";

yuayua-tt
質問者

補足

ありがとうございます。 知識の少ない私が最初にやった方法は以下です。 もともとは 受注検索(営業担当者)Fで、担当者を選び、検索をかけると、受注案件のレコード一覧が表示される、というのを使っていました。 検索したい担当者のところは、コンボボックスで担当者一覧が出て選べるようにしてあります。 そして、私が行った方法は 検索結果のレコードソースにしているクエリの営業担当者抽出条件には、 [Forms]![受注検索(営業担当)F]![営業担当者]  工事担当者の抽出条件に一行ずらして、 [Forms]![受注検索(営業担当)F]![工事担当者]  結果は、抽出条件上段の営業担当者のレコードのみが抽出されました。 SQLを理解していません。 SQLを勉強してみます。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

フィルタを使うのなら =(([営業担当者]=Me.[抽出氏名]) Or ([工事担当者]=Me.[抽出氏名])) パラメータクエリなら 営業担当者 Like Nz([フォーム名].[抽出氏名],"*") 工事担当者 Like Nz([フォーム名].[抽出氏名],"*") と上記のように条件の行をずらして設定する

yuayua-tt
質問者

補足

ありがとうございます。 知識の少ない私が最初にやった方法は以下です。 もともとは 受注検索(営業担当者)Fで、担当者を選び、検索をかけると、受注案件のレコード一覧が表示される、というのを使っていました。 検索したい担当者のところは、コンボボックスで担当者一覧が出て選べるようにしてあります。 そして、私が行った方法は 検索結果のレコードソースにしているクエリの営業担当者抽出条件には、 [Forms]![受注検索(営業担当)F]![営業担当者]  工事担当者の抽出条件に一行ずらして、 [Forms]![受注検索(営業担当)F]![工事担当者]  結果は、抽出条件上段の営業担当者のレコードのみが抽出されました。 アドバイスいただきましたので Like Nz([フォーム名].[抽出氏名],"*") をもとに Like Nz[Forms]![受注検索(営業担当)F]![営業担当者],"*")  Like Nz[Forms]![受注検索(営業担当)F]![工事担当者],"*") ←一段ずらし 結果は、抽出条件上段の営業担当者のレコードのみが抽出されました。 どこが間違っているのでしょうか? また、フィルターは、検索結果のレコードソースになるクエリのプロパティーのフィルターのとことで設定しるのでしょうか? 知識が無さ過ぎてすみません。

関連するQ&A

専門家に質問してみよう