• ベストアンサー

VBAでの改ページ位置の変更

takiboの回答

  • takibo
  • ベストアンサー率57% (116/200)
回答No.3

ちょっとひねくれた方法かもしれませんがいかがでしょうか? 表自体を印刷するのではなく、印刷用の表に一定の範囲を複写して印刷していきます。 ごくごく簡単なコードを作ってみました。 Sub 印刷()  With Sheets(1)   LR = .Range("A65536").End(xlUp).Row   i = 1   Do Until i > LR    If .Cells(i, 1).Value = "" Then i = i + 1    j = i + 50    If .Cells(j, 1) <> "" Then     For m = j - 1 To i Step -1      ER = m      If .Cells(m, 1).Value = "" Then       ER = m       Exit For      End If     Next     If ER = i Then ER = j - 1    Else     ER = j - 1    End If    Range(.Cells(i, 1), .Cells(ER, 10)).Copy Destination:=Sheets(2).Range("A1")    Sheets(2).PrintOut    Sheets(2).Cells.ClearContents    i = ER + 1   Loop  End With End Sub 【解説】 データのあるシートを[Sheets(1)]とし、印刷用の定形シート[Sheets(2)]を用意します。これを50行・A4 1枚に出力と設定したとします。 データの最終行を取得し、1行めから50行ずつコピーしていきます。その際の処理分岐として (1)51行目が空白の場合 → 1行めから50行目をコピー (2)51行目が空白で無い場合、1行ずつさかのぼって行き   (a)空白行があればその行までをコピー   (b)空白行がなければ、1行めから50行目をコピー 分岐の判断としては (1)ちょうど50行目でデータが区切られた場合 (2)-(a)50行目がデータの途中で、それより上の範囲にデータ区切りが存在する場合 (2)-(b)1行めから50行目までデータが連続している場合 としています。 >3.1行の行高が一定でない場合がある(横幅を抑えるためセル内で改行あり) このケースには対応しきれていないので修正が必要かと思われます。

kenton
質問者

お礼

takiboさん、ご回答ありがとうございました。 ふむふむ。こういう手法も考えられましたね。 何故、気付かなかったんだろう・・・(^^;) ただ、User側の操作を考えると、ステップが増えるため、 今回はWendy02さんのソースを拝借いたしました。 こういうことを一緒に考え、アドバイスをくれる人が傍にいてくれれば、 どんなに心強いか・・・

