• ベストアンサー

VBA 印刷について教えてください

シートにデータを日ごと入力しています。そのデータを印刷をかけたいのですが、その日ごとに件数が異なります。 1行目は、項目 その下からデータになります。 件数は200件の時もあれば、300件のときも・・・ そこで、VBAを利用して印刷をしたいのですが、1枚に40件印刷をしたいのです。 1行は項目、40行データ よって一枚に41入る事のなります。 見出しの設定はわかります。 2枚目は 42から82 3枚目は 83から122 という感じです 行は、kまで 用紙はA4横です どのようにVBAを組めばよろしいでしょうか? よろしくお願いいたします。

  • a32
  • お礼率6% (7/109)

質問者が選んだベストアンサー

  • ベストアンサー
  • taocat
  • ベストアンサー率61% (191/310)
回答No.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)
回答No.3

スマートなコードではありませんが、サンプルをアップします。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)
回答No.2

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)
回答No.1

そこまで仕様が固まっているのなら、あとはマクロの自動記録でアクションをなぞっていくだけでほぼ完成するかと思いますが。 '印刷範囲の設定 ActiveSheet.PageSetup.PrintArea ="$A$2:$C$40"  'タイトルの設定 ActiveSheet.PageSetup.PrintTitleRows = "$1:$1" '横の設定 Activesheet.PageSetup.Orientation = xlLandscape '印刷プレビュー表示 ActiveWindow.SelectedSheets.PrintPreview  

