- ベストアンサー
Accessで名寄せグループの関係人を抽出する方法
- Accessを使って名寄せグループの関係人を抽出する方法について教えてください。
- 具体的には、8人の顧客データがあり、名前と顧客コード、名寄コードがあります。特定の条件で抽出された顧客を含む名寄せグループの他の顧客を抽出したいです。
- 初心者なので、分かりやすい方法とデザインビューでの説明をお願いします。
- みんなの回答 (16)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#1です。 「クエリ1」で選択された顧客の「名寄せコード」を網羅した別クエリが必要です。 1.クエリを新規作成します。 2.「クエリ1」を追加します、 3.Accessウインドのメニューバーにある「表示」をクリックして、 サブメニューの「集計」をクリックします。 4.「名寄せコード」を下表に展開します。イメージは以下です。 フィールド 名寄せコード テーブル クエリ1 集計 グループ化 並べ替え 表示 V 抽出条件 または 5.「クエリ3」と名前をつけて保存して閉じます。 ここで「クエリ2」を修正する手順を書いても良いのですが、 かえって混乱しますので、「クエリ2」を削除したうえで、 新たに作り直すことにします。 1.クエリを新規作成します。 2.「顧客データ」と「クエリ1」と「クエリ3」を追加します、 3.「顧客データ」の「店番」フィールドを 「クエリ1」の「店番」フィールド上にドラッグして、 双方の「店番」フィールドが線で結ばれるようにします。 4.同じように、「顧客データ」の「顧客コード」フィールドを 「クエリ1」の「顧客コード」フィールド上にドラッグして、 双方の「顧客コード」フィールドが線で結ばれるようにします。 5.「店番」同士を結んだ線の中央あたりをダブルクリックして、 「結合プロパティ」ダイアログの「2」をクリックして●を付け 「OK」をクリックします。 結ばれた線が、 「顧客データ」の「店番」から「クエリ1」の「店番」への矢印に変化します。 7.同じように、「顧客コード」同士を結んだ線の中央あたりをダブルクリックして、 「結合プロパティ」ダイアログの「2」をクリックして●を付け 「OK」をクリックします。 結ばれた線が、 「顧客データ」の「顧客コード」から「クエリ1」の「顧客コード」への矢印に変化します。 8.「顧客データ」から、すべてのフィールドを、下のフィールドリストへ展開します。 9。「クエリ1」から、「店番」フィールドと「顧客コード」フィールドを、 下のフィールドリストへ展開します。 10.「クエリ1」の「店番」「顧客コード」の各「抽出条件」セルに「Is Null」と入力します。 フィールド 店番 顧客コード テーブル クエリ1 クエリ1 並べ替え 表示 抽出条件 Is Null Is Null または ※「表示」セルのチェックは外してもかまいません。単に抽出用なので。。。 ここまでの設定で、「クエリ1」に入っていないすべての顧客が抽出されています。 当然、「クエリ1」に全く関係のない世帯の顧客も含まれています。 11.「顧客データ」の「名寄せコード」フィールドを 「クエリ3」(!!!「クエリ1」ではありません!!!)の 「名寄せコード」フィールド上にドラッグして、 双方の「名寄せコード」フィールドが線で結ばれるようにします。 この設定で、「クエリ1」と同じ「名寄せコード」を持つ顧客に絞り込まれます。 12.さらに絞り込みたい項目の設定を行います(年収500万以上など)。 13.名前をつけて保存します 私の実験用データではうまくいきました。
その他の回答 (15)
#1です。 最後の忠告として訊いてください。 「クエリ1」と「クエリ2」を合体し、1つのクエリですまそうとするのは、 「 不 ・ 可 ・ 能 」です。 UNIONクエリの説明にそれらしきことが書いてあったのでしょうが、 意味を全く取り違えています。 質問者さんがやろうとしていることの、うまい例えを一日中考えていました。 結果、思いついたのが、 二つの鏡を「合わせ鏡」で使って、自分の後ろ姿を見ていて、 「自分の前にある鏡に、後ろの鏡が映っているだけじないか」と 鏡を一つだけにして、後ろを振り向けば、自分の後ろ姿が見えるだろうろと勘違いしている。 という例えです。 あとは、ご随意に...
お礼
お返事ありがとうございます。 なるほど、何となく分かるような気がします。 実際、ダミーでやってみましたが、少し変な動きがあったので、ミラーでループしてしまうような感じでしょうかね? いずれにしても、本番データでは利用するつもりはありません。 いろいろとご丁寧なアドバイスに、本当に感謝しております。 ありごとうございました。 また、機会がありましたら宜しくお願いいたします。
#1です、 > 「クエリ1」と「クエリ2」を合体することって、Accessでも可能なのでしょうか? AccessでもExcelでも「論理的」に無理です。 もし、可能なら最初から提示しています。 合体という意味が「ひとつのアクションで」なら、フォームとVBAを使うことで可能となります。 また「クエリ1」と「クエリ3」を合体することはできます。 でも合体してしまうと、「クエリ1」の結果を見ることができなくなり、結局また分離して使うようになるのががオチです。 何でもそうですが、何かひとつに決め打ちしてしまうと、えてして別の側面で齟齬が生じるものです。 フレキシビリティーを残しておくのもシステム構築のコツといえます。
お礼
いろいろとアドバイスありがとうございます。 合体については、他の検索では、SQLで「UNION ALL」を使用すると出来そうなので、挑戦してみたいと思います。 いずれにせよ、これからもいろいろ勉強していきたい思います。 この度は、本当にありがとうございました。
#1です。 お役に立てたようで、何よりです。 私がもっと速くポカに気がついていれば、 もうすこし早く解決したと思います。 なお、この「Is Null」を使った手法は、 結構使いますので、覚えておかれると 何かと便利です。
お礼
ご丁寧にありがとうございます。 本当に感謝しております。 早速、仕事に役立ておりますが、また難題が出てきそうです・・・。 その時は、申し訳ありませんが宜しくお願いいたします。 ちなみに、「クエリ1」と「クエリ2」を合体することって、Accessでも可能なのでしょうか? Excelで行っても良いのですが、折角Accessを覚えたので出来ないものかと思いまして・・・。
#1です。 原因がわかりました。私の根本的なポカです。 クエリ1で同一の「名寄せコード」の顧客が複数選択されていると この現象が起きます。 従って、個人コードが異なることを利用しての選別は意味がなかったのです。 急遽考え直します。 ゴメンナサイ。
#1です。 「式1:」が復活してしまうのは、 フィールド [顧客データ]![店番] & [顧客データ]![顧客コード] テーブル 並べ替え 表示 □ 抽出条件 <>[クエリ1]![店番] & [クエリ1]![顧客コード] または の「表示」にチェックが入っているからでしょう。 「クエリ1」側にも「店番」と「顧客コード」はありますよね? まあ、無ければエラーになるでしょうから... あと考えられるのは、 ・「抽出条件」セルの頭に「<>」をつけていない。 ・「フィールド」セルと「抽出条件」セルのテーブル名に同じものを設定しているとか。 「フィールド」セル側のテーブル名は「[顧客データ]![店番]」「[顧客データ]![顧客コード]」 「抽出条件」セル側のテーブル名は「[クエリ1]![店番]」「[クエリ1]![顧客コード]」 です。 「思いこみ」って案外気づきにくいものですよ。 コピペで設定していると、案外以下のようになっていたりして、 「[クエリ1]![店番]&[顧客データ]![顧客コード]」 質問者さんのせいにするつもりはありませんが、こういうものは 十中八九、どこかに記入ミスがあるのだと思います。
お礼
何度も本当にありがとうございます。 当方も何回も点検のうえ実行しておりますが、原因がわかりません。 別のダミーを作成してみても、同じような結果となります。 そこで少し分かったのが、 顧客データの家族が2人で、その内「クエリ1」で1人抽出されている場合は、他の1人のみが抽出されています。 しかし、3人家族で2人が抽出されている場合は、どうやら抽出されている2人毎に他の2人を抽出されているようです。 例えば、 父、母、長男で、父、母が「クエリ1」で抽出された場合、 「クエリ2」では、父、母、長男の3人が抽出されてしまいます。 (父の他の人→母、長男) (母の他の人=父、長男) の理論になっていると思われます。 これは、やはりどこか設定に問題あるのでしょうか? また、『「式1:」が復活してしまうのは、「表示」にチェックが入っているからでしょう。』は、 当方のAccessでは、「表示」のチェックをはずしても復活してしまいます。 Accessに問題があるのでしょうか? よろしくお願いいたします。
#1です。 もしかするとステップ6の設定を間違えているのかも。 また、私の方も「式1:」というフィールド名はいらないようですね。 デザインビューでのイメージは、以下のようになっていればOKです。 フィールド [顧客データ]![店番] & [顧客データ]![顧客コード] テーブル 並べ替え 表示 抽出条件 <>[クエリ1]![店番] & [クエリ1]![顧客コード] または #8では 式1:[顧客データ]![店番] & [顧客データ]![顧客コード] とかきましたが、 実際は「式1:」の部分はいらないようです。 試してみてください。
お礼
早々にありがとうございます。 上記のとおり設定しておりますが、やはり変わりはないですね・・・。 考え方は大変良くわかります。 私も、この設定で良いと思うのですが、うまく結果が展開されません。 なお、私のAccess2003では、 フィールドの[顧客データ]![店番] & [顧客データ]![顧客コード]の「式1:」を削除しても自動で回復してしまい、 「式1:[顧客データ]![店番] & [顧客データ]![顧客コード]」になってしまします。 恐らく抽出条件の設定処理がうまく反映していないと思いますが、原因がわかりません。 何がいけないのか、いろいろ試してみたいと思います。
#1です、 > 名寄せコード - 店番 - 顧客コード > 110001 - 1 - 10002 > 110001 - 1 - 10003 > 110001 - 1 - 10001 > 110001 - 1 - 10003 > 110001 - 1 - 10001 > 110001 - 1 - 10002 > 以上のように重複して抽出されてしまいます。 #8のステップ「6」も設定していますか? #8のステップ5までしか設定せずに見ているなら、当たり前のことです。 ステップ5まででは、「クエリ1」と「名寄せコード」が同じレコードがすべて、しかもダブって抽出されています。 少なくとも第1段階ではこの状態が必要なのです。 この状態で、さらにステップ6を設定して、初めて、「クエリ1」の顧客を除外できるのです。 要するにステップ6では、このダブったものもすべて含まれた状態から、 「店番+顧客コード」が「クエリ1」の「店番+顧客コード」と異なるものだけを抽出すれば、お望みの結果が出ます。 DBシステムの基礎がわかっていないと、なかなかイメージをつかみ難いのですが...
#1です。 実験してみましたが、うまく動くようです。 1.クエリを新規作成します。 2.「顧客データ」と「クエリ1」を追加します、 3.「顧客データ」の「名寄せコード」フィールドを 「クエリ1」の「名寄せコード」フィールド上にドラッグして、 双方の「名寄せコード」フィールドが線で結ばれるようにします。 4.「顧客データ」から、すべてのィールドを、下のフィールドリストへ展開します。 5.フィールドリストのあいている列(つまり展開した最後尾フィールドの右の列)の フィールドセル上で右クリックして「ビルド」を選択。 式1:[顧客データ]![店番] & [顧客データ]![顧客コード] と入力して「OK」をクリック。 6.「式1」の抽出条件セルに <>[クエリ1]![店番] & [クエリ1]![顧客コード] と入力します。 ※ここまでの設定で、 ・「クエリ1」と同じ「名寄せコード」を持ち、 かつ ・「クエリ1」以外の顧客 を抽出する設定になっています。 これ以降の設定は、単なる絞り込みです。お好きな項目でどうぞ。 7.年収で絞り込みたければ「年収」の抽出条件セルに >=500 と入力します。(年収フィールドは100万単位として書いています) 8.名前をつけて保存します。 一応解説すると、 1~4で「クエリ1」と同一の「名寄せコード」のレコードが抽出されます。 当然この状態では「クエリ1」の顧客も含まれています。 5~6で「クエリ1」の顧客を除外するために 「顧客データ」の「店番」+「顧客コード」と、「クエリ1」の「店番」+「顧客コード」が「等しくない」レコードを抽出しています。
お礼
お忙しいところ本当にありがとうございます。 考え方は一致していると思いますので、私もこの設定でいけると思い早速実行してみました。 しかし、私の設定ミスか結果に不具合があります。 具体的には、 同じ「名寄コード」を持つている人が3人います。 「クエリ1」では、3人とも抽出されています。 仮に、「名寄せコード」を110001とします。 3人の「店番」は1、「顧客コード」は、10001、10002、10003とします。 その場合、「クエリ2」の抽出結果が以下のようになってしまいます。 名寄せコード - 店番 - 顧客コード 110001 - 1 - 10002 110001 - 1 - 10003 110001 - 1 - 10001 110001 - 1 - 10003 110001 - 1 - 10001 110001 - 1 - 10002 以上のように重複して抽出されてしまいます。 恐らく、 110001 - 1 - 10001 以外の顧客コードとして、110001 - 1 - 10002、110001 - 1 - 10003 110001 - 1 - 10002 以外の顧客コードとして、110001 - 1 - 10001、110001 - 1 - 10003 110001 - 1 - 10003 以外の顧客コードとして、110001 - 1 - 10001、110001 - 1 - 10002 が抽出されているようです。 お手数をお掛けしますが、どの辺に問題があるのか分かりますでしょうか? どうそ宜しくお願いいたします。
#1です。 > 仮に求めている結果を「クエリ2」とした場合、「クエリ2」からは除外されても結構です。 > つまり「クエリ2」と「クエリ1」の顧客は重複しないと言うことです。 なるほど。了解しました。双方の考え方の整合性がとれたようですね。 ただし、本日は外出しますので、お返事は夕方になってしまいそうです。 悪しからず...
#1です。 質問文では、以下のように言われています。 ---引用---ここから 1)ある条件でA-1,C-2,D-1,D-2が抽出されるクエリ1を作成しました。 (2)次にA-1,C-2,D-1,D-2に関係する名寄せグループの他の顧客コードを抽出したいのですが、この方法が分かりません。 なお、A-2,A-3,C-1,C-3,C-4だけが抽出され、A-1,C-2,D-1,D-2は含まない方法があればBESTです。 ---引用---ここまで にもかかわらず、#5へのコメントで ---引用---ここから 3.「クエリ1」で抽出された人は絶対条件(優先条件)です。(年収に関係なく除外はできません。) 要するに、2のような抽出ができれば結構です。 ---引用---ここまで 矛盾していませんか?
お礼
お返事ありがとうございます。 見捨てられたのかと思い心配していました・・・。 おっしゃる通り、矛盾してますね・・・すいませんでした。 『3.このとき、「クエリ1」で抽出された中に500万以上の人がいても「除外してもかまわない」』に対して、「クエリ1」から除外してしまうのと勘違いしました。 仮に求めている結果を「クエリ2」とした場合、「クエリ2」からは除外されても結構です。 つまり「クエリ2」と「クエリ1」の顧客は重複しないと言うことです。 また、No.5のお礼の事例の場合、 (1)20歳の女性で年収500万以上の人(クエリ1の家族)・・・クエリ2の抽出対象 (2)20歳の女性で年収500万以上の人(クエリ1の家族がいない)・・・クエリ2に抽出されない (3)40歳の男性で年収100万の人(クエリ1の家族)・・・クエリ2に抽出されない(年収500万未満のため) となります。
補足
お礼の補足です。 『(2)20歳の女性で年収500万以上の人(クエリ1の家族がいない)・・・クエリ2に抽出されない』は、 正確には・・・クエリ1にもクエリ2にも抽出されない。
- 1
- 2
お礼
vizzar様 出来ました!!!・・・凄いです!!! 今、凄く感動してます!! 長い期間、本当にありがとうございます。 何とお礼を言ったら良いのか・・・・ 本当に、本当に、感謝しております。 一週間超の間、毎日この事ばかり考えておりました。 最後の方は、少し諦めかけておりましたが、vizzar様のお陰で助かりました。 しかし、本当にAccessって凄いですね!! これからも仕事で使用する事があると思いますが、一生懸命勉強していきたいと思います。 この度は、本当にありがとうございました。