関連するQ&A

  • エクセルVBAで印刷時の改ページ探しは出来る??

    教えてください。 改ページプレビューで自動で改ページされた表(何ページもある)を 区切りのいいところで改ページを入れなおす マクロを作りたいのです。 区切りのいい所のセルには*が表示されているのですが そのセルの下の行で改ページを入れなおしたいのです。 改ページプレビューで自動で設定された改ページの位置を 探すのには、何か良い方法はあるのでしょうか?? 宜しくお願いいたします。

  • ExcelVBAの改ページの区切り位置が変更不可

    下記のようなコードで印刷プレビューを出して印刷するようにしたいのですが、改ページの位置が思い通りに変更されません。 3ページに印刷で、A19(B19)の行から2ページ目とA37(B37)の行から3ページ目にしたいのですが、印刷プレビューを見るとA20の行から2ページ目でA38の行から3ページ目になってしまいます。 HPageBreaks.Add Before:=Range("A19")←ここを色々違うセルに変えたり別のコードにかえたりしても、まったく反映されません。何かが邪魔をしているのでしょうか? どうしたら、任意の位置で改ページできるでしょうか?お願いいたします。 Sub 印刷プレビュー設定() Dim s As Worksheet Set s = ThisWorkbook.ActiveSheet With s '列非表示 .Columns("I:I").Select Selection.EntireColumn.Hidden = True 'ワークシートを選択、印刷範囲指定する .Select ActiveSheet.PageSetup.PrintArea = "$B$1:$O$54" '余白設定 .PageSetup.TopMargin = 0 .PageSetup.BottomMargin = 0 .PageSetup.LeftMargin = 0 .PageSetup.RightMargin = 0 '水平位置の中央へ .PageSetup.CenterHorizontally = True '垂直位置の中央へ .PageSetup.CenterVertically = True '用紙を横向きに設定 .PageSetup.Orientation = xlLandscape '用紙サイズを設定 .PageSetup.PaperSize = xlPaperA4 '印刷範囲を指定ページに収めて印刷プレビューを表示する .PageSetup.Zoom = False '拡大縮小倍率をFitToPagesの設定に収める .PageSetup.FitToPagesTall = 3 '縦の枚数 .PageSetup.FitToPagesWide = 1 '横の枚数 ActiveSheet.HPageBreaks.Add Before:=Range("A19") ActiveSheet.HPageBreaks.Add Before:=Range("A37") .PrintPreview End With End Sub

  • VBによる改頁行の罫線変更

    EXCELで外枠は太線、各行の区切り線は細線を 使用した表を作っています。 これがかなり大きな表ですので、印刷すると かなりの枚数になるんですが、各ページの最終行 (下の枠線)は当然細線になって、上、右、左の 太い枠線とのバランスが悪くなってしまいます。 改頁される行の区切り線のみ手作業で 太線に変更していってもいいのですが、 行を挿入した時とか行の高さを変更したときに ズレてしまって大変です。 改頁行の罫線のみ太線に変更するような VBを作成することは可能でしょうか? ご教示いただけましたら有り難いです。 よろしくお願い致します。

  • Excel 改ページのVBAうまくいかないです

    助けてください。EXCEL2000を使用しています。 マクロを組んでいるのですが、改ページがうまくいきません。 マクロ実行前の状態では、ページ設定で、用紙が「A3」の「縦」で拡大縮小が「79%」、データの区切りのいいところに何箇所か改ページが設定されています。 そこで、マクロを使って、A3サイズ、用紙を横、拡大縮小92%にして、尚かつ区切りのいいところ(毎回印刷範囲、区切りたいセルの位置は決まっている)で印刷できるようにしたいです。 印刷範囲は A1:P63,A64:P126,A127:P193,A194:P237,A257:P329, A330:P357,A368:P397,A401:P462 で設定したいです。 改ページしたい行を ひたすら ActiveSheet.HPageBreaks.Add Before:=Range("セル番地") で記述したのですが、 余計なところにも改ページ線ができてしまいました。(121行目の下、 351行目の下) このいらない改ページ線は、用紙を横にして、拡大縮小を92% をした時点で、ついてしまった線のようです。 余計な改ページ線を削除したいです。 なお、マクロは自動記録しかわかっておらず、 意味がわかっていないです。 お手数ですが お分かりになる方、 わかりやすくお願いいたします。

  • エクセルの改ページを自動で行う方法

    エクセルの質問です。 今、在庫表をエクセルで作っています。 単純化すると以下のような形です。 棚番号|商品名|商品数 ------+------+------ 1 |AAA |5 1 |BBB |6 2 |CCC |10 2 |DDD |2 3 |EEE |1 3 |FFF |2 3 |GGG |3 これを印刷するときに 棚番号が同じものをまとめて印刷したいと思います。 (下記のように3枚に分かれればいいです。) 棚番号|商品名|商品数 ------+------+------ 1 |AAA |5 1 |BBB |6 棚番号|商品名|商品数 ------+------+------ 2 |CCC |10 2 |DDD |2 棚番号|商品名|商品数 ------+------+------ 3 |EEE |1 3 |FFF |2 3 |GGG |3 このような形です。 ページ番号は通しの番号を振りたいと思います。 改ページを手動で入れていってもいいのですが、実際は棚が200くらいあるため合理的ではないです。 棚番号が変わったら自動で改ページするような機能はないでしょうか。

  • EXCELで改頁される行を太線にするには?

    EXCELで外枠は太線、各行の区切り線は細線を 使用した表を作っています。 これがかなり大きな表ですので、印刷すると かなりの枚数になるんですが、各ページの最終行 (下の枠線)は当然細線になって、上、右、左の 太い枠線とのバランスが悪くなってしまいます。 改頁される行の区切り線のみ太線に変更していって もいいのですが、行を挿入した時とか行の高さを 変更したときにズレてしまって大変です。 印刷した時に自動的に改頁される行のみ太線に なるような機能はないのでしょうか? もしくはVBA等でそのような機能を作成することは 可能でしょうか? ご教示いただけましたら有り難いです。 よろしくお願い致します。

  • 表と改ペイジ

    WORD2000使用 WORDの表機能で、あるカラム行A-+次のカラム行Bのサイズが1頁を越えると、Aの下があいて、Bが次の頁から表示される。 なお表のpropertyの行の オプション「行の途中で改頁する」にはチェックを付けてはいません。 Bが次の頁から表示されないで1頁で表示できる所は表示し、それでも納まらないなら次の頁になるようにしたい。どうすればいいか。よろしくお願いします。 なおタイトル行の繰り返しにはチェック付与している。

  • EXCEL、マクロ-改ページ行番号の取得方法を教えてください

    EXCELで作成した表を印刷したいのですが、表が縦長で複数ページにわたります。 そこで各ページの下端にそれぞれ罫線を挿入するマクロを書きたいのですが、 改ページ位置の取得方法がわかりません。各ページの上端行でも下端行でも良いので 行番号を取得する方法はないものでしょうか? どなたかご教授願います。 マクロ全体としては下記を考えています。 1.データの下端行の取得 2.印刷範囲の設定(横1ページ×縦複数ページ) 3.最初の改ページ位置の取得 4.ページ下端セル行の下に罫線を入れる 5.次の改ページ位置の取得 6.以下、データ最下端行まで繰り返し (各行のセルの高さは一定ではないです。)

  • Excelの改ページ 同シート内で複数の改ページの設定

    同じシート内で多くの改ページを設定しなければならない場合 1ページ毎に設定していかないといけないのでしょうか? それとも改ページしたいデータで並び替えて、同データのある行で改ページを分割していくのは可能でしょうか? たとえばA列に上から111112223333344455555とある場合に自動的に1と2の間、2と3の間、3と4の間、4と5の間にそれぞれ自動的に改ページを入れたいのですが・・・

  • FORTRANで作成したテキストファイル中で改行・改頁制御する方法を教えてください

    FORTRAN90で数表をテキストファイルに書き出すプログラムをつくっています。テキストエディタから印刷したときに改行や改頁ができるように改行コードや改頁コードをファイルに入れたいのですが、 その記述の仕方がわかりません。 たとえば下記のような場合、どのような記載をすればよいのでしょうか? DO I=Q,R WRITE(9,"(I4,7(1X,A))") I,(A(J,I),J=O,P) END DO どなたか詳しい方、教えていただけませんでしょうか。 よろしくお願いいたします。