サブレポートを作成して使用する

リレーショナル データ (関連データが別々のテーブルに格納されている場合) を操作する場合、多くの場合、同じレポートで複数のテーブルまたはクエリの情報を表示する必要があります。 たとえば、顧客データを表示し、同時に顧客の注文に関する情報を表示する場合などです。 サブレポートは、論理的で読み取り可能な方法で、注文情報を顧客情報と一緒にレポートに表示できるので、これを行う Access の便利なツールです。 Access には、サブレポートをすばやく作成するためのさまざまな方法があります。

目的に合ったトピックをクリックしてください。

サブレポートを理解する

サブレポートは、別のレポートに挿入されるレポートです。 レポートを組み合わせる場合、その 1 つをメイン レポートとして、その中に他のレポートを含める必要があります。 メイン レポートは、連結または非連結のいずれかです。 連結レポートは、データを表示できるレポートで、[レコード ソース] プロパティで指定されたテーブル、クエリ、または SQL ステートメントで構成されます。 非連結レポートは、テーブル、クエリ、または SQL ステートメントに基づかないレポートです (つまり、レポートの [レコード ソース] プロパティは空です)。

関連のない 2 つのサブレポートを含む非連結メイン レポートの例    

非連結メイン レポートは、それ自体のデータを表示することはできませんが、関連のないサブレポートを組み合わせるためのメイン レポートとして機能することができます。

関連のないデータを表示した 2 つのサブレポートを含む非連結メイン レポート

1. 非連結メイン レポートには 2 つのサブレポートが含まれます。

2. 一方のサブレポートでは、売上高が従業員別にまとめられています。

3. もう一方のサブレポートでは、売上高がカテゴリ別にまとめられています。

同じレコード ソースに連結されたメイン レポートとサブレポートの例    

メイン レポートを使用して詳細レコード (1 年間のすべての売上など) を表示し、サブレポートを使用してサマリー情報 (四半期ごとの売上合計など) を表示することができます。

同じレコード ソースに連結されたメイン レポートとサブレポート

1. サブレポートでは、年間売上高が四半期ごとにまとめられています。

2. メイン レポートでは、毎日の売上高が一覧表示されています。

関連するレコード ソースに連結されたメイン レポートとサブレポートの例    

メイン レポートには、1 つ以上のサブレポートに共通するデータを含めることができます。 この例では、サブレポートに、メイン レポートのデータに関連するデータが含まれています。

関連するデータを表示した 2 つのサブレポートを含むメイン レポート

1. メイン レポートには、各展示会の名前と都市が一覧表示されています。

2. サブレポートには、各展示会に出席する担当者が一覧表示されています。

レポートのサブフォーム

メイン レポートには、サブレポートだけでなくサブフォームを含めることもでき、必要な数のサブフォームとサブレポートを含めることができます。 さらに、メイン レポートには、最大 7 レベルのサブフォームおよびサブレポートを含めることができます。 たとえば、レポートに 1 つのサブレポートを含め、そのレポートにサブフォームまたはサブレポートを含めるというように、最大 7 レベルの深さまで入れ子にすることができます。

サブフォームをレポートに追加して、レポート ビューでレポートを開くと、そのサブフォームを使用して、レコードをフィルター処理したり、レコード間を移動したりすることができます。 この状況で一部のイベントが無効になっていても、フォームに関連付けられた Visual Basic for Applications (VBA) コードと埋め込みマクロおよびそのコントロールは引き続き実行されます。 レポートのサブフォームを使用してレコードを追加、編集、または削除することはできません。

レポートをサブフォームまたはサブレポートにリンクする

メイン レポート内のデータに関連する情報を含むサブフォームまたはサブレポートを挿入する場合、サブレポート コントロールをメイン レポートにリンクする必要があります。 リンクにより、サブフォームまたはサブレポートで表示されるレコードは、メイン レポートに出力されるレコードに正しく対応付けられます。

