- ベストアンサー
MS-Access2000 一対多のリレーションシップを含むレポートの作成方法
Accessは初心者なのに、 会社であるDBを作るように言われてしまいました。 その中で以下のようなレポートを作りたいと考えています。 - 実施ID 実施日 団体名 担当業者・・ 1 1/1 A あ 2 2/2 B い う 3 3/3 C え 4 4/4 D い - のように、一度の実施に対して複数の担当業者がいる場合に、 2番目以降の担当業者名が一行下に出てくるようにしたいです。 もとになるテーブルは以下の3つ。 - [実施table] 実施ID 実施日 団体名 ・・ 1 1/1 A 2 2/2 B 3 3/3 C 4 4/4 D [担当業者リンクtable] 実施ID 担当業者 1 あ 2 い 2 う 3 え 4 い [業者情報table] 業者名 住所 電話番号・・・ あ 北区 1234-5678 い 南区 2345-6789 う 西区 3456-7890 え 東区 4567-8901 それらのリレーションは (1)実施tableの実施ID (一側)- (多側)担当業者リンクtableの実施ID (2)業者情報tableの業者名(一側)-(多側)担当業者リンクtableの担当業者 となっています。 レポート作成ウィザードを利用して、必要なフィールドを含んだ レポートを作成すると、以下のようなレポートが作成されてしまいます。 - 実施ID 実施日 団体名 担当業者・・・ 1 1/1 A あ 2 2/2 B い 2 2/2 B う 3 3/3 C え 4 4/4 D い - 個人的にDBのレポートとしては これで十分だと思うのですが 「文書の書式」にこだわる上司が納得しなくて(^^; よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
実施ID が同じ場合に 実施日 団体名を消せす方法ですが、 実施ID については omusupa(No.2)さんの通りで、 実施日と団体名は vbaで消してあげます。 詳細の”プロパティ”の ”イベント” を [イベント プロシージャ] にします。 すると、その枠の右側に ▼ボタン と ...ボタン が表示されます。 その ...ボタン を押します。 VBAのコードが書き込める画面になります。 次のように表示されると思います。 Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer) End Sub その間の行へ 次の通り 入力します。(コピペ可) If Me.実施ID.IsVisible = False Then Me.実施日.Visible = False Me.団体名.Visible = False Else Me.実施日.Visible = True Me.団体名.Visible = True End If 入力後、下記のように出来上がっていればOKです。 Private Sub 詳細_Print(Cancel As Integer, PrintCount As Integer) If Me.実施ID.IsVisible = False Then Me.実施日.Visible = False Me.団体名.Visible = False Else Me.実施日.Visible = True Me.団体名.Visible = True End If End Sub
その他の回答 (3)
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 まず、[実施table]をソースにレポートを作成します。 そして、適当な場所にツールボックスから「サブレポート」を選択して貼り付けます。 そのサブレポートを ソースを[担当業者リンクtable]と[業者情報table]を関連付けたクエリにし、リンクフィールドをそれぞれ[実施ID]にします。 サブレポートは各レコードの中にさらに表が載る形になります。 あとは、体裁を適当に工夫して下さい。
- omusupa
- ベストアンサー率61% (115/186)
レポートをデザインビューにして たぶん今は ページヘッター ------------------------------------ 実施ID 実施日 団体名 担当者名 ------------------------------------ 詳細 ------------------------------------ 実施ID 実施日 団体名 担当者名 になっているのだと思います。 そこで、詳細の「実施ID」の上で右クリック→「プロパティ」を選びます。 そして、「書式」タブの「重複データ非表示」を「はい」にします。 あとは、「実施日」「団体名」も同じ要領で「重複データを非表示」を「はい」 にしてください。 ちなみに「重複データを非表示」というのは、 「データが前のレコードと同じ場合に表示をするかしないかを指示する」 と言うプロパティーです。参考になれば。
補足
回答ありがとうございます。 NO.1の補足に書きましたとおり、同日に複数箇所で実施する場合や 1つの団体が複数回実施する場合があるため、 実施ID 実施日 団体名 担当業者・・・ 1 1/1 A あ 2 2/2 B い 2 2/2 B う 3 3/3 C え 4 4/4 D い 5 4/4 A あ 6 4/5 A あ というケースの場合、 「重複データを非表示」プロパティを非表示にすると レポートは 実施ID 実施日 団体名 担当業者・・・ 1 1/1 A あ 2 2/2 B い <空欄> <空欄> <空欄> う 3 3/3 C え 4 4/4 D い 5 <空欄> A あ 6 4/5 <空欄> <空欄> となり、意図しない箇所にも空欄ができてしまいました。 質問時点で、説明が不足してしまい申し訳ありません。 今回のケースではうまく使えませんでしたが、 データベースによっては、 このプロパティは使えそうですね(^^) お忙しいところ、ありがとうございました。
- love_junkie28
- ベストアンサー率23% (71/302)
こんにちは。 「実施日」でグループ化するということですよね? レポートのデザインビュー画面で右クリックし、「並べ替え・グループ化」をクリックします。 そこで上半分の「実施日」をクリックして選択した状態で、 下半分の「グループプロパティ」で「グループヘッダー」と「グループフッター」を ともに「はい」にします。 これで実施日のグループ化がされるはずです。
補足
迅速な回答ありがとうございます。 説明が不足しておりました。申し訳ありません。 同日に2箇所ないし3箇所で実施する場合があります。 また、1つの団体が複数回実施する場合があります。 よって、日付だけを グループ化してみましたが、うまくいかないみたいです。 この回答を参考にして、実施IDでグループ化し、 グループヘッダを 「はい」とし、 そのヘッダ内に実施IDを表示するようにしたところ 担当業者が複数存在する、実施ID=2の部分が 以下のようになりました。 --- 2 (※実施ID。グループヘッダ内に表示) 2/2 B い (※日付 団体名 業者名の順で表示) 2/2 B う --- やはり、同じ日付・団体名が表示されてしまいます。 そこで、業者名以外のフィールド(実施ID・日付・団体名)を 実施IDのグループヘッダに入れてみたところ、 -- 2 2/2 B (※実施IDグループヘッダ内) い (※「詳細」内) う (※「詳細」内) -- と表示されるようになりました。 私としては、ほぼ理想形なのですが・・・上司に見せたら、 「何で業者名だけ改行されてるんだ。揃えろ」と・・・(しくしく)
お礼
レスが遅くなり申し訳ありません。 この方法でなんとか思い通りのレポートを作ることができました。 また、初心者にもわかりやすい説明で感謝しております。 ありがとうございました。