VBAで改ページを自動で設定できるようになりたいけど
やり方がわからない、上手くできない…
改ページを設定したら出てくる点線ってなんなの?
消す方法ってないの?
印刷の時に表を次のページに印刷したいんだけど
1ページになっちゃう…どうすればいいんだろう?
こんにちは!VBAで自動化するのが好きすぎて、社内でVBA講師を担当していた8年目文系プログラマの佐藤です。
みなさんはエクセルの資料を印刷する時、改ページについて意識していますか?
ページの区切りを自分で設定することを改ページといいますが、いちいち手動で設定するよりVBAを使って自動化出来たほうがより効率的ですよね。
ですが、VBAを使って改ページを設定してみたけどなんか上手くいかない…というお悩みの声をよく耳にします。
実際、予想外の位置に改ページが設定されてしまい、表が2ページに分割されてしまったり、逆に2ページにしたいのに1枚に印刷されてしまったり…という失敗経験が筆者にもあります。
そんなお悩みを解決するべく、この記事では改ページに関する基礎知識から解説していきます。基礎知識があれば、実践の時に間違いや勘違いに気づきやすくなりますので、まずは改ページについて一緒に学習していきましょう。
もちろん、あの点線についても解説していきます。
記事の後半では、VBAを使って改ページを設定・解除する具体的な方法について解説していきます。すぐに使える分かりやすいものになっていますので、こちらも一緒に実践して慣れていきましょう。
それでは、さっそく解説に移っていきましょう。まずは改ページについて学習していきます!
改ページについて知ろう
この章では、改ページの基礎知識を解説していきます。基礎知識があれば、実践の理解がより深まること間違いなしです!
まずはシートの表示形式から学習していきましょう。
改ページプレビューと標準表示の違い
みなさんはエクセルで資料を印刷する前、標準表示のままにしていますか?
エクセルには改ページプレビューという表示方法が用意されています。
次のような表示を見たことはありませんか?
このように、どこで改ページされて、どこまで印刷されるのか見てすぐにわかるようになっているんですね。
標準表示でも次の画像のように薄い灰色の線で確認することはできますが、改ページプレビュー表示のほうが見やすいですよね?
印刷の失敗を防ぐためにも、まずは改ページプレビュー表示で印刷範囲の確認をすることをお勧めします。
改ページプレビューにするにはリボンメニューの「表示」から設定することが出来ますよ。
この記事では、このあと改ページプレビュー表示で解説を進めていきます。上の画像を参考に、設定してみましょう。
改ページプレビュー表示が見慣れない、見方が分からない方はこの後詳しく解説していきますので、安心してくださいね。
印刷範囲ってなに?
印刷範囲は字のごとく「印刷する範囲」のことです。
改ページプレビュー表示にすると、すぐ確認できますので見方について解説していきますね。
作成済みの資料を開いて、改ページプレビューすると文字や表がある部分までが白くなり、他は灰色になります。次の画像のような感じです。
青い線が引いてありますよね?これが改ページになる線です。
この青い線は動かすことができ、手動で改ページの場所を変えられるようになっています。
灰色の部分は印刷されない部分になり、ここに文字や表があっても印刷されません。
うっすら「1ページ」と書いてありますね。ここは1ページ目に印刷されますよというお知らせになっています。
このように印刷される範囲がひとめでわかるのが改ページプレビュー表示のいいところです。VBAで改ページを自動設定する時も間違いがないか、この表示で確認していきましょう。
もっと広い範囲をこのページの印刷範囲にしたいときには、青い線を動かします。
広く広くしていくと…次のような謎の点線が表示されていませんか?
しかも、1ページに印刷したかったのに勝手に2ページが追加されています。
この点線いったい何なんだ…邪魔だ…
とお思いになりますよね。
実はちゃんと役割があって表示されるものなんです。その正体は次の項目で詳しく解説していきます。
改ページ設定すると現れる「点線」の正体
自分では1ページに印刷したいと思って範囲を広げたのに、点線によって2ページ目を勝手に設定されてしまいました。そのまま気付かないまま印刷して失敗…ということも少なくありません。
もちろん、さっき表示された点線も手動で動かすこともできるため、それで回避することが可能です。ですが、忘れてしまいそうですよね。
ますます点線の存在理由がわからなくなりそうですが、実は大事な役割がある線なんです。
線の意味を確認するために、まずはページレイアウトの拡大/縮小の項目を見てみましょう。
今は100%となっていますよね、これは拡大も縮小もしないで印刷するという設定です。ここで、縮小してみましょう。
90%に縮小して印刷する設定にしたところで、点線が消えました。
この実験で分かったように、この点線は今の倍率で印刷できる最大の印刷範囲を示しているものなんです。
この倍率ではここまでしか印刷できないよ、それより広い範囲を印刷したいなら縮小しないとだめだよ。というお知らせになっているんですね。
VBAで改ページを自動で設定する時にも、この点線が表示されるかもしれません。
その時には縮小して印刷する必要がありますので、改ページプレビュー表示で印刷前にしっかり確認していきましょう。
印刷範囲のことや、改ページプレビュー表示のこと、そして表示される点線について解説してきました。
印刷は画面で確認しても、印刷機によってずれてしまって失敗することがまれにあります。ですが、極限まで失敗を減らすためにも改ページプレビュー表示で確認したり、点線の有無を見るのを忘れないようにしましょう。
さて、次の章ではさっそくVBAで改ページを設定してみます。
基本の方法から順番に解説していきますので、一緒に実践してみましょう。
VBAで好きな位置に改ページを設定しよう
この章では、VBAで改ページを自動で設定する方法を解説していきます。
改ページの位置を取得する方法も合わせて解説していくので、こちらも必要に応じて確認してみてくださいね。
では、始めて行きましょう!
基本の方法をまずは覚えよう
まずは基本の方法から学習していきましょう。
VBAで改ページを設定する時は「PageBreak」を使って設定します。
この表に改ページを設定してみます。まずはセル基準で改ページを設定する方法です。
Sub pagebreak_test() Range("H10").PageBreak = xlPageBreakManual End Sub
実行してみると、次の画像のように縦と横の改ページが設定されます。
H10のセルの右上を基準に改ページが設定されていますね。
もちろん横の改ページ、縦の改ページを個別で設定することもできます。
その時は、次のように書いてみましょう。
Sub pagebreak_test() '横の改ページを設定 HPageBreaks.Add Range("F9") '縦の改ページを設定 VPageBreaks.Add Range("G1") End Sub
横の改ページを設定したいときは「HPageBreaks.Add」、縦の改ページを設定したい時は「VPageBreaks.Add」を使えば設定することができちゃいます。横なら指定したセルの上、縦なら指定したセルの左側に設定されます。
思ったところと違った!とならないよう、改ページプレビュー表示でしっかり確認してから印刷しましょう。
これで改ページを設定できるようになりましたが、これだけではあんまり自動化する意味がないですよね。
次の章で、指定した行ごとに改ページを自動で設定してみましょう。
改ページを均等に設定したい時に、とても便利な方法です。
〇行ごとに改ページを設定して均等にしよう
自分で決めた行数ごとに改ページを設定しようとしたとき、手動だととっても大変ですよね。ここで紹介する方法をつかって自動化してみましょう。
今回は分かりやすいよう、5行ごとに横の改ページを設定することにします。縦の改ページはI列で固定です。
さっそくサンプルコードを…と言いたいところですが、エラーを防ぐために大切な作業があるので、まずはこちらをやっていきましょう。
ページレイアウトの印刷範囲から、印刷範囲のクリアを押して、印刷したい表や内容を印刷範囲に確実に入れます。
これで、印刷範囲外に改ページを設定しようとしてエラーになってしまうのを防ぐことができます。
ここまで出来たら、いよいよサンプルを実行してみます。
Sub pagebreak_test() 'ループのカウンタ Dim i As Long '最終行の場所を格納する変数 Dim lastrow As Long '最終行を調べる lastrow = Cells(Rows.Count, 1).End(xlUp).Row '最終行までループして、改ページを設定する For i = 6 To lastrow Step 5 Rows(i).PageBreak = xlPageBreakManual Next End Sub
実行結果はこのようになります
5行ごとに改ページを設定することができました!
サンプルコードを順番に見ていきましょう。
まずNoが入力されている行までループしたいので、最後の行は何行目かを取得していきます。
'最終行を調べる lastrow = Cells(Rows.Count, 1).End(xlUp).Row
「Cells(Rows.Count, 1).End(xlUp).Row」はA1でctrlを押しながら矢印の↓を押した時の動きをしてくれます。これを使って、空のセルになるまでの行数を取得してみましょう。
次は、ループを使って5行ごとに改ページを設定していきます。
'最終行までループして、改ページを設定する For i = 6 To lastrow Step 5 Rows(i).PageBreak = xlPageBreakManual Next
ループのカウンタを1ではなく、6から始めるのは最初の改ページを6行目の上に設定したいからです。また、1行目の上に改ページを設定しようとすると、エラーになってしまうので注意しましょう。
For文の中身は、最初に学習した改ページの設定方法と同じです。
Row(2)のように指定すると、エクセルの左側の2行目をクリックして、行全体を選択した時と同じような状態になります。そこに改ページを設定するという流れです。
これで、自分で決めた行ごとに改ページを設定できました。
手作業でやるよりもとても早く済みますよね。全ページの大きさをそろえたい場合はこの方法がとても有効です。
さて、次は改ページの現在の位置を取得する方法について解説します。
改ページの場所を取得して、その改ページを解除する際に使ったりします。もちろん工夫次第ではいろいろな使い方が出来ると思いますので、一緒に見ていきましょう。
改ページをの位置を取得しよう
それでは、先ほど設定した5行おきの改ページの位置を取得してみましょう。
改ページの位置を取得する時には「Location」を使います。
ですが、1ページしかないときには位置を取得できませんので注意しましょう。
まずは分かりやすいよう、改ページの位置をメッセージボックスで表示してみます。
Sub pagebreak_test() Dim PageBreak As HPageBreak For Each PageBreak In HPageBreaks MsgBox PageBreak.Location.Row Next End Sub
実行してみると「6」、「11」…と改ページの行が表示されます。
For Eachを使うことで、このシートの改ページがある分ループすることが出来ます。
また、改ページがある行を選択したい時は「Select」を使って次のように書き変えてみます。分かりやすいよう、メッセージボックスでの表示を入れてあります。
For Each PageBreak In HPageBreaks PageBreak.Location.Select MsgBox "現在、A" & PageBreak.Location.Row & "が選択されています" Next
実行してみると、A6・A11…の順で選択されていきますよね。このようにして、改ページを位置を取得することが出来ます。改ページを個別で削除したい時などに活用できますよ。
ここまでVBAで改ページを設定する方法をすべて解説しました。
上手くできましたか?もし、なんか上手くできないな…というときには次の項目を確認してみましょう。
上手く改ページが設定できない!そんなときのQ&A
VBAで改ページを設定したけど上手くできない!そんな時には次の項目を確認してみましょう。
Q:〇行ごとに改ページを設定しようとしたら、最後の改ページ設定で失敗しちゃう…
もしかして、印刷範囲外に改ページを設定しようとしていませんか?
改ページプレビューだと灰色の部分です。印刷範囲外には改ページを設定することが出来ません。
コードの中で予想外の数値が設定されていませんか?
印刷範囲のクリアをしてしっかり印刷したいものが印刷範囲に入っていますか?
この2点を確認してみましょう。
Q:改ページを設定しようとしても、最初の改ページ設定から上手くいきません
1行目に改ページを設定しようとしていませんか?
1行目に改ページを設定しようとすると、1行目の上には改ページを入れることが出来ないのでエラーが出てしまいます。
コードの中で、1行目に改ページを設定しようとしていないか確認しましょう。
Q:印刷してみたら設定と違うところで改ページされたんだけど!
広めに改ページを設定した時、エクセルが自動で設定した点線が入っていませんか?
点線が出ていれば現在のの印刷倍率では印刷しきれない位置に改ページを設定しようとしています。
ページレイアウトの拡大/縮小の設定で、縮小して点線がなくなるように設定しましょう。
上手く設定できないとき、印刷結果が思うようにいかないときには以上の項目を必ずチェックしましょう。
改ページの設定の解説は以上で終了です。
設定する位置さえ間違えなければ、コード自体は短めなのでわかりやすいと思います。どんどん実践して、慣れていきましょう。
それでは、次の章では改ページを解除する方法について解説していきます。
改ページの設定をするときには、一度解除してから設定したほうが安心ですよね。
解除も自動化出来るような方法を紹介していきます。
改ページを解除する方法も一緒に覚えよう
この章では、設定した改ページを全部解除する方法と個別に解除する方法の2つを紹介します。
改ページを再設定する際に、要らない改ページも残ったままだと予想外の印刷結果になりかねません。一度解除してから設定したほうが安心なので、ここで解説する方法も合わせて確認していきましょう。
設定した改ページを全部解除する方法
設定した改ページを自動で全部解除する時には「ResetAllPageBreaks」を使います。
これを使うだけで、改ページをすべて解除できますよ。
実際の使い方はとても簡単、次のサンプルコードを見てください。
Sub pagebreak_reset() ResetAllPageBreaks End Sub
これでアクティブなシートの改ページをすべて解除することが出来ます。
改ページを設定するコードの前に組み込んでおくと、毎回新しく改ページを設定することが出来るので安心です。
全部じゃなくて、一つだけ解除したい…など個別で解除したい場合は別の方法を使います。
次の項目を見てみましょう!
個別で解除したい
改ページを設定を個別で解除したい場合は改ページを設定した時と同じような書き方をしていきます。
次のサンプルコードはA11の改ページだけを削除する方法です。
Sub pagebreak_reset() Rows(11).PageBreak = xlPageBreakNone End Sub
先程は「xlPageBreakManual」を使って改ページを設定しました。
解除したい場合は「xlPageBreakNone」を使って改ページを解除しましょう。
もちろん、Range(“A11”)と指定しても問題ありませんよ。
これを使えば、一つ置きに解除することも可能です。
手作業でやるよりも確実で、早くできますよね。ぜひこちらも工夫していろいろな場面で使ってみてください。
これで、解除の方法についてもすべて解説しました。
解除は設定よりもシンプルな内容でしたね。設定する方法と合わせて使って慣れていきましょう。
まとめ
VBAで改ページ設定・解除する方法について解説してきました。
改ページ設定はいろいろな資料で変わるものなので、設定が大変ですよね。
ここで紹介した方法を使って効率化することで、少しでも楽に資料作成ができるようになれば筆者も嬉しいです。
それでは、また次の解説で!