関連するQ&A

  • VBA 印刷について(空白ページを印刷しない)

    エクセル VBAで空白のシート及び空白ページを印刷しない方法を教えてください。 見積明細シートが明細1、明細2と9まであります。 各シート見積もりの内容によりページ数が異なり 入力の無いシートもあります(明細3以降入力無し等) 又、2行目まではタイトル行のためシートに最初から入力済みです。 縦横とも罫線を引いてあります。 A    B   C   D    E   F 1 項目  適用  単価  単位  金額   備考← タイトル行 2                        ← タイトル行 3 ここから入力 4 5 ↓ 1ページ23行 例えば、明細1 24行まで入力した場合、2ページめの最後(44行目まで) 印刷したい。 明細2以降 タイトル行以外にデーターが有れば印刷、なければ印刷しない。 様な感じです。 最終行まで印刷するところまでは自力でたどり着いたのですが、それだと最終行よりしたの罫線が印刷されなくて困っています どなたかご教示願います

  • 複数ページに亘るExcelの集計内容を最終頁最下行に印刷したいのですが

    Excelの集計シートでの合計欄の記載についての質問です。 ある集計データについて1行目から20行目まで表示し(1行につきデータ1件分) 21件以上となった場合は次のページに印刷するというものなのですが、 以下の全てを満たすマクロ処理はないのでしょうか? あるとすればどうすればいいんでしょうか? (1)パソコン画面上に表示されるシートはデータ件数に関わらず1枚とする。 (2)1枚のシートに記載できるデータ件数の上限は99件とする。 (3)1行目は項目名を、2~100行目はデータ本体を、101行目は合計欄とする。(全て固定) (4)印刷の際、1枚の紙に印刷できるデータ件数は20件までとする。 (6)印刷のフォーマットは、1行目に項目欄、2~21行目にデータを、また最終ページの  22行目には合計欄を印刷するものとする。 (7)-1 データが20件以下の場合、1行目に項目欄を、2行目以降にデータを、  22行目に合計欄及び合計データを印刷する。 (7)-2 21~40件以下の場合は1ページ目には項目欄と20件目までのデータを、  2ページ目には項目欄及び21件目以降のデータと全データの合計データを印刷する。 (7)-3 (7)-2のように、印刷が複数ページに亘る場合、最終ページ以外については  1行目に項目欄、2~21行目にデータを印刷し、最終ページについては1行目に項目欄、  2行目以降に残りのデータ、22行目に全ページの合計データを印刷する。 (8)最終ページ以外の22行目は空白とする。(合計欄も印刷されない) (9)データ件数が20で割り切れない場合でも、最終データ記載行と合計データ記載行の間の  余白行は埋めず、必ず最終ページの22行目に合計欄及び合計データを印刷するものとする。 以上、よろしくお願いいたします。

  • エクセルVBAで、テキストボックスにセルの値を入れる

    宜しくお願いします。 エクセルデータの各項目を、すでに書式(表)が印刷された用紙のそれぞれの項目の位置に印刷させたいのですが・・・ 各項目には、500行ぐらいのデータがあり、別のワークシートの表示させたい位置(すでに印刷された用紙にあわせてある)に各項目ごとのテキストボックスを作っておいて、そのテキストボックスに各項目のデータを1行ごとに表示させて、テキストボックスのフォント調整、印刷 ~を繰り返したいのですが、どのようなコードを書けばよいのでしょうか? 進め方としては、データシートからテキストボックスに各項目のデータが表示されたら、シート上でテキストボックスのフォントや位置の微調整が出来るようにしておいて、印刷ボタンをクリックすると印刷され、次へのボタンをクリックすると、次の行のデータがテキストボックスに表示されるようにしたい。 ※印刷する場合は、テキストボックス内の文字のみ印刷(シートには印刷したくない文字書きたいので・・・) また、そのフォームには、パターンが5つあって、データには1行ごとにパターン番号が入力されているとして、それぞれのパターンにあわせたテキストボックスの配置してあるシートへ行くようにもしたい。 データの入れ替わりが多いので、別のワークブックと繋がるような仕組みにしておいて、テキストボックスの配置してあるブック側から、データのあるブックを呼びに行ってデータを取りに行くようにしておきたい。 以上、条件が多くてすみませんが、VBAは初心者で、ほんの部分的にしかまだ分かりません。どなたか詳しい方宜しくお願いします。

  • マクロ vba 印刷 

    エクセルの印刷に関するマクロで教えて下さい。今ページ設定のシート設定で1~8行までを固定しています。B列の9~44行までが必要に応じて数字が入力されます。そして2ページ目の50~85行までが同じく必要に応じて数字が入力されます。3ページ目の91行~126行までが又同じく必要に応じて数字が入力されます。このように10ページまであります。つまり固定した1~8行までを見出しに下に表がずらーっとあります。ここで印刷をする際に、数字の入ったページまでを印刷するマクロを作りたいのです。普通に印刷すると10ページ印刷されてしまいます。例えば12行目まで入力があるならば、1ページだけを印刷。98行目まで入力があるならば、3ページ目までを印刷といった具合です。ちなみに途中数字が空白になる事はありません。詳しい方いらっしゃいましたら、お手数ですが教えて頂けませんでしょうか。宜しくお願いします。

  • 【ExcelVBA】日計から個別帳票へ転記したい

    sheet1からsheet2へデータを転記したいです。 参考画像を添付します。 sheet1には、日計の情報があります。 A列に月、B列に日、C列にID、D列に氏名、E列に備考、F列に項目1、G列に項目2です。 1ヶ月分のデータを入力すると、1500~2000行程度のデータ(ID数は200前後)になります。 (サンプル画像は20数件のデータに対して15件ほどのIDです) sheet2には、各ID毎の月間データを作成し、印刷したいです。 sheet2の、C2にID、G2に氏名、L2に年、N2に月を。 更にその下に日付け毎の記録(実施、項目1、項目2)をつけたいです。 「実施」については、該当日に実施記録があれば◎をつけたいです。 sheet1のC列をVBAで抽出し、K列に重複しないIDを表示させるところまではできました。 sheet1のK列に抽出されたID毎にsheet2を繰り返し処理で完成させれば良いと思うのですが、 「対応表」を眺めていると、セルの配置に規則性がある(?)ので、 何か効率的なVBA記述が出来るのではないかとも思います。 また、sheet2の印刷時、A4用紙1枚に1件の印刷ではなく、2~3件分印刷出来ると望ましいです。 複数のIDをまとめて印刷するのは可能でしょうか? こういった場合、どのような処理(マクロ記述)をするのが望ましいでしょうか? お知恵を頂ければ幸いです。

  • VBAでのセル範囲指定について

    お世話になります。 私が分からないのは、VBAでのセル範囲指定なのですが、 例えば、シートにデータが有、そのデータの1行目は見出しなので 2行目からデータが入っているセルまでの範囲を指定、コピーして 隣のシートに貼付したいのですが、そのデータの入力される範囲が 毎回違います。「CurrentRegion.Select」としてしまうと、1行目 の見出しまでも範囲指定されてしますので、どうやったら良いのか どなたかお教え頂きたく宜しくお願い申し上げます。

  • VBAでのデータの並び替え

    A列~BV列までデータがあり、件数は5万件ほどあります。 要所、要所に空白行が入っているのですが、空白行から空白行までを1ブロックとして 計6ブロックできます。 1ブロック、1ブロックは同じ件数になるはずで、 それらを横につなげたいのです。 つなげ方は、上から数えて1番上のブロックはそのまま、2番目のブロックは1番目の横、3番目のブロックは2番目の横、 このような感じでどんどん横につなげて計6づロックあったデータをひとつにしたいのですが、 なにかいい方法ありませんか?ぜひアドバイスお願いします。 言い忘れたのですが、一番上は見出し、そのしたに空白行があります。

  • Excelでの差込印刷

    ExcelのSheet2にあるデータをSheet1の雛型に差込印刷をするマクロを作っています。 データは使用する度に件数が違うので、最終行を取得して1件ずつ差込印刷をするところまではできたのですが、10件ずつまとめて持ってくるにはどうしたらいいでしょうか。 宜しくお願いします。

  • エクセルVABを使ってデータの取得・印刷までをしたいのですが・・・

    VBA初心者です。大変悩んでいます。よろしくお願いします。 今、エクセル(シート1に)で簡単なデータを入力しています。 (A1)から順番に、右方向に、整理番号、氏名、住所、性別、生年月日、その他と(F1)まで入力して、(A2)に戻って、また新たな人の情報を同じ手順で入力しています。この作業は、1日5件の日もあれば、200件を越す日もあります。 そこで、上記の6項目のうち整理番号、住所、生年月日をシート2に作成してある専用のフォームにコピーして、個別に印刷をしたいのですが、どのようにVBAが利用できるでしょうか? また、1日の印刷量が不定であるので、5件のときは5枚、100件のときは100枚、199件のときは199枚と言うような、その日その日のデータ量にあわせる設定もできるもでしょうか? お願いいたします。

  • VBAを使ってマクロを作り印刷したいです。

    VBA初心者です。皆様よろしくお願いいたします。 質問内容は、例えばsheet1に私が作ったFAXのsheetがあり、住所や 名前、電話番号、重複しないデータ等を指定したセルに出してFAX用紙の フォーマットを崩さないように印刷することです。 ユーザーフォームで、sheet1(私が作成したFAX用紙)に印刷ボタンを設置し、クリックすると 重複しないデータ(基礎となるデータがsheet2にはっております)データ記入欄の 表示がされ、基礎となるデータを管理Noだとすると、 印刷ボタンをクリック ↓ 上下にテキストボックスが2つ表示さる(000001)から(000006)管理Noです。 ※ただし、上のテキストボックスだけ入力しても印刷を可にしてほしいです。 ↓ テキストボックスに管理ナンバーを入力(管理NOは、連続した値とします) ↓ 発行部数の入力画面 ↓ 印刷される感じです。 発行部数が1部でしたら、管理No.0000001から000006までの間を各一部印刷です。 sheet2は、縦列は10行分A~J行 横の値は、複数行はいります。ここでは、横10行分とさせてください。 sheet2の値は、Aから、管理No(重複しない基礎のデータ)、名前、電話番号、FAX番号 住所、会社名、部署名、担当者、日付、担当営業とします。 縦の列は、上記のデータが入っているものとします。 sheet1に戻り例えば、管理NoをA3,名前をB5,電話番号をC6,FAX番号をD6 住所をD3,会社名はD4,部署名をD5、担当者がB5,日付がA6,担当営業がB5に いれるような事ができたらと思い質問させていただきました。 皆様、何卒ご教授お願いいたします。

専門家に質問してみよう