ACCESSでアンケートを集計しています。
顧客名簿テーブルとアンケートテーブルがあり、
2つのテーブルは顧客IDで関連しています。
各テーブルを簡略化すると以下の通りです。
<顧客名簿テーブルのフィールド>
顧客ID(オートナンバー型)、名前(テキスト型)、住所(テキスト型)
<アンケートテーブルのフィールド>
アンケートID(オートナンバー型)、顧客ID(数値型)、回答1(数値型)、回答2(テキスト型)、回答3(メモ型)
顧客名簿テーブルとアンケートテーブルを顧客IDでつなげたクエリを作成し、
検索フォームでアンケートの内容で検索しています。
検索で絞り込んだ顧客を、レポートを作って
リスト印刷したり宛名印刷したりしたいのですが、
アンケートに数回答えてる人は何回も出てきてしまいます。
これを一人1回だけ出てくるようにしたいのですが、
どうしたらよいのでしょうか?
クエリをグループ化しようとしましたが、
メモ型フィールドがあるとダメみたいです。
ACCESS97を使用し、Windows98~XP Proで動かしています。
初心者ですので細かく教えていただければ幸いです。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
まず、アンケートテーブルからメモ型の回答3を除いた
アンケートID(オートナンバー型)、顧客ID(数値型)、回答1(数値型)、回答2(テキスト型)
だけのクエリーを作成しこのクエリーに対してグルーピングや選択を行う。
(ただしこの時点で回答1及び2に対して同じ人が違う回答を出している場合はグループ化されず複数出てきてしまいます。この場合はアンケートテーブルの顧客IDとアンケートIDだけのクエリーを作成し、グループ化しアンケートIDで最小(一番最初に答えた物)或いは最大(一番最後に答えた物)の物を選ぶようにしてみるといいかもしれません)
その後で、できたクエリーに対して顧客名簿テーブルとアンケートテーブルの回答3を結合させて見てください。
このクエリーからさらに絞り込んだり、レポートに渡したりしてみてください。
この回答への補足
ご回答ありがとうございます。
keikanさんの方法だと、確かに顧客は重複しなくなります。
ただし、アンケート内容は最小(一番最初に答えた物)か最大(一番最後に答えた物)の内容しか
フィルタの対象にならないです。
全てのアンケートが対照になる方法はないでしょうか?
「例えば検索結果でテーブルを作る」でも良いのですが。
欲張ってしまってすみません!よろしくお願いします!
No.7
- 回答日時:
レポートのクエリーの検索条件にフォーム上の値を渡してあげてください。
=forms![検索フォーム]![感想]
(たぶん非連結の項目になってると思いますが)
これで、検索フォーク上にある感想コントロール(テキストボックス等)の値と同じ物を拾ってくるようになります。
またはマクロが使えるならば
DoCmd.OpenReport stDocName, acPreview, , sqlstrとして、
sqlstrに検索条件を付加すると元のレポートに対して絞り込みを行って実行できます。
なんだか理解できなくなってきました^^;;
とりあえず、今まで皆さんからいただいた回答を試して見ます!
試してみてダメだったら今度は別の観点から質問を考えてスレを立てます!
ご協力誠にありがとうございました!!m(*u_u*)m
No.6
- 回答日時:
#2です。
クエリーでグループ化等をするとその結果に対して選択を行うので、意図的にまず選択してからグループ化してください。
クエリーを1度で行わず必要に応じていくつかに分けてください。
まずはじめにテーブルを結合して、条件にあった物だけ選択するクエリーを作成する。
そしてそのクエリーを元にグルーピングして重複を省くクエリーを作成する。
このクエリーを元にレポートを作成してください。
この回答への補足
たびたび回答ありがとうございます!
で、また質問しちゃってもいいでしょうか…^^;;
段階を踏んでクエリを作っていくのはわかりましたが、検索フォームに入力された検索条件を段階的にクエリに適用していく方法がわかりません。
今は先述の通り、検索条件を印刷レポートに全部渡して検索フォームでフィルタをかけて条件に合致したものだけ印刷しているんです。
これだといくらクエリをわけようとしても、印刷する段階で全フィールドが必要になってしまうんです。
しつこいようですけど、もしお分かりになりましたらまたお付き合いくださいm(*u_u*)m
No.5
- 回答日時:
>keikanさんの#2の通り、顧客IDをグループ化してアンケートIDを最大か最小にする(アンケートを最初の回答か最後の回答1つにしちゃう)と、「おいしくない」で検索したときにAさんが印刷に出てこなくなっちゃうんです。
ここまで出来ているのであれば、「回答」をグループ化し、○か×でフィルター(SQLであればWhere)を掛けるだけのことだと。
この回答への補足
回答ありがとうございます。
#4であげた例では回答は○、×しかありませんが、質問にあるように回答はそれだけではなくメモ型もあるんです。なので単純にはグループ化できないんです。
#6の補足に続く>>
No.4
- 回答日時:
#2です
>検索で絞り込んだ顧客を、レポートを作って
>リスト印刷したり宛名印刷したりしたいのですが、
>アンケートに数回答えてる人は何回も出てきてしまいます。
>これを一人1回だけ出てくるようにしたいのですが、
>どうしたらよいのでしょうか?
何がしたいのでしょうか?^^;;
この答えが先ほどの#2何ですが・・・・・
もしかすると、
名前AさんがアンケートにX回答えたとしたときのレポートとして
名前Aさんに対して
アンケート1
アンケート2
アンケート3
・
・
・
アンケートX
名前Bさん
アンケート1
アンケート2
みたいな感じにしたいんでしょうか?^^
このような物であれば
まずアンケートテーブルから帳票形式のレポート(子レポートとします)をふつうに作成します。もちろんこのレポートは全部のレコードが出てきます。
次に、顧客名簿テーブルからレポートを作成し(親レポートとします)このレポートにサブレポートとして先のアンケートテーブルのレポート(子レポート)を入れてください。
そして顧客IDで親レポートと子レポートリンクさせます。
これで、親レポートを開くとその顧客に対応したアンケートの一覧が表示されるはずです。
この回答への補足
いえいえ、そうではないんです。
例えば、らーめんに対するアンケートがあるとします。
名前:住所:食べたらーめん:感想
Aさん:東京都:醤油ラーメン:○おいしかった
Bさん:埼玉県:味噌らーめん:○おいしかった
Aさん:東京都:味噌らーめん:×おいしくない
Cさん:栃木県:醤油らーめん:×おいしくない
Aさん:東京都:豚骨らーめん:○おいしかった
だとして、これをおいしかった人だけ検索して次のように印刷したいのです。
Aさん:東京都
Bさん:埼玉県
それが、私がつくったものでやると、
Aさん:東京都
Aさん:東京都
Bさん:埼玉県
Aさんがおいしいと2回答えているので2回でてきてしまうんです。
で、keikanさんの#2の通り、顧客IDをグループ化してアンケートIDを最大か最小にする(アンケートを最初の回答か最後の回答1つにしちゃう)と、「おいしくない」で検索したときにAさんが印刷に出てこなくなっちゃうんです。
なのでkeikanさんの#2の回答では希望の機能ができないんです。
私の作り方がまづいだけなのでkeikanさんにはレスをいただいただけで感謝はしてるんですが…。
No.3
- 回答日時:
#1です
端的に行ってしまえば、検索フォームとレポートのそれぞれのレコードソースの定義が異なるので、それぞれを独立したクエリーとして定義することをお勧めします。
フィルタの定義をそのまま流用したいということだと思いますが、
グルーピングを行ないたいクエリーにこれを適用するのは難しいと思います。
フィルタの内容にも依り、ノウハウ⇒マクロ、VBAなどが必要になるかと思います。
というか、私の場合は、厄介そうな内容は、VBAに走っちゃいますけど(笑)
度々ありがとうございます。
グループ化とかで解決しないなら・・・と思い、
VBAの本やネットの情報を拝見して、フィルタで抽出した顧客の顧客IDを全部読んでレポートに渡せば顧客テーブルだけでイケる!…なんて考えたりもしましたが、時間がないし、技術もないので(面倒なので?)諦めました…。
よくありそうな事例だと思うんですけど、実現は結構難しいんですねー。
No.1
- 回答日時:
検索フォームの定義をどうしているのかわからないんですが、
<検索で絞り込んだ顧客>ということは、これを実施するのと同様のクエリー(クエリーAととりあえず名づけておきます)を作成できるということですよね。
ということは、クエリーAに対して、宛名に必要な情報のみを選択してグループ化するクエリーBを作成すればよいと思うのですが・・・。
クエリーBには回答とかはいらないでしょうから。
この回答への補足
回答ありがとうございます。補足させてください。
検索から印刷までの流れですが、
検索フォームでクエリA(顧客名簿とアンケートテーブルをくっつけただけ)にフィルタをかけて条件にあったアンケート内容とその顧客名をフォームに表示します。
これを印刷する際は、宛名印刷レポートがクエリAを読み込み、検索フォームのフィルタを受け継いで再度絞込みをかけているんです。
この作り方だと宛名印刷レポートに渡すクエリから回答内容を削ることができないのです。
せっかくご回答いただいたのですが、私の作り方がわるくて申し訳ありません。
きっとこのフィルタを渡して印刷するのが間違いなんだとは思うのですが、別の方法が思いつきません…。
「普通はどのようにして検索結果を印刷してるのか?」という質問になってしまうかもしれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- その他(データベース) accessについて 2 2022/05/31 16:58
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Java リレーションエンティティクラスとは何ですか? 2 2023/02/10 00:02
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データベースの1要素に複数デー...
-
Access IF文でテーブルに存在し...
-
ACCESS2003 Aアクロバットを介...
-
Access2000 単票フォーム上の...
-
ADOでレコードを閉じるタイミン...
-
ACCESS2002で作る水商売用顧客...
-
ACCESS 顧客データ 購入履歴...
-
テーブル1 2 3 の結合
-
Access クロス集計クエリについて
-
Accessデータベースで行と列を...
-
Access 重複レコード抽出し削除
-
ワードで保存するファイル名の...
-
ワードでの単純作業の効率化に...
-
Accessで名寄せグループの関係...
-
Accessフォームからのデータ登...
-
Access VBAでクエリーのレコー...
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
-
Oracle 2つのDate型の値の差を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access VBAでクエリーのレコー...
-
Access IF文でテーブルに存在し...
-
データベースの1要素に複数デー...
-
ワードでの単純作業の効率化に...
-
Access フォームのデータがテー...
-
ACCESS で マクロの中でフィ...
-
Accessデータベースで行と列を...
-
ワードで保存するファイル名の...
-
別のDBからテーブルをコピーす...
-
ADOでレコードを閉じるタイミン...
-
Accessで名寄せグループの関係...
-
シングルクォーテーションとダ...
-
Access 縦(行)のデータを横(列)...
-
Access クエリ このレコードセ...
-
顧客IDを入力すると顧客名や住...
-
(ACCESS)連番取得について
-
Access2000 単票フォーム上の...
-
Access 既に開いているフォー...
-
文字化け、記号の含まれるフィ...
-
Access2013VBA 複数のテーブル...
おすすめ情報