• 締切済み

アクセスのレポートでこんなことできないでしょうか?

いろんなページを探したんですが答えが見つからずに困っています。 Access2000のレポートで下のようなレポートを出力したいのですが、どうしたらいいか分かりません。 出力例 __________________________ ジャンル|洋画・邦画| タイトル |出演者・・・   ←タイトル行 ____|_____|______|________     |     |荒野の七人 |○○○○・・・  ←以下明細行     | 洋画  |______|________     |     |黄色いリボン|○○○○・・・ 時代劇 |_____|______|________     |     |七人の侍  |○○○○・・・     | 邦画  |______|________     |     |羅生門   |○○○○・・・ ____|_____|______|________ (↑票が崩れていたらごめんなさい) という具合に、ジャンルと洋画・邦画の行は、エクセルのセルの結合+レイアウト中央にしたような票を出力したいのです。(できればジャンルは縦表示で) 探しても見つからないし、各明細を詳細セクションで出力するレポートの仕様では無理なのかなと半分諦めているのですが、何方かご存知の方が居たら是非ともご教授お願いします。m(__)m

みんなの回答

  • Te-Sho
  • ベストアンサー率52% (247/472)
回答No.4

まだ締め切られていないので解答します。 この見出しを上位置にと言うことでしたら比較的簡単に出来ます。 見出しまではそのままページヘッダに作ります。 ジャンルと洋画・邦画の項目のテキストボックスの境界線は無しで作ります。また、プロパティの繰り返し時の表示を無しにします。 表の左側の線と洋画・邦画の区切りの線は縦に線を引いておきます。 タイトルや出演者移行の明細項目のテキストボックスには境界線を付けます。 並べ替え/グループ化の設定でジャンルと洋画・邦画で並べ替えるように指定しグループフッタを表示するようにします。 ジャンルのグループフッタにジャンルと洋画・邦画部分の区切り線、洋画・邦画のグループフッタに洋画・邦画部分の区切り線を置いておけばブレイク時に横線が引かれるようになります。 このコントロールでしたら改ページも対応出来ると思います。 レイアウト中央は明細が偶数の場合、不可能となりますね。奇数でしたら算出して出力とか出来ますが。

  • TMINET
  • ベストアンサー率32% (45/140)
回答No.3

試したわけではありませんがサブレポートを使用して出来そうです。 今回のケースですと、2段階になっていますから、サブレポートの中にさらにサブといった感じでしょうか。

noname#102878
noname#102878
回答No.2

#1です。 AccessからExcelに書き込む方法です。 AccessのVBEで[ツール]-[参照設定]を開いて「Microsoft Excel 9.0 Object Library」にチェックを入れます。 かなり見づらいと思いますが、標準モジュールに以下のようなコードを書き込んでください。 AccessのVBAでExcelを起動してコントロールします。 Sub Test() Dim appXL As Excel.Application Dim wbkOut As Excel.Workbook Dim shtOut As Excel.Worksheet Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim i As Long Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.OpenRecordset "クエリー名またはSQL文またはテーブル名", cn Set appXL = New Excel.Application appXL.Visible = True Set wbkOut = appLX.Workbooks.Add Set shtOut = wbkOut.Worksheets(1) With shtOut .Cells(1,1).Value = "ジャンル" .Cells(1,2).Value = "洋画・邦画" .Cells(1,3).Value = "タイトル" .Cells(1,4).Value = "出演者" End With i = 2 Do Until rs.EOF = True With shtOut .Cells(i,1).Value = rs.Fields("ジャンル").Value .Cells(i,2).Value = rs.Fields("洋画・邦画").Value .Cells(i,3).Value = rs.Fields("タイトル").Value .Cells(i,4).Value = rs.Fields("出演者").Value End With i = i + 1 rs.MoveNext Loop rs.Close Set rs = Nothing cn.Close Set cn = Nothing Set shtOut = Nothing Set wbkOut = Nothing Set appXL = Nothing End Sub とまぁ、こんな感じですが、よく見ればこのコードはグループ化を行っていません。 Do~Loopの中で値を書いているわけですが、1行ずつ書いていきながら1行前に書き込んだ値と比べて「同じ値なら書き込まない」「違う値なら書き込む」とするか、とりあえず全部書き込んで最後に消しこみを行うか、好きな方法でどうぞ。 相手はExcelですのでセルの連結なんかも出来ますしね。

kenta02
質問者

補足

temtecomaiさん、どうもありがとうございます。(VBAコードまで書いて頂いて恐縮です) 可能であればアクセスのレポートで実現したかったんですが、エクセルオブジェクトを使用したVBAが出てくるということは、はやりアクセスでは不可能ということでしょうか。 No.1で回答頂いたのと同じように、前レコードと同じ内容なら表示しないという方法で形だけはなんとか出るようになったんですが、どうしてもグループの1行目または最後の行にだけ表示させるやりかただと見栄えが悪く、できるならそのグループが2行あるならその中間位置にセンタリングで表示させたいです。 また、ジャンル列の縦表示についてもできればいいのですが、これもはやり無理なんでしょうか。 うーん、前々からの不満点ですが、アクセスのレポートって使い勝手が悪いというか、気が利かないというか。。。(エクセルじゃ簡単なのに) エクセルオブジェクトは最終手段として、もう少し私も試行錯誤してみようと思います。

noname#102878
noname#102878
回答No.1

詳細より上のレベル「ジャンル」「邦画・洋画」「タイトル」に同じ値が連続しているレポートまでは作れてます? 作れていない場合はマスターテーブルと詳細テーブルを連結して表示するクエリーを作成してください。 で、 やはり簡単には行かないと思います。 レポート表示用のテーブルを作成し、グループ化したいフィールドが2つずつ存在するようにする。 「ジャンル1」「ジャンル2」「邦画・洋画1」「邦画・洋画2」「タイトル1」「タイトル2」「出演者」 って感じ。 で、レポート用クエリーの結果をVBAからADOを使用して1件ずつレポート用テーブルに転記していきます。 その際「~2」のフィールドには「~1」と違い、「前のレコードと同じ値なら書き込まない」「前のレコードと違う値なら書き込む」という感じで値を入れていきます。 つまり「~2」のフィールドが「グループ化された」フィールドになります。 全てのレコードを書き終えたらレポートを表示する。 そのレポートでは「~1」ではなく「~2」フィールドを表示するようにしておく。 ね、かなり難しいでしょ。 実際、ボクも今頭の中で適当に考えただけなので試してません。 クエリーやSQL一発でレコードを書き込むのではなく、レコード1行ずつ書き込むので、レコード数によっては処理時間も気になります。 だけどここまでやるならばレポートではなく、AccessVBAからExcelのオブジェクトを作成してExcelへガシガシと書き込んだほうが良いような気もします・・・

関連するQ&A