リレーショナル データ (関連データが別のテーブルに格納されている) を使用する場合は、多くの場合、複数のテーブルの情報を表示するか、同じレポートに対してクエリを実行する必要があります。 たとえば、顧客データを表示する一方で、顧客の注文に関する情報も同時に表示する必要があります。 サブレポートは、顧客情報を含むレポートの注文情報を論理的かつ読みやすい方法で表示できるため、これを行うための Access の便利なツールです。 Access には、サブレポートをすばやく作成するのに役立つさまざまな方法が用意されています。
目的に合ったトピックをクリックしてください。
サブレポートを理解する
サブレポートは、別のレポートに挿入されるレポートです。 レポートを組み合わせる場合、その 1 つをメイン レポートとして、その中に他のレポートを含める必要があります。 メイン レポートは、連結または非連結のいずれかです。 連結レポートは、データを表示できるレポートで、[レコード ソース] プロパティで指定されたテーブル、クエリ、または SQL ステートメントで構成されます。 非連結レポートは、テーブル、クエリ、または SQL ステートメントに基づかないレポートです (つまり、レポートの [レコード ソース] プロパティは空です)。
関連のない 2 つのサブレポートを含む非連結メイン レポートの例
非連結メイン レポートは、それ自体のデータを表示することはできませんが、関連のないサブレポートを組み合わせるためのメイン レポートとして機能することができます。
1. 非連結メイン レポートには 2 つのサブレポートが含まれます。
2. 一方のサブレポートでは、売上高が従業員別にまとめられています。
3. もう一方のサブレポートでは、売上高がカテゴリ別にまとめられています。
同じレコード ソースに連結されたメイン レポートとサブレポートの例
メイン レポートを使用して詳細レコード (1 年間のすべての売上など) を表示し、サブレポートを使用してサマリー情報 (四半期ごとの売上合計など) を表示することができます。
1. サブレポートでは、年間売上高が四半期ごとにまとめられています。
2. メイン レポートでは、毎日の売上高が一覧表示されています。
関連するレコード ソースに連結されたメイン レポートとサブレポートの例
メイン レポートには、1 つ以上のサブレポートに共通するデータを含めることができます。 この例では、サブレポートに、メイン レポートのデータに関連するデータが含まれています。
1. メイン レポートには、各展示会の名前と都市が一覧表示されています。
2. サブレポートには、各展示会に出席する担当者が一覧表示されています。
レポートのサブフォーム
メイン レポートには、サブレポートだけでなくサブフォームを含めることもでき、必要な数のサブフォームとサブレポートを含めることができます。 さらに、メイン レポートには、最大 7 レベルのサブフォームおよびサブレポートを含めることができます。 たとえば、レポートに 1 つのサブレポートを含め、そのレポートにサブフォームまたはサブレポートを含めるというように、最大 7 レベルの深さまで入れ子にすることができます。
サブフォームをレポートに追加して、レポート ビューでレポートを開くと、そのサブフォームを使用して、レコードをフィルター処理したり、レコード間を移動したりすることができます。 この状況で一部のイベントが無効になっていても、フォームに関連付けられた Visual Basic for Applications (VBA) コードと埋め込みマクロおよびそのコントロールは引き続き実行されます。 レポートのサブフォームを使用してレコードを追加、編集、または削除することはできません。
レポートをサブフォームまたはサブレポートにリンクする
メイン レポート内のデータに関連する情報を含むサブフォームまたはサブレポートを挿入する場合、サブレポート コントロールをメイン レポートにリンクする必要があります。 リンクにより、サブフォームまたはサブレポートで表示されるレコードは、メイン レポートに出力されるレコードに正しく対応付けられます。
ウィザードを使用するか、オブジェクトをナビゲーション ウィンドウからレポートにドラッグして、サブフォームまたはサブレポートを作成すると、次のいずれかの条件を満たす場合、Access はそのサブフォームまたはサブレポートをメイン レポートに自動的にリンクします。
-
選択したテーブルのリレーションシップ、または選択したクエリに基づくテーブルのリレーションシップが定義されている場合。
-
メイン レポートが、主キーが設定されたテーブルに基づいており、サブフォームまたはサブレポートが、その主キーと同じ名前を持つフィールドを含み、同一または互換性のあるデータ型を持っているテーブルに基づいている場合。 たとえば、メイン レポートのテーブルの主キーがオートナンバー型フィールドで、その [フィールドサイズ] プロパティが [長整数型] に設定されている場合、サブフォームまたはサブレポートのテーブルの対応するフィールドは、数値型フィールドで、[フィールドサイズ] プロパティを [長整数型] に設定する必要があります。 サブフォームまたはサブレポートのレコード ソースとして 1 つまたは複数のクエリを選択する場合、それらのクエリ内の基になるテーブルは同じ条件を満たす必要があります。
サブレポートを作成する
サブレポートをメイン レポートにリンクする場合、基になるレコード ソースが関連付けられていることを確認した後、次の手順を実行します。
サブレポート ウィザードを使用してサブレポートを作成する
この手順では、サブレポートを追加するレポートが既に作成されていることを前提とします。 レポートの作成に関する詳細については、「単純なレポートを作成する」または「グループ化レポートまたはサマリー レポートを作成する」の記事を参照してください。
-
ナビゲーション ウィンドウで、サブレポートを追加するレポートを右クリックし、[デザイン ビュー] をクリックします。
-
[デザイン] タブの [コントロール] グループで、右下隅にある下矢印をクリックしてコントロール ギャラリーを開きます。
-
表示されたメニューで、[コントロール ウィザードの使用] が選択されていることを確認します。
-
コントロール ギャラリーをもう一度開いて、[サブフォーム/サブレポート] をクリックします。
-
レポートで、サブレポートを配置する場所をクリックします。
-
[セキュリティに関する通知] ダイアログ ボックスが表示されたら、[開く] をクリックしてウィザードを開始します。
-
サブレポート ウィザードの最初のページで、新しいサブフォームまたはサブレポートをテーブルまたはクエリに基づいて作成する場合は、[既存のテーブルまたはクエリを使用する] をクリックします。 サブレポートとして使用する必要のあるレポートまたはフォームが既にある場合、[既存のレポートまたはフォームから作成する] をクリックし、一覧でレポートまたはフォームを選択した後、[次へ] をクリックします。
注: データベース内に他のレポートまたはフォームがない場合、一覧は空白で、[既存のレポートまたはフォームから作成する] オプションは使用できません。
-
ウィザードの前のページで [既存のレポートまたはフォームから作成する] を選択した場合は、この手順をスキップして、手順 9 に直接進みます。 それ以外の場合は、[テーブル/クエリ] の一覧から、サブレポートに含めるフィールドを含むテーブルまたはクエリを選択し、[選択可能なフィールド] の一覧で目的のフィールドをダブルクリックしてサブレポートに追加します。
サブレポートをメイン レポートにリンクする場合は、リンクを表示しない場合でも、リンクの作成に使用するフィールドを必ず含めます。 通常、リンク フィールドは ID フィールドです。 上の図では、Orders テーブルがサブレポートのレコード ソースであり、Customers テーブルはメイン レポートのレコード ソースです。 Orders テーブルは Customer ID フィールドによって Customers テーブルに関連付けられているため、そのフィールドは [選択したフィールド ] リストに追加されます。
注: サブレポートには、複数のテーブルやクエリのフィールドを含めることができます。 1 つのテーブルからフィールドを追加し終えたら、次のテーブルまたはクエリを [テーブル/クエリ] の一覧から選択し、目的のフィールドを追加します。
[次へ] をクリックして続行します。
-
ウィザードのこのページでは、サブレポートをメイン レポートにリンクする方法を決定します。 Access で、サブレポートをメイン レポートにリンクするのに適しているフィールドが検出されると、ウィザードに選択可能なリンク候補の一覧が表示されます。
状況に最も適していると思われるリンク候補を選択するか、サブレポートをメインレポートにリンクしない場合は、[なし] を選択します。 サブレポートをメイン レポートにリンクするが、適切な候補がない場合は、[自分で定義する] をクリックします。
注: リンクに適したフィールドが見つからなければ、ウィザードで、リンク候補の一覧は表示されず、[独自に設定する] オプションが自動的に選択されます。
[独自に設定する] オプションが選択されると、ウィザードで、一覧の 2 つのセットが表示されます。
-
[フォーム/レポートのフィールド] では、メイン レポートをサブフォームまたはサブレポートにリンクするために使用する 1 つ以上のフィールドをメイン レポートから選択します。 最大 3 つのフィールドを選択できますが、選択した各フィールドは、サブフォームまたはサブレポートのデータ ソース内にある関連フィールドと一致している必要があります。
-
[サブフォーム/サブレポートのフィールド] では、選択したメイン レポートのフィールドにリンクするサブフォームまたはサブレポートの対応する 1 つ以上のフィールドを選択します。
-
サブフォームまたはサブレポートをメイン レポートにリンクされていない状態のままにするには、すべての一覧を空にしておきます。
[次へ] をクリックして続行します。
-
-
ウィザードの最後のページでは、サブフォームまたはサブレポートの名前を入力するか、[完了] をクリックして既定値を受け入れます。
Access は、サブレポート コントロールをレポートに追加し、次のように連結します (つまり、コントロールの [ソース オブジェクト] プロパティを設定します)。
-
ウィザードの最初のページで [既存のレポートまたはフォームから作成する] を選択した場合、Access は、指定されたレポートまたはフォームにサブレポート コントロールを連結します。
-
ウィザードの最初のページで [既存のテーブルまたはクエリを使用する] を選択した場合、Access は、ナビゲーション ウィンドウで新しいレポート オブジェクトを作成し、そのオブジェクトにサブレポート コントロールを連結します。 新しいレポート オブジェクトの名前は、ウィザードの最後のページで入力した名前と同じです。
テーブル、クエリ、フォーム、またはレポートをサブレポートとしてレポートに追加する
サブレポートをレポートにすばやく追加するには、レイアウト ビューまたはデザイン ビューでメイン レポートを開いて、オブジェクトをナビゲーション ウィンドウからメイン レポートにドラッグします。 サブレポートをメイン レポートにリンクする必要がある場合は、基になるレコード ソースが関連付けられており、サブフォームまたはサブレポートをメイン レポートにリンクするために使用するフィールドがそのレコード ソースに含まれていることを確認します。
-
ナビゲーション ウィンドウで、メイン レポートとして使用するレポートを右クリックし、ショートカット メニューで [レイアウト ビュー] または [デザイン ビュー] をクリックします。
-
テーブル、クエリ、フォーム、または別のレポートをナビゲーション ウィンドウから、メイン レポートでサブレポートを表示する位置にドラッグします。
Access は、次のいずれかを実行します。
-
Access は、2 つのオブジェクトをリンクする方法を決定できる場合、サブレポート コントロールをレポートに追加します。 フォームまたはレポートが追加された場合、Access は、そのオブジェクトにサブレポート コントロールを連結します。 テーブルまたはクエリが追加された場合、Access は最初にレポート オブジェクトを作成し、その新しいオブジェクトにサブレポート コントロールを連結します。
-
Access が 2 つのオブジェクトをリンクする方法を決定できない場合、サブレポート ウィザードが表示されます。 続行するには、「サブレポート ウィザードを使用してサブレポートを作成する」のセクションの手順 9 から実行します。
ウィザードを完了すると、Access はサブレポートをレポートに追加します。
次の手順を実行して、サブフォームまたはサブレポートがメイン レポートに正しくリンクされていることをもう一度確認します。
-
サブレポート コントロールをクリックして選択します。
-
プロパティ シートがまだ表示されていない場合は、F4 キーを押して表示します。
-
プロパティ シートの [データ] タブで、[リンク親フィールド] プロパティと [リンク子フィールド] プロパティを調べます。
-
サブフォームまたはサブレポートがリンクされていない場合、これらのプロパティは両方とも空白です。
-
サブフォームまたはサブレポートがリンクされている場合、[リンク親フィールド] プロパティと [リンク子フィールド] プロパティには、2 つのオブジェクトを関連付ける 1 つ以上のフィールドがすべて表示されます。 たとえば、メイン レポートが [従業員] テーブルの情報を表示し、サブフォームまたはサブレポートが [注文] テーブルの情報を表示する場合、[リンク親フィールド] プロパティには、[従業員] テーブルの [ID] フィールドが表示され、[リンク子フィールド] プロパティには、[注文] テーブルの [従業員 ID] フィールドが表示されます。
-
サブフォームまたはサブレポートが正常に機能するためには、これらのプロパティを編集する必要がある場合があります。 次の手順を使用します。
-
プロパティ シートの [データ] タブで、[リンク親フィールド] プロパティ ボックスをクリックし、[ビルド] ボタン をクリックします。
[サブレポート フィールド リンク ビルダー] ダイアログ ボックスが表示されます。
-
[親フィールド] の一覧と [子フィールド] の一覧で、レポートをリンクするフィールドを選択します。 使用するフィールドが不明な場合は、[推奨] をクリックすると、Access によって、リンクするフィールドが決定されます。 完了したら、[OK] をクリックします。
レポートをリンクするために使用しようとしているフィールドが表示されない場合は、メイン レポートのレコード ソース、あるいはサブフォームまたはサブレポートのレコード ソースを、リンクするフィールドが含まれるように編集する必要があります。 たとえば、レポートがクエリに基づく場合、リンクするフィールドがクエリ結果に存在していることを確認する必要があります。
-
メイン レポートを保存し、レポート ビューに切り替えて、レポートが予想どおりに動作することを確認します。
テーブルまたはクエリをデータシートとしてレポートに追加する
データシートは、スプレッドシートと同様、データの視覚的な表現にすぎません。 データシートの各列は、ソース テーブルまたはクエリのフィールドを表し、各行はレコードを表します。 サブフォーム コントロールまたはサブレポート コントロールを使用すると、データシートをレポートに表示することができます。 これは、データをコンパクトに表示する必要はあるが、フォーム オブジェクトまたはレポート オブジェクトの書式設定機能は不要な場合に役立ちます。 データシートをレポートに追加するには、次の手順を実行します。
-
ナビゲーション ウィンドウで、メイン レポートとして使用するレポートを右クリックし、ショートカット メニューで [デザイン ビュー] をクリックします。
-
[デザイン] タブの [コントロール] グループで、右下隅にある下矢印をクリックしてコントロール ギャラリーを開きます。
-
表示されたメニューで、[コントロール ウィザードの使用] が選択されていないことを確認します。
-
コントロール ギャラリーをもう一度開いて、[サブフォーム/サブレポート] をクリックします。
-
レポートで、サブレポートを配置する場所をクリックします。
-
サブレポート ウィザードが起動したら、[キャンセル] をクリックして閉じます。
-
プロパティ シートがまだ表示されていない場合は、F4 キーを押して表示します。
-
レポートで、新しいサブレポート コントロールをクリックして選択します。
-
プロパティ シートの [データ] タブで、[ソース オブジェクト] プロパティ ボックスで矢印をクリックし、サブレポート コントロールに表示するテーブルまたはクエリをクリックします。 たとえば、[注文] テーブルを表示するには、[テーブル.注文] をクリックします。
Access は、データベースで定義されたリレーションシップに基づいて、データシートをリンクしようとします。
-
プロパティ シートの [データ] タブで、[リンク親フィールド] プロパティと [リンク子フィールド] プロパティを調べます。
-
データシートがリンクされていない場合、これらのプロパティは両方とも空白です。
-
データシートがリンクされている場合、[リンク親フィールド] プロパティと [リンク子フィールド] プロパティには、メイン レポートをデータシートに関連付ける 1 つ以上のフィールドが表示されます。 たとえば、メイン レポートが [従業員] テーブルの情報を表示し、データシートが [注文] テーブルの情報を表示する場合、[リンク親フィールド] プロパティには、[従業員] テーブルの [ID] フィールドが表示され、[リンク子フィールド] プロパティには、[注文] テーブルの [従業員 ID] フィールドが表示されます。
-
場合によっては、リンク フィールドのプロパティを自分で設定する必要があります。 その場合は、次の手順を実行します。
-
プロパティ シートの [データ] タブで、[リンク親フィールド] プロパティ ボックスをクリックし、[ビルド] ボタン をクリックします。
-
[セキュリティに関する通知] ダイアログ ボックスが表示されたら、[開く] をクリックします。
[サブレポート フィールド リンク ビルダー] ダイアログ ボックスが表示されます。
-
[親フィールド] の一覧と [子フィールド] の一覧で、メイン レポートをデータシートにリンクするために使用するフィールドを選択します。 使用するフィールドが不明な場合は、[推奨] をクリックすると、Access によって、リンクするフィールドが決定されます。 完了したら、[OK] をクリックします。
リンクに使用しようとしているフィールドが表示されない場合は、マスター レポートまたはデータシートのレコード ソースを、リンクするフィールドが含まれるように編集する必要があります。 たとえば、データシートがクエリに基づく場合、リンクするフィールドがクエリ結果に存在していることを確認する必要があります。
-
メイン レポートを保存し、レポート ビューに切り替えて、レポートが予想どおりに動作することを確認します。
サブレポートのデザインを変更する
サブレポートをレポートに追加した後、サブレポートのデザインを変更したり、メイン レポートでサブレポートのデータを参照したりすることが必要になる場合があります。 次のセクションでは、これらのタスクを実行する方法についてヒントを提供します。
デザイン ビューの新しいウィンドウでサブフォームまたはサブレポートを開く
デザイン ビューでメイン レポートの操作中にサブフォームまたはサブレポートのデザインを変更するには、サブフォームまたはサブレポートを専用のウィンドウで開くことができます。
-
サブフォームまたはサブレポートをクリックして選択します。
-
[デザイン] タブの [ツール] グループで、[新しいウィンドウでサブレポートを開く] をクリックします。
注: サブフォーム コントロールまたはサブレポート コントロールがテーブルまたはクエリに連結されている場合、このコマンドを使用することはできません。
サブレポートの合計をメイン レポートに表示する
[配送料の合計] という名前のテキスト ボックスを含む Orders サブレポートという名前のサブレポートを使用し、そのテキスト ボックスで [配送料] 列の合計を計算するとします。 メイン レポートにサブレポートの合計を表示するには、メイン レポートにテキスト ボックスを追加し、式を使用してサブレポートの [配送料合計] テキスト ボックスを参照する必要があります。 その場合は、次の手順を実行します。
-
ナビゲーション ウィンドウでメイン レポートを右クリックし、ショートカット メニューで [デザイン ビュー] をクリックします。
-
[デザイン] タブの [コントロール] グループで [テキスト ボックス] をクリックします。
-
メイン レポートで、新しいテキスト ボックスを配置する場所をクリックします。
-
プロパティ シートがまだ表示されていない場合は、F4 キーを押して表示します。
-
プロパティ シートの [データ] タブで、[コントロール ソース] プロパティ ボックスに次の式を入力します。
=IIf(IsError([注文サブレポート].[レポート]![合計運送料]),0,[注文サブレポート].[レポート]![合計運送料])
注:
-
この例では、より複雑な式 =[注文サブレポート].[レポート]![合計運送料] を使用することはできますが、サブレポートにデータが含まれていない場合、メイン レポートのコントロールには #Error が表示されます。 最初の式で示すように、IIf 関数内で IsError 関数を使用すると、サブレポートでデータが返されない場合は必ず、メイン レポートのテキスト ボックスにゼロ (0) が表示されます。
-
式ビルダーを使用して式を作成するには、[コントロール ソース] プロパティ ボックスで [ビルド] ボタン をクリックします。
-
-
プロパティ シートの [書式] タブで、[書式] プロパティを適切な値 (この場合は [通貨]) に設定します。
-
レポートを保存し、レポート ビューに切り替えて、計算が予想どおりに実行されることを確認します。