質問: excelでの印刷に関して excel vbaのご質問させていただきます。 このサイトは、いつも拝見させていただき、学習させていただいています。 シート1枚で売上リストを構成し、ボタンを押すと、ある日付の表を印刷するようにしております。 印刷のテンプレートは異なるシートで作っていて、そちらにコピー貼り付けで表示されるようにしております。 印刷の方は25行に売上データが入るようにしておりますが、例えばある日の売上が30行あると2ページにわたって 印刷されるようにしています。 そこで、1枚目には25行までの小計、2枚目には残り5行の小計と、2ページすべての合計を表示したいと思っています。 また、1ページと2ページにわたった売上の通し番号も左端に表示できるようにしたいです。 ボタンを押して、以上のことが実現できるコードを書くにはどうすれば良いでしょうか?
回答: こんにちは とりあえず、アドバイスだけさせてもらいます。 ちょっと考えてみてください。 >例えばある日の売上が30行あると2ページにわたって印刷される >ようにしています。 2ページ出力される処理はどのようにしているのでしょうか? 一回で売上の内容全てを貼り付けて、印刷を指示するとエクセルの 印刷機能によって2ページ出力されるような形でしょうか? 小計、合計を表示させたいのなら、以下のような手順にしてみては どうでしょうか? 1ページ分の固定フォーマットを作成(一番下に小計・合計欄も作る)して、 ページ数だけ印刷指示を行うようにする。 【手順】 (1)何ページあるか確認して変数に入れます。※1 (2)小計、合計の変数を用意します。 ゼロクリアしておく (3)ページの回数だけ25行づつ貼り付けて印刷します。 (最終ページも25行貼り付けます。 最終行以降が空白であることが条件) <繰り返しの処理> for i = 1 to 最終ページ 25行の売上をコピー※2(別の変数を用意して現在の位置を指定) 出力フォーマットに値ペーストする※3 左端のセルに i (ページ数)を入れる 小計を計算して小計欄に入れる※4 合計 = 合計 + 小計 で計算する 最終ページであれば合計を合計欄に入れる 印刷の指示 売上の欄をクリア 次の位置を示す変数の設定※2 next i (4)小計・合計欄をクリアする ※1 最終ページ = application.worksheetfunction.roundup(worksheets("sheet1") _ .range("a65536").end(xlup).row / 25, 0) ※2 jという変数を用意して、for文の前で1を設定しておく range(cells(i + j - 1, 1), cells(i + j + 23, 5)).copy 上記は、i=1,j=1の時、"a1:e25"の範囲をコピーします。 next iの直前に、jに24を足すと次の"a26:e50"の先頭が指定できます。(i=2,j=25) ※3 selection.pastespecial paste:=xlvalues, operation:=xlnone, _ skipblanks:=false,transpose:=false ※4 小計 = application.worksheetfunction.sum(range("e3:e27")) e3:e27は売上の25行の範囲です。 フォーマットにあわせて変更 何かあれば補足してください。 ご参考まで