ウィザードを使用するか、オブジェクトをナビゲーション ウィンドウからレポートにドラッグして、サブフォームまたはサブレポートを作成すると、次のいずれかの条件を満たす場合、Access はそのサブフォームまたはサブレポートをメイン レポートに自動的にリンクします。

  • 選択したテーブルのリレーションシップ、または選択したクエリに基づくテーブルのリレーションシップが定義されている場合。

  • メイン レポートが、主キーが設定されたテーブルに基づいており、サブフォームまたはサブレポートが、その主キーと同じ名前を持つフィールドを含み、同一または互換性のあるデータ型を持っているテーブルに基づいている場合。 たとえば、メイン レポートのテーブルの主キーがオートナンバー型フィールドで、その [フィールドサイズ] プロパティが [長整数型] に設定されている場合、サブフォームまたはサブレポートのテーブルの対応するフィールドは、数値型フィールドで、[フィールドサイズ] プロパティを [長整数型] に設定する必要があります。 サブフォームまたはサブレポートのレコード ソースとして 1 つまたは複数のクエリを選択する場合、それらのクエリ内の基になるテーブルは同じ条件を満たす必要があります。

ページの先頭へ

サブレポートを作成する

サブレポートをメイン レポートにリンクする場合、基になるレコード ソースが関連付けられていることを確認した後、次の手順を実行します。

サブレポート ウィザードを使用してサブレポートを作成する

この手順では、サブレポートを追加するレポートが既に作成されていることを前提とします。 レポートの作成に関する詳細については、「単純なレポートを作成する」または「グループ化レポートまたはサマリー レポートを作成する」の記事を参照してください。

  1. ナビゲーション ウィンドウで、サブレポートを追加するレポートを右クリックし、[デザイン ビュー] をクリックします。

  2. [デザイン] タブの [コントロール] グループで、右下隅にある下矢印をクリックしてコントロール ギャラリーを開きます。

    リボンの画像

  3. 表示されたメニューで、[コントロール ウィザードの使用] が選択されていることを確認します。

  4. コントロール ギャラリーをもう一度開いて、[サブフォーム/サブレポート] をクリックします。

  5. レポートで、サブレポートを配置する場所をクリックします。

  6. [セキュリティに関する通知] ダイアログ ボックスが表示されたら、[開く] をクリックしてウィザードを開始します。

  7. サブレポート ウィザードの最初のページで、新しいサブフォームまたはサブレポートをテーブルまたはクエリに基づいて作成する場合は、[既存のテーブルまたはクエリを使用する] をクリックします。 サブレポートとして使用する必要のあるレポートまたはフォームが既にある場合、[既存のレポートまたはフォームから作成する] をクリックし、一覧でレポートまたはフォームを選択した後、[次へ] をクリックします。

    サブレポート ウィザードでのデータのソースの選択

    注:  データベース内に他のレポートまたはフォームがない場合、一覧は空白で、[既存のレポートまたはフォームから作成する] オプションは使用できません。

  8. ウィザードの前のページで [既存のレポートまたはフォームから作成する] を選択した場合は、この手順をスキップして、手順 9 に直接進みます。 それ以外の場合は、[テーブル/クエリ] の一覧から、サブレポートに含めるフィールドを含むテーブルまたはクエリを選択し、[選択可能なフィールド] の一覧で目的のフィールドをダブルクリックしてサブレポートに追加します。

    サブレポート ウィザードでフィールドを選ぶ

    サブレポートをメイン レポートにリンクする場合は、表示したくない場合でも、リンクの作成に使用するフィールドを必ず含める必要があります。 通常、リンクフィールドは ID フィールドです。 前の図では、Orders テーブルはサブレポートのレコード ソースで、Customers テーブルはメイン レポートのレコード ソースです。 [受注] テーブルは [得意先 ID] フィールドによって [得意先] テーブルに関連付けなので、そのフィールドは [選択したフィールド] リスト に追加 されます。

    注: サブレポートには、複数のテーブルやクエリのフィールドを含めることができます。 1 つのテーブルからフィールドを追加し終えたら、次のテーブルまたはクエリを [テーブル/クエリ] の一覧から選択し、目的のフィールドを追加します。

    [次へ] をクリックして続行します。

  9. ウィザードのこのページでは、サブレポートをメイン レポートにリンクする方法を決定します。 Access で、サブレポートをメイン レポートにリンクするのに適しているフィールドが検出されると、ウィザードに選択可能なリンク候補の一覧が表示されます。

    Access がサブレポート ウィザードでリンクするフィールドを提案する

    状況に最も適したリンク候補を選択するか、サブレポートをメイン レポートにリンクしない場合は、[なし] を選択 します。 サブレポートをメイン レポートにリンクするが、どの候補も適切ではない場合は、[自分で定義] をクリックします

    注: リンクに適したフィールドが見つからなければ、ウィザードで、リンク候補の一覧は表示されず、[独自に設定する] オプションが自動的に選択されます。

    サブレポート ウィザードで独自のリンクを定義する

    [独自に設定する] オプションが選択されると、ウィザードで、一覧の 2 つのセットが表示されます。

    • [フォーム/レポートのフィールド] では、メイン レポートをサブフォームまたはサブレポートにリンクするために使用する 1 つ以上のフィールドをメイン レポートから選択します。 最大 3 つのフィールドを選択できますが、選択した各フィールドは、サブフォームまたはサブレポートのデータ ソース内にある関連フィールドと一致している必要があります。

    • [サブフォーム/サブレポートのフィールド] では、選択したメイン レポートのフィールドにリンクするサブフォームまたはサブレポートの対応する 1 つ以上のフィールドを選択します。

    • サブフォームまたはサブレポートをメイン レポートにリンクされていない状態のままにするには、すべての一覧を空にしておきます。

      [次へ] をクリックして続行します。

  10. ウィザードの最後のページでは、サブフォームまたはサブレポートの名前を入力するか、[完了] をクリックして既定値を受け入れます。

    サブレポート ウィザードでの名前の入力

