左から順に店名・品名・売上数量と並んでいる表があるとして、同じ店名の範囲では連続し店名が変わるごとにシートを改ページして印刷します。改ページは手作業で挿入済みです。
見出し行を指定して、各ページに一定のタイトルなどを表示しますが、ここに【店名】を表示して、一覧表の店名列は非表示にしたいのです。自動的にページ内データが属する店名を見出し行内に印刷する良い方法はないでしょうか。
この状況だと、店ごとにシートを分割するのが一番よい方法ですね…。
同一シート内に改ページで複数店舗の情報を詰め込むのではなく、1シート1店舗で独立した印刷を可能にします。
全店舗の集計がしたければ、集計用のシートを作ってそこで集計を取ります。
店舗用のデータを入力するためのフォーマットとなるシートを1個作って、それを使い回す感じですね。タイトルなどもフォーマット内に含めるか、またはembed します。
また、見出し行の一つ下には、一つ目のデータを入力することになりますが、そこで入力された店名をシートの上部から =A10 のようにセル参照します。そのようにして、タイトルがある辺りに店名を表示させます。
店舗ごとに独立した見せ方をしたいのであれば、これがもっともよいデータ管理形式ですね。
いまある「改ページ形式」のデータの管理方法を変えられないのであれば、
上記で述べたような「印刷用の店舗ごとのシートたち」を別途、自動生成するようなマクロを作って、印刷のたびに実行させることになります。
改ページを手動で頑張って使い続けると、データが増えてきた時にメンテに苦労するし困ることも多いので、あまりおすすめしません。
ありがとうございます。
2013/12/01 02:03:47AccessのVBAでのBeforeFormatみたいに、上から並んでいる店名が変化した時点で変化をキャッチして参照代入できないかと思ったのですが、そういう発想自体を変えたほうがいいということですね。頭を切り換えることにします。
拝読しました。以下補足です。
2013/12/01 02:25:54>上から並んでいる店名が変化した時点で変化をキャッチして参照代入
この発想自体は悪くないのです。
一般的ですし,Excelの1シート内での処理とも親和性のある考え方です。
問題は,それを「印刷の真っ最中」に順々に実行しようとしている点にあるのではないかと…。
印刷の前後であれば,BeforePrintなどのイベントで検知して処理をかませることができますね。
http://www.officelabo.net/vbaskill/vba20.html
質問者様はおそらく
「印刷の真っ最中に,改ページするごとに,順を追って店名の値を参照して書き変えていけるのではないか?」
というアイデアを持っておられたのでは。
いったん印刷が始まってしまうと,1ジョブ分の印刷タスクが終わるまでは,Excel側からプリンタ側に制御が移っていますので,手を出せないんですよね。
だからこそ,印刷の実行単位を分けたほうがよくて,そのためにはシートを分割したほうがいい。
という結論になるんですよね。
>AccessのVBAでのBeforeFormat
クリスタルレポート(帳票ソリューションソフト)をインストールした場合に利用できる,独自の特殊なCOMイベントですね。下記みたいな・・・
BeforeFormatPage Event (Report Object)
http://devlibrary.businessobjects.com/businessobjectsxir2/en/en/RDC_SDK/rdc_com_dg_doc/doc/rdcsdk_com_doc/RDC_ObjectModel174.html
VB Crystal Report, Can I change paper bins?
http://computer-programming-forum.com/67-vb-crystal-report/de247e42809c4f88.htm
こういう特殊な印刷環境であれば,また事情も変わってくるかもしれません。
※その場合は,質問文の中に,「~を使って…」のように利用ソフト名や環境情報が含まれていれば,思い通りの回答が得やすいのではないかと思います。