none
VBAを使用して、ACCESSのレポートをExcelにそっくりそのまま出力したい RRS feed

  • 質問

  • お世話になります。
    ACCESS2010を使用しています。
    Microsoftコミュニティから誘導いただき、質問させていただきます。

    【概要】
    既にあるACCESSのレポートプレビューの罫線・値などそのままに、Excelに出力する機能を追加したいです。

    【前提事項】
    既存機能として、ACCESSのフォームから複数の条件を指定してボタンを押すと、結果のレポートプレビューを表示してくれます。
    それを手動でPDFにしています。

    レポートは4種類くらいを組合せてSQLや改ページを駆使して作り出しているようです。
    プレビューのリボンからExcel出力をすると思うようなレイアウトで出力されませんでした。
    (罫線が出ない・レポート上でsumなどの関数を使って算出している項目は出力されない・固定文言は出力されない)
    ワードで出力すると、罫線は出ないものの、ACCESSのレポートの表示に近い感じで出ました。
    (これを流用できれば少ないステップ数で機能を追加可能なように思います。)

    【質問】
    VBAを使ってプレビュー通りのレポートをExcelに出力する機能を作るには、どうするのが一番効率的かお知恵を拝借いたしたく。

    考えられる案として、以下のVBAでの実行です。
    1. プレビューをワードに出力して、Excelに全量貼り付け。罫線・改ページ・位置の細かい部分を設定
    2. プレビューを直接コピーし、Excelに全量貼り付け。罫線・改ページ・位置の細かい部分を設定
    3. ExcelでACCESSレポートと同様のフォーマットのテンプレートを作成。
    それぞれのセルに一つずつクエリの値を設定。

    access側のレポート出力内部構造を意識しないで良いのは1・2ですが、
    技術的に無理なら3かなと思っております。
    また、このような場合のおすすめの方法などあれば教えていただけると、大変助かります。

    宜しくお願いいたします


    2017年2月6日 2:22

回答

  • 基本的に簡単な方法は無いため、以下のようなことが考えられると思います。

    1.Excelでデータシートとフォーマットシートを分ける。データシートは単にAccessからクエリで流し込むだけ。そのデータシートのデータに従ってフォーマットシートに流し込む。

    2.Excelでデータシート、テンプレートシート、フォーマットシートに分ける。データシートは単にAccessからクエリで流し込むだけ。そのデータシートのデータに従ってテンプレートシートに流し込み、1ページずつフォーマットシートとして保存していく感じ。つまり、10ページならシートが10個新規に追加されることになる。

    3.Accessからフォーマットも含めてExcelを操作し、シートを作っていく。シートを作る方法としては、1シートに単に流し込んでいくか、テンプレートを元に1ページずつ生成していくかの二通りが考えられる。後者の方が、改ページがきっちり制御でき、見た目も美しくしやすい。ただし、生成されたシートが編集の前提であれば、前者が無難だと思われる。このことは、上記の1.と2.の違いにも同じことが言える。

    (追記)
    必要があれば、データシートを最後に削除する。またデータシートは1つとは限りません。フォーマットシートに必要な値を得るために、いくつかのワーク的なシートを用意することがあります。そういえば、Excel 2007になって、非表示のシートをコピーすると非表示のままになるという変更がありました。それまでは非表示のシートをコピーすると表示されるようになっていました。非表示になるとシートが読めなくなるので、VBAコードの修正が必要になりました。今後、このようなことはないように思いますが、ご参考までに載せておきます。

    (追記2)
    >3. ExcelでACCESSレポートと同様のフォーマットのテンプレートを作成。
    それぞれのセルに一つずつクエリの値を設定。

    現実的にはこれが良さそうな気がしないでもないです。このパターンで1ページ1シートでシートが増えていくパターンでしょうか。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/


    2017年2月6日 3:19
    モデレータ

すべての返信

  • 基本的に簡単な方法は無いため、以下のようなことが考えられると思います。

    1.Excelでデータシートとフォーマットシートを分ける。データシートは単にAccessからクエリで流し込むだけ。そのデータシートのデータに従ってフォーマットシートに流し込む。

    2.Excelでデータシート、テンプレートシート、フォーマットシートに分ける。データシートは単にAccessからクエリで流し込むだけ。そのデータシートのデータに従ってテンプレートシートに流し込み、1ページずつフォーマットシートとして保存していく感じ。つまり、10ページならシートが10個新規に追加されることになる。

    3.Accessからフォーマットも含めてExcelを操作し、シートを作っていく。シートを作る方法としては、1シートに単に流し込んでいくか、テンプレートを元に1ページずつ生成していくかの二通りが考えられる。後者の方が、改ページがきっちり制御でき、見た目も美しくしやすい。ただし、生成されたシートが編集の前提であれば、前者が無難だと思われる。このことは、上記の1.と2.の違いにも同じことが言える。

    (追記)
    必要があれば、データシートを最後に削除する。またデータシートは1つとは限りません。フォーマットシートに必要な値を得るために、いくつかのワーク的なシートを用意することがあります。そういえば、Excel 2007になって、非表示のシートをコピーすると非表示のままになるという変更がありました。それまでは非表示のシートをコピーすると表示されるようになっていました。非表示になるとシートが読めなくなるので、VBAコードの修正が必要になりました。今後、このようなことはないように思いますが、ご参考までに載せておきます。

    (追記2)
    >3. ExcelでACCESSレポートと同様のフォーマットのテンプレートを作成。
    それぞれのセルに一つずつクエリの値を設定。

    現実的にはこれが良さそうな気がしないでもないです。このパターンで1ページ1シートでシートが増えていくパターンでしょうか。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/


    2017年2月6日 3:19
    モデレータ
  • ありがとうございます。

    大変参考になりました。やはり、Excelのフォーマットは作りこむ必要があるのですね。

    簡単な方法はないとのことわかりました。

    改ページ制御・文字数による改行制御がありますので、

    1つ1つレポートを作りこんでいく形にしようと思います。

    2017年2月7日 1:47