Access は、サブレポート コントロールをレポートに追加し、次のように連結します (つまり、コントロールの [ソース オブジェクト] プロパティを設定します)。

  • ウィザードの最初のページで [既存のレポートまたはフォームから作成する] を選択した場合、Access は、指定されたレポートまたはフォームにサブレポート コントロールを連結します。

  • ウィザードの最初のページで [既存のテーブルまたはクエリを使用する] を選択した場合、Access は、ナビゲーション ウィンドウで新しいレポート オブジェクトを作成し、そのオブジェクトにサブレポート コントロールを連結します。 新しいレポート オブジェクトの名前は、ウィザードの最後のページで入力した名前と同じです。

テーブル、クエリ、フォーム、またはレポートをサブレポートとしてレポートに追加する

サブレポートをレポートにすばやく追加するには、レイアウト ビューまたはデザイン ビューでメイン レポートを開いて、オブジェクトをナビゲーション ウィンドウからメイン レポートにドラッグします。 サブレポートをメイン レポートにリンクする必要がある場合は、基になるレコード ソースが関連付けられており、サブフォームまたはサブレポートをメイン レポートにリンクするために使用するフィールドがそのレコード ソースに含まれていることを確認します。

  1. ナビゲーション ウィンドウで、メイン レポートとして使用するレポートを右クリックし、ショートカット メニューで [レイアウト ビュー] または [デザイン ビュー] をクリックします。

  2. テーブル、クエリ、フォーム、または別のレポートをナビゲーション ウィンドウから、メイン レポートでサブレポートを表示する位置にドラッグします。

Access は、次のいずれかを実行します。

  • Access は、2 つのオブジェクトをリンクする方法を決定できる場合、サブレポート コントロールをレポートに追加します。 フォームまたはレポートが追加された場合、Access は、そのオブジェクトにサブレポート コントロールを連結します。 テーブルまたはクエリが追加された場合、Access は最初にレポート オブジェクトを作成し、その新しいオブジェクトにサブレポート コントロールを連結します。

  • Access が 2 つのオブジェクトをリンクする方法を決定できない場合、サブレポート ウィザードが表示されます。 続行するには、「サブレポート ウィザードを使用してサブレポートを作成する」のセクションの手順 9 から実行します。

    ウィザードを完了すると、Access はサブレポートをレポートに追加します。

次の手順を実行して、サブフォームまたはサブレポートがメイン レポートに正しくリンクされていることをもう一度確認します。

  1. サブレポート コントロールをクリックして選択します。

  2. プロパティ シートがまだ表示されていない場合は、F4 キーを押して表示します。

  3. プロパティ シートの [データ] タブで、[リンク親フィールド] プロパティと [リンク子フィールド] プロパティを調べます。

    • サブフォームまたはサブレポートがリンクされていない場合、これらのプロパティは両方とも空白です。

    • サブフォームまたはサブレポートがリンクされている場合、[リンク親フィールド] プロパティと [リンク子フィールド] プロパティには、2 つのオブジェクトを関連付ける 1 つ以上のフィールドがすべて表示されます。 たとえば、メイン レポートが [従業員] テーブルの情報を表示し、サブフォームまたはサブレポートが [注文] テーブルの情報を表示する場合、[リンク親フィールド] プロパティには、[従業員] テーブルの [ID] フィールドが表示され、[リンク子フィールド] プロパティには、[注文] テーブルの [従業員 ID] フィールドが表示されます。

