• ベストアンサー

アクセス 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/17068)
回答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% (7418/18948)
回答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

  • ファイルメーカー フィールド全検索

    ファイルメーカーPro5(Win)を使用している初心者です。 ------------------------------- 店名,従業員1,従業員2,従業員3 ------------------------------- 例えば山田太郎さんを検索しようとする場合、従業員1に入っているのか、2に入っているのか、3に入っているのかがわからないため、それぞれのフィールドで何度も検索をかけなければなりません。 希望としては1回の検索で、全てのフィールドの検索が出来ればと思っています。 初心者のため、こんな質問の仕方しかできませんが、どうぞ宜しくお願いします。

  • SQL Server2008 Express の文字列検索について

    SQL Server2008 Express の文字列検索について 検索対象のフィールド内にスペースが入っている場合に  スペースを無視して検索をすることができるでしょうか? 例 検索文字列 山田太郎 検索対象 山田 太郎 or 山田太郎 上記2つのフィールド値を含むレコードが両方表示されるような方法はありますでしょうか。

  • フィールドを結合して検索

    お世話になります。 データベースには、「name1」「name2」と 2つのフィールドに姓名が分かれて入っています。 検索で、「山田太郎」と入力されたとき、 「name1」「name2」を結合した列で抽出したいのですが どのようにSQLを書けばいいのでしょうか? よろしくお願いします。

  • あいまい検索したいのですが・・・

    あいまい検索したいのですが・・・ VBAで構文を勉強しました。 テキスト0に入力された文字を「基本フォーム」の「名前」の欄から検索して、 該当するレコードのフォームを開くというものだと思うのですが、 下記の構文になると思います。 DoCmd.OpenForm "基本フォーム", , , "[名前]='" & Me!テキスト0 & "'" ただ、これだとテキスト0にそのものずばりを入力しないと検索できないので、 もう少し曖昧にしたいのです。 例えばでは「山田太郎」とフルネームで入力しないと該当しないと思うのですが、 「山田」とか「太郎」とかあるいは「山」とか入力すると該当レコードが出るようにしたいのですが。 どうぞよろしくお願いいたします。

  • Access クエリ フィールドごとに合計をしたい

    クエリで、フィールドごとに合計する事は、できますでしょうか? 担当 / 作業1 / 作業2 / 作業3 / 太郎 /    3 /    5 /   5 /   花子 /    9 /    8 /   6 / 合計 /    12 /    13 /    13/ という感じで、一番下が合計(レコード(?))という体裁にしたいのです。 よろしくお願いします。

  • Accessの一意性制約について教えてください

    Microsoft Access2010を使い始めた者です。 名前の格納を、姓フィールドと名フィールドに分けてしていますが、 ”山田”と”太郎”の両方が一致するレコードがあった場合は 登録しないように一意性制約をかけたいと思っています。 アクセスではどのように設定したらよいでしょうか? Googleで検索をかけましたらわかりませんでした。 よろしくお願いします。

  • クエリ作成でどちらのフィールドが正解ですか

    Access初心者です。 Access2010の学習をしています。 主キーと外部キーで関連付けられた フィールドをクエリで抽出する場合、 デザイングリッドにドラッグするフィールドは、 どちらのフィールドを選べばよいのでしょうか? ---- 「T担当者マスタ」と「T得意先マスタ」をもとに 「Q得意先マスタ」を作成したい場合です・・・ 「T担当者マスタ」のフィールド 担当者コード(主キー) 担当者名 「T得意先マスタ」のフィールド 得意先コード(主キー) 得意先名 フリガナ 〒 住所 TEL 担当者コード(外部キー) 担当者名 デザイングリッドにドラッグするフィールド 得意先コード 得意先名 フリガナ 〒 住所 TEL 担当者コード(※主キーのフィールドを選ぶのは不正解ですか?) 担当者名 ----- 担当者コードは元となるテーブルの両方に存在する わけですが、どんな理由でどちらを選ぶのか 理解できません。 テキストの問題なのに情けないです・・ ご教授ください。

  • 得意先への年賀状 複数の肩書きを持つ方へは?

    会社から得意先へ年賀状を送るのですが、兼任されていて複数の肩書きを持つ方へ出す場合、宛名はどのように書けばいいのでしょうか? (例) 理事 ○○営業所 副営業所長 工事担当部長    山田 太郎 取締役常務執行役員 営業開発本部長    山田 次郎 悩んでいます。。。どうか教えてください。    

  • ACCESSのテーブルでこういう表示は可能でしょうか?

    お願いします 下記のように名前・電話番号・年齢フィールドあるテーブルがあり同一の番号が存在した場合には年齢が一番上の人が代表者となりそれ以外の人は同一のレコードの家族フィールドに表示させたいと思います。 そのようなクエリを組むことは可能でしょうか? 名前 電話番号             年齢 ==================================================== 山田太郎 00-0000-0000  50 山田花子 00-0000-0000  45 山田一郎 00-0000-0000  20 田中次郎 11-1111-1111  55 ↓ 代表者 電話番号            家族1  家族2 ==================================================== 山田太郎 00-0000-0000  山田花子 山田一郎 田中次郎 11-1111-1111 以上よろしく願いします。

  • ACCESSの複数フィールドの検索

    私がしたい事はおそらくかなり初歩的なことと類推されますので、がっくりされないようにお願いします。 「報告書」のテーブルがあります。 その報告書のフィールドは 報告日 報告者氏名 A店の感想 B店の感想 C店の感想 となっていると考えてください。 このテーブルをもとに、表形式で一覧の出るフォームを作っており、この一覧のフォームフッターにテキストボックスがあります。 このテキストボックスに例えば「D商品」と入力してエンターを押すと「A店の感想 B店の感想 C店の感想」中に「D商品」が出てくるレコードすべてが抽出されるというようにしたいと思っています。 1つのフィールドでのやり方がとあるサイトにあったので、私は Private Sub テキスト28_AfterUpdate() Me.Filter = "A店の感想 like'*" & Me!テキスト28 & "*'" Me.FilterOn = True End Sub という式を作成しました。 これだと「A店の感想」フィールドにキーワードがあればヒットしますが、B店、C店にキーワードがあってもA店にキーワードが無ければ反応はありません。 これを3つのフィールドで出来るようにいくつか試してみましたがどれも失敗でした。 どのようにすれば、複数フィールドのキーワード検索・抽出が出来るのでしょうか。 私の取ったやり方に近いもの、別の全然違うやり方、ともに勉強になるので色々教えてください。 それと、これでも結構検索したのですが、検索ワードが不適切なのか、ありそうなニーズにも関わらずぴったりくるものを見つけられませんでした。 もしよければACCESSをわかりやすく学習出来るサイトを教えてください。有名そうなところをいくつかは知っております。

専門家に質問してみよう