• ベストアンサー

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のレポートとしては これで十分だと思うのですが 「文書の書式」にこだわる上司が納得しなくて(^^; よろしくお願いいたします。

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

  • ベストアンサー
  • ryuu001
  • ベストアンサー率61% (46/75)
回答No.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

angel-dust
質問者

お礼

レスが遅くなり申し訳ありません。 この方法でなんとか思い通りのレポートを作ることができました。 また、初心者にもわかりやすい説明で感謝しております。 ありがとうございました。

その他の回答 (3)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。maruru01です。 まず、[実施table]をソースにレポートを作成します。 そして、適当な場所にツールボックスから「サブレポート」を選択して貼り付けます。 そのサブレポートを ソースを[担当業者リンクtable]と[業者情報table]を関連付けたクエリにし、リンクフィールドをそれぞれ[実施ID]にします。 サブレポートは各レコードの中にさらに表が載る形になります。 あとは、体裁を適当に工夫して下さい。

  • omusupa
  • ベストアンサー率61% (115/186)
回答No.2

レポートをデザインビューにして たぶん今は ページヘッター ------------------------------------ 実施ID 実施日 団体名 担当者名 ------------------------------------ 詳細 ------------------------------------ 実施ID 実施日 団体名 担当者名 になっているのだと思います。 そこで、詳細の「実施ID」の上で右クリック→「プロパティ」を選びます。 そして、「書式」タブの「重複データ非表示」を「はい」にします。 あとは、「実施日」「団体名」も同じ要領で「重複データを非表示」を「はい」 にしてください。 ちなみに「重複データを非表示」というのは、 「データが前のレコードと同じ場合に表示をするかしないかを指示する」 と言うプロパティーです。参考になれば。

angel-dust
質問者

補足

回答ありがとうございます。 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   <空欄>  <空欄> となり、意図しない箇所にも空欄ができてしまいました。 質問時点で、説明が不足してしまい申し訳ありません。 今回のケースではうまく使えませんでしたが、 データベースによっては、 このプロパティは使えそうですね(^^) お忙しいところ、ありがとうございました。

回答No.1

こんにちは。 「実施日」でグループ化するということですよね? レポートのデザインビュー画面で右クリックし、「並べ替え・グループ化」をクリックします。 そこで上半分の「実施日」をクリックして選択した状態で、 下半分の「グループプロパティ」で「グループヘッダー」と「グループフッター」を ともに「はい」にします。 これで実施日のグループ化がされるはずです。

angel-dust
質問者

補足

迅速な回答ありがとうございます。 説明が不足しておりました。申し訳ありません。 同日に2箇所ないし3箇所で実施する場合があります。 また、1つの団体が複数回実施する場合があります。 よって、日付だけを グループ化してみましたが、うまくいかないみたいです。 この回答を参考にして、実施IDでグループ化し、 グループヘッダを 「はい」とし、 そのヘッダ内に実施IDを表示するようにしたところ 担当業者が複数存在する、実施ID=2の部分が 以下のようになりました。 --- 2       (※実施ID。グループヘッダ内に表示)   2/2  B     い (※日付 団体名 業者名の順で表示)   2/2  B     う --- やはり、同じ日付・団体名が表示されてしまいます。 そこで、業者名以外のフィールド(実施ID・日付・団体名)を 実施IDのグループヘッダに入れてみたところ、 -- 2  2/2  B        (※実施IDグループヘッダ内)            い     (※「詳細」内)            う     (※「詳細」内) -- と表示されるようになりました。 私としては、ほぼ理想形なのですが・・・上司に見せたら、 「何で業者名だけ改行されてるんだ。揃えろ」と・・・(しくしく)

関連するQ&A