サブフォームまたはサブレポートが正常に動作するには、これらのプロパティを編集する必要がある場合があります。 次の手順に従います。

  1. プロパティ シートの [データ] タブで、[リンク親フィールド] プロパティ ボックスをクリックし、[ビルド] ボタン ボタンの画像 をクリックします。

    [サブレポート フィールド リンク ビルダー] ダイアログ ボックスが表示されます。

    [サブレポート フィールド リンク ビルダー] ダイアログ ボックス

  2. [親フィールド] の一覧と [子フィールド] の一覧で、レポートをリンクするフィールドを選択します。 使用するフィールドが不明な場合は、[推奨] をクリックすると、Access によって、リンクするフィールドが決定されます。 完了したら、[OK] をクリックします。

    レポートをリンクするために使用しようとしているフィールドが表示されない場合は、メイン レポートのレコード ソース、あるいはサブフォームまたはサブレポートのレコード ソースを、リンクするフィールドが含まれるように編集する必要があります。 たとえば、レポートがクエリに基づく場合、リンクするフィールドがクエリ結果に存在していることを確認する必要があります。

  3. メイン レポートを保存し、レポート ビューに切り替えて、レポートが予想どおりに動作することを確認します。

テーブルまたはクエリをデータシートとしてレポートに追加する

データシートは、スプレッドシートと同様、データの視覚的な表現にすぎません。 データシートの各列は、ソース テーブルまたはクエリのフィールドを表し、各行はレコードを表します。 サブフォーム コントロールまたはサブレポート コントロールを使用すると、データシートをレポートに表示することができます。 これは、データをコンパクトに表示する必要はあるが、フォーム オブジェクトまたはレポート オブジェクトの書式設定機能は不要な場合に役立ちます。 データシートをレポートに追加するには、次の手順を実行します。

  1. ナビゲーション ウィンドウで、メイン レポートとして使用するレポートを右クリックし、ショートカット メニューで [デザイン ビュー] をクリックします。

  2. [デザイン] タブの [コントロール] グループで、右下隅にある下矢印をクリックしてコントロール ギャラリーを開きます。

    リボンの画像

  3. 表示されたメニューで、[コントロール ウィザードの使用] が選択されていないことを確認します。

  4. コントロール ギャラリーをもう一度開いて、[サブフォーム/サブレポート] をクリックします。

  5. レポートで、サブレポートを配置する場所をクリックします。

  6. サブレポート ウィザードが起動したら、[キャンセル] をクリックして閉じます。

  7. プロパティ シートがまだ表示されていない場合は、F4 キーを押して表示します。

  8. レポートで、新しいサブレポート コントロールをクリックして選択します。

  9. プロパティ シートの [データ] タブで、[ソース オブジェクト] プロパティ ボックスで矢印をクリックし、サブレポート コントロールに表示するテーブルまたはクエリをクリックします。 たとえば、[注文] テーブルを表示するには、[テーブル.注文] をクリックします。

    Access は、データベースで定義されたリレーションシップに基づいて、データシートをリンクしようとします。

  10. プロパティ シートの [データ] タブで、[リンク親フィールド] プロパティと [リンク子フィールド] プロパティを調べます。

    • データシートがリンクされていない場合、これらのプロパティは両方とも空白です。

    • データシートがリンクされている場合、[リンク親フィールド] プロパティと [リンク子フィールド] プロパティには、メイン レポートをデータシートに関連付ける 1 つ以上のフィールドが表示されます。 たとえば、メイン レポートが [従業員] テーブルの情報を表示し、データシートが [注文] テーブルの情報を表示する場合、[リンク親フィールド] プロパティには、[従業員] テーブルの [ID] フィールドが表示され、[リンク子フィールド] プロパティには、[注文] テーブルの [従業員 ID] フィールドが表示されます。

