- ベストアンサー
VBA 印刷について教えてください
シートにデータを日ごと入力しています。そのデータを印刷をかけたいのですが、その日ごとに件数が異なります。 1行目は、項目 その下からデータになります。 件数は200件の時もあれば、300件のときも・・・ そこで、VBAを利用して印刷をしたいのですが、1枚に40件印刷をしたいのです。 1行は項目、40行データ よって一枚に41入る事のなります。 見出しの設定はわかります。 2枚目は 42から82 3枚目は 83から122 という感じです 行は、kまで 用紙はA4横です どのようにVBAを組めばよろしいでしょうか? よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 シンプルなサンプルを。(^^;;; ---------------------------------------------- 印刷範囲( A1:E??? ) 見出し行( 1行目 ) 最終行をチェックする列( A列 ) ----------------------------------------------- Sub TestPrint() Dim R As Long ActiveSheet.PageSetup.PrintTitleRows = "$1:$1" For R = 2 To Range("A65536").End(xlUp).Row Step 40 Range(Cells(R, "A"), Cells(R + 39, "E")).PrintOut Next R End Sub ------------------------------------------------- この程度のコードでも十分いけます。 以上です。
その他の回答 (3)
- KenKen_SP
- ベストアンサー率62% (785/1258)
スマートなコードではありませんが、サンプルをアップします。40行ごとに、改ページを設定しています。 ただし、40行印刷できるだけのマージン、あるいは印刷倍率を予め設定しておく必要があります。 どのくらいのマージンならば、40行印刷できるのか?については、使用するプリンタで異なりますので、あなたの環境に合わせて頂くしかありません。したがって、今回のコードでは設定しておりません。 また、データ範囲の取得方法には、 1. CurrentRegion 2. End(xlDown) などの方法があります。データ範囲が上手く取得できない場合、この辺りをカスタマイズして下さい。 Sub Sample() Dim TBL As Range Dim MC As Long, PtStep As Long, i As Long Dim Midasi As String '設定-------------------------------------------------- Midasi = "$1:$1" '見出し行 PtStep = 40 '1ページの行数 '------------------------------------------------------ '見出し行数 MC = Rows(Midasi).Count 'データ範囲取得 With Cells(MC, "A").CurrentRegion Set TBL = .Offset(MC, 0).Resize(.Rows.Count - MC, _ .Columns.Count) End With '印刷設定 ActiveSheet.ResetAllPageBreaks '改ページ初期化 With ActiveSheet.PageSetup .PrintArea = TBL.Address '印刷範囲 .PrintTitleRows = Midasi '行見出し .PaperSize = xlPaperA4 '用紙サイズ .Orientation = xlLandscape '用紙の向き End With '改ページ挿入 With TBL For i = .Row + PtStep To .Row + .Rows.Count Step PtStep ActiveSheet.HPageBreaks.Add Before:=Rows(i) Next i End With Set TBL = Nothing '印刷プレビュー表示 ActiveSheet.PrintPreview End Sub
- takibo
- ベストアンサー率57% (116/200)
1行目:見出し、2行目以降:データ(40行ずつ)、k行:最終行 例として、セルG1に最終行(k)を入力、データはA列からF列とします。 Sub 印刷() k = Range("G1").Value i = 0 Do Until i > k If i + 40 > k Then Range(Cells(2 + i, 1), Cells(k, 6)).PrintOut Else Range(Cells(2 + i, 1), Cells(41 + i, 6)).PrintOut End If i = i + 40 Loop End Sub 見出しが1行目で用紙はA4横と常に決まっているのであれば、はじめに1枚の印刷イメージ(余白など)の設定を保存しておいてください。
- popesyu
- ベストアンサー率36% (1782/4883)
そこまで仕様が固まっているのなら、あとはマクロの自動記録でアクションをなぞっていくだけでほぼ完成するかと思いますが。 '印刷範囲の設定 ActiveSheet.PageSetup.PrintArea ="$A$2:$C$40" 'タイトルの設定 ActiveSheet.PageSetup.PrintTitleRows = "$1:$1" '横の設定 Activesheet.PageSetup.Orientation = xlLandscape '印刷プレビュー表示 ActiveWindow.SelectedSheets.PrintPreview