場合によっては、リンク フィールドのプロパティを自分で設定する必要があります。 その場合は、次の手順を実行します。

  1. プロパティ シートの [データ] タブで、[リンク親フィールド] プロパティ ボックスをクリックし、[ビルド] ボタン ボタンの画像 をクリックします。

  2. [セキュリティに関する通知] ダイアログ ボックスが表示されたら、[開く] をクリックします。

    [サブレポート フィールド リンク ビルダー] ダイアログ ボックスが表示されます。

    [サブレポート フィールド リンク ビルダー] ダイアログ ボックス

  3. [親フィールド] の一覧と [子フィールド] の一覧で、メイン レポートをデータシートにリンクするために使用するフィールドを選択します。 使用するフィールドが不明な場合は、[推奨] をクリックすると、Access によって、リンクするフィールドが決定されます。 完了したら、[OK] をクリックします。

    リンクに使用しようとしているフィールドが表示されない場合は、マスター レポートまたはデータシートのレコード ソースを、リンクするフィールドが含まれるように編集する必要があります。 たとえば、データシートがクエリに基づく場合、リンクするフィールドがクエリ結果に存在していることを確認する必要があります。

  4. メイン レポートを保存し、レポート ビューに切り替えて、レポートが予想どおりに動作することを確認します。

ページの先頭へ

サブレポートのデザインを変更する

サブレポートをレポートに追加した後、サブレポートのデザインを変更したり、メイン レポートでサブレポートのデータを参照したりすることが必要になる場合があります。 次のセクションでは、これらのタスクを実行する方法についてヒントを提供します。

デザイン ビューの新しいウィンドウでサブフォームまたはサブレポートを開く

デザイン ビューでメイン レポートの操作中にサブフォームまたはサブレポートのデザインを変更するには、サブフォームまたはサブレポートを専用のウィンドウで開くことができます。

  1. サブフォームまたはサブレポートをクリックして選択します。

  2. [デザイン] タブの [ツール] グループで、[新しいウィンドウでサブレポートを開く] をクリックします。

注: サブフォーム コントロールまたはサブレポート コントロールがテーブルまたはクエリに連結されている場合、このコマンドを使用することはできません。

サブレポートの合計をメイン レポートに表示する

"運送料合計" というテキスト ボックスを含む "注文" サブレポートを使用し、そのテキスト ボックスで [運送料] 列の合計を計算するとします。 メイン レポートにサブレポートの合計を表示するには、メイン レポートにテキスト ボックスを追加し、式を使用してサブレポートの [運送料合計] テキスト ボックスを参照する必要があります。 その場合は、次の手順を実行します。

  1. ナビゲーション ウィンドウでメイン レポートを右クリックし、ショートカット メニューで [デザイン ビュー] をクリックします。

  2. [デザイン] タブの [コントロール] グループで [テキスト ボックス] をクリックします。

  3. メイン レポートで、新しいテキスト ボックスを配置する場所をクリックします。

  4. プロパティ シートがまだ表示されていない場合は、F4 キーを押して表示します。

  5. プロパティ シートの [データ] タブで、[コントロール ソース] プロパティ ボックスに次の式を入力します。

    =IIf(IsError([注文サブレポート].[レポート]![合計運送料]),0,[注文サブレポート].[レポート]![合計運送料])

    注: 

    • この例では、より複雑な式 =[注文サブレポート].[レポート]![合計運送料] を使用することはできますが、サブレポートにデータが含まれていない場合、メイン レポートのコントロールには #Error が表示されます。 最初の式で示すように、IIf 関数内で IsError 関数を使用すると、サブレポートでデータが返されない場合は必ず、メイン レポートのテキスト ボックスにゼロ (0) が表示されます。

    • 式ビルダーを使用して式を作成するには、[コントロール ソース] プロパティ ボックスで [ビルド] ボタン ボタンの画像 をクリックします。

  6. プロパティ シートの [書式] タブで、[書式] プロパティを適切な値 (この場合は [通貨]) に設定します。

  7. レポートを保存し、レポート ビューに切り替えて、計算が予想どおりに実行されることを確認します。

ページの先頭へ

ヘルプを表示

Office のスキルを磨く
トレーニングの探索
新機能を最初に入手
Office Insider に参加する

この情報は役に立ちましたか?

ご意見をいただきありがとうございます。

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×