VBAを使った印刷設定【 印刷の自動化で作業効率を格段に上げる方法 】
作った資料の印刷をするってデスクワークでは必ず行う仕事ですよね。
当たり前の作業と思われがちな印刷作業は意外と時間がかかるし、難しい作業
・印刷範囲がずれてしまう
・1ページだけ印刷するつもりが全ページ印刷してしまった
・毎回印刷設定を確認するのがめんどう…
VBAを使えば印刷作業を効率的に行うことが可能に!
・印刷枚数が決まっている資料の印刷設定を行うVBA
・条件によって印刷する資料を変更するVBA
・プリンターを選択するVBA
書類によって印刷する種類や部数が決まっていることってありますよね。ある程度印刷設定が決まっているデータに印刷設定を行うVBAを導入するとエクセル作業の効率が格段に上がります。
以下のような場合も印刷VBAを導入すれば一瞬で処理できる
・A資料の印刷
→Sheet1とSheet3を2部ずつ印刷
・B資料の印刷
→全Sheetを3部ずつ印刷
印刷VBAを導入してから作業効率が上がり、印刷ミスがなくなりました。印刷用紙の経費削減と作業効率のアップにつながる印刷VBAを紹介します。
目次
VBAを使った印刷設定① PrintOutメソッド
PrintOutメソッドとは、指定したSheetを印刷するものです。
メソッドとはオブジェクトを操作する命令文のこと。
指定したSheet…オブジェクト
PrintOut…メソッド
基本構造
指定したSheet.PrintOut
オブジェクトとメソッドの間には「.」ピリオドが使われる。
PrintOutメソッドのオブジェクト一覧
From | 印刷を開始するページの番号を指定 |
To | 印刷を終了するページの番号を指定 |
Copies | 印刷部数を指定 |
Preview | Trueの場合、印刷をする前に印刷プレビューを実行 |
ActivePrinter | アクティブなプリンターの名前を指定 |
PrintToFile | Trueの場合、ファイルへ出力 |
Collate | True の場合、部単位で印刷 |
IgnorePrintAreas | Trueの場合、印刷範囲を無視してオブジェクト全体を印刷 |
Sheetを指定して印刷
①シート名で指定する方法
基本構造
Sheet(“シート名").PrintOut
シート名で指定する場合、WorkSheetオブジェクトを使ってシートの宣言を行ってから印刷設定するのがおすすめ。
サンプル
上記のようにシート名を変更し、「シート(印刷2)」を印刷するVBAを作ってみる
1 | Sub 印刷() |
2 | Dim Ash As Worksheet |
3 | Set Ash = Sheets(“印刷1") |
4 | Dim Bsh As Worksheet |
5 | Set Bsh = Sheets(“印刷2") |
6 | Bsh.PrintOut |
7 | End Sub |
サンプルでは「シート(印刷2)」が印刷されます。
6行目をBsh.PrintOut → Ash.PrintOut に変更すれば「シート(印刷1)」が印刷される
最初にSheetの宣言を行うと、シートを区別するような複雑なプログラムを作るときにとても便利です。
②インデックス番号で指定する方法
基本構造
Sheet(インデックス番号).PrintOut
サンプル
先ほど紹介した同じもので、「シート(印刷2)」を印刷するVBAを作ってみる
1 | Sub 印刷() |
2 | Dim Ash As Worksheet |
3 | Set Ash = Sheets(“印刷1") |
4 | Dim Bsh As Worksheet |
5 | Set Bsh = Sheets(“印刷2") |
6 | Sheets(2).PrintOut |
7 | End Sub |
6行目のPrintOutメソッドの前のSheetオブジェクトだけを変更しただけ!
インデックス番号によるシートの指定はWorkSheetオブジェクトを使ったシートの宣言には関係なく、シートのタブが何番目なのかを示せば指定できる。
業務内容によってシート名の指定かインデックス番号の指定かを使い分けるようにしましょう。
セルで印刷範囲を指定して印刷
SelectメソッドのSelectionオプションを使ってセルを選択する。
基本構造
Sheetオブジェクト.Rangeオブジェクト.Select
Selection.PrintOut
シートを指定→セルを指定→選択→選択した範囲を印刷するというプログラム。
サンプル
シート(印刷3)に「印刷③-1」と「印刷③-2」というテキストが入力されている。
セルを指定して「印刷③-2」だけを印刷するVBAを作ってみる
1 | Sub 印刷() |
2 | Dim Ash As Worksheet |
3 | Set Ash = Sheets(“印刷1") |
4 | Dim Bsh As Worksheet |
5 | Set Bsh = Sheets(“印刷2") |
6 | Dim Csh As Worksheet |
7 | Set Csh = Sheets(“印刷3") |
8 | Dim Dsh As Worksheet |
9 | Set Dsh = Sheets(“印刷4") |
10 | Csh.Range(“E19").Select |
11 | Selection.PrintOut |
12 | End Sub |
テキスト「印刷③-2」だけ印刷されました。
シート名の指定とSelectオブジェクトを使えば、簡単に印刷範囲指定を行うことができる。
ページプレビューを確認する方法
PrintOutメソッドの後ろにPreview:=Trueと記入するだけ
印刷をする前に最終チェックとして、自動的に印刷範囲のプレビューが見れるのはとても便利な機能です。
プレビューは必ず設定することをおすすめします。
ページ指定をする方法
PrintOutメソッドの後ろにFrom:=整数 , To:=整数と記入するだけ
Fromは始まりのページ番号、Toには終わりのページ番号を入力(数字は整数のみ)
部数指定をする方法
PrintOutメソッドの後ろにCopies:=整数と記入するだけ
複数のオブジェクトを使ったサンプル
上記のようにシート(印刷1)にテキスト「印刷〇〇」を入力
1ページから3ページを2部印刷するときのプレビューを表示する。というVBAを作ってみる
1 | Sub 印刷() |
2 | Dim Ash As Worksheet |
3 | Set Ash = Sheets(“印刷1") |
4 | Dim Bsh As Worksheet |
5 | Set Bsh = Sheets(“印刷2") |
6 | Dim Csh As Worksheet |
7 | Set Csh = Sheets(“印刷3") |
8 | Dim Dsh As Worksheet |
9 | Set Dsh = Sheets(“印刷4") |
10 | Ash.PrintOut From:=1, To:=3, Copies:=2, Preview:=True |
11 | End Sub |
複数のオブジェクトを使用する場合でも、たった1行で処理が可能!
注意事項
PrintOutのすぐ後ろは「スペース」、各オブジェクトの間は「,」カンマを入力
スペースとカンマの使い分けを間違うとエラーが発生してしまう。
VBAを使った印刷設定② PageSetupオブジェクト
印刷VBAを導入するには、ページ設定をしっかりとしておく必要があります。
ページ設定がしっかりしている資料は、すぐにPrintOutメソッドを使って印刷することが可能です。
しかし
ページ設定が変更されてしまった場合、そのまま印刷VBAで印刷を実行してしまうとミスプリントになってしまいます。
そのため、ページ設定をするVBAと印刷をするVBAはセットで作ることをおすすめします。
PageSetupオプション一覧
プロパティ・設定値一覧(ページ)
Orientation | 印刷の向きを指定(縦:xlPortrait , 横:xlLandscape) |
Zoom | 拡大縮小印刷(10~400の数字) |
FitToPageWide | 次のページ数に合わせて印刷(横) |
FitToPageTall | 次のページ数に合わせて印刷(縦)/td> |
PageSize | 用紙サイズ(xlpaperA4 , xlpaperA3 , …) |
FirstPageNumber | 先頭ページ番号(整数) |
プロパティ・設定値一覧(余白
TopMargin | 上余白の大きさを指定 |
HeaderMargin | ヘッダーの余白の大きさを指定 |
LeftMargin | 左余白の大きさを指定 |
RightMargin | 右余白の大きさを指定 |
BottomMargin | 下余白の大きさを指定 |
FooterMargin | フッターの余白の大きさを指定 |
CenterHorizontally | 印刷時のシートのページレイアウトの設定を、水平方向の中央寄せ(余白を除く)にします。設定値はTrueまたはFalse |
CenterVertically | 印刷時のシートのページレイアウトの設定を、垂直方向の中央寄せ(余白を除く)にします。設定値はTrueまたはFalse |
PageSetupについて下記の記事で詳しく紹介しています。
ミス印刷をしない印刷VBAの構造
①作業プログラム
↓
②ページ設定プログラム
↓
③印刷プログラム
このようなVBAを作ってしまえば、作業から印刷まで一瞬で処理することが可能になります。
VBAを使った印刷設定③ 関数IFとPrintOutメソッドの組み合わせ
条件によって印刷物の種類が決まっている仕事って結構ありますよね。
・売り上げ金額が10万円以上なら報告書Aを印刷、10万円未満なら報告書Bを印刷
・取引先がA社なら資料Aを2部印刷、B社なら資料Bを1部印刷
・課長への報告書は1ページから3ページを印刷、部長への報告書は1ページから7ページを印刷
関数IFを使った印刷VBAは、上記のような印刷する種類が決まっているエクセルに導入すると絶大な効果を発揮します。
サンプル
セルb2に〇が記載されているとき印刷をする、それ以外はなにもしない。(印刷は1ページから3ページまでを2部)というプログラムを作ってみます。
1 | Sub 条件印刷() |
2 | If ActiveSheet.Cells(2, 2) = “〇" Then |
3 | ActiveSheet.PageSetup.PrintArea = (“A1:H39") |
4 | ActiveSheet.PrintPreview |
5 | ActiveSheet.PrintOut |
6 | ActiveSheet.PrintOut From:=1, To:=3 |
7 | ActiveSheet.PrintOut Copies:=2 |
8 | Else |
9 | End If |
10 | End Sub |
結果
実行すると印刷プレビューが表示され、印刷がされました。
私の職場では、印刷するものマニュアルを作ってミス印刷を防止する取り組みをしていましたが、この印刷VBAを導入してから不要なものになってしまいました。
下記の記事で関数IFについて詳しく紹介しています。
VBA初心者が効率化マクロを導入する方法
VBAなんて扱ったことないけどエクセル作業を自動化するマクロを導入したい!
このような問題を抱えながら日々のエクセル業務をこなしている方がおおくいらっしゃるのではないでしょうか。
こんな問題を解決する方法がこちら
- マクロの開発を外注に依頼する
- マクロが設定されたエクセルファイルをダウンロードする
- 参考書やネットでVBAスキルを身に付ける
VBAの勉強を始める前は上記の方法で効率化マクロを導入していました。
完成されたマクロを使ってエクセル業務を処理する
↓
作業効率が2倍以上アップ!!
↓
便利すぎて自分でもマクロを設定したいと考え始める
↓
参考書やネットの情報でVBAスキルを身に付ける
↓
マクロ開発を代行できる程のスキルを習得
VBAは
他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
という特徴があります。
毎日のルーティーン作業にうんざりしている、だれでもできる単純作業に時間を費やしている、という方はあなたに合った方法でVBAを導入しちゃいましょう。
マクロの開発を外注に依頼する
マクロの開発を外注に依頼する導入方法は
VBAを全く扱えない方でもエクセル作業を自動化できる最も簡単な方法
です。
「こんなエクセル作業を自動化したい」「作った資料を自動的にPDFで保存したい」「決まった様式に写真を自動で貼り付けたい」
こんな感じで実現したい内容を依頼するだけで業務内容に合ったマクロを開発してくれます。

ガッツポーズの人
デメリットは、費用がかかることだけ。
開発内容、依頼先によってかかる費用は大きく異なります。
私が会社員の頃利用していた業者さんは1マクロあたり2万円~3万円の費用がかかりました。

疑問がある人
ちなみに、マメBlogでもエクセルマクロ開発代行サービスを承っています。
開発内容の確認、VBAコードの設定、動作確認後の調整、など全ての工程を私(マメ父ちゃん)が行っているので、
費用が安い!スピード納期!!
でやらせてもらっています。
ほとんど独学で身に付けたVBAスキルなので、内容によっては開発できないこともあるのでご了承ください。
ご相談、見積もり依頼は完全無料ですので気になる方は下記のリンクよりお問合せ下さい。
マクロが設定されたエクセルファイルをダウンロードする
VBA初心者でも『マクロが設定されたエクセルファイルをダウンロード』ですぐにエクセル作業を自動化することができます。
たとえば、
A4用紙に写真を貼り付けてコメントを入力する作業を自動化したい!という場合、
『写真を貼り付けるマクロ』が設定されたエクセルファイルをダウンロードすれば問題解決です。
実際に、『写真を貼り付けるマクロ』をダウンロードして使っている様子がこちら

ガッツポーズの人
『マクロが設定されたエクセルファイルをダウンロード』する導入方法は、
VBA初心者でもマクロを導入できる、費用が安い、
というメリットがあります。
しかし
VBAに関する情報が多く公開されているとはいえ、ネット上で想定するマクロは見つけることが難しい
というデメリットもあります。

ガッツポーズの人
個人ブログやファイルを販売できるサイト「note」や「Tips」ではいろんなマクロの情報が掲載されているので是非参考にしてみてください。
今までマメBlogで受注した効率化マクロを下記のnoteで掲載していますので併せてチェックしてみてください。
参考書やネットでVBAスキルを身に付ける
先程も紹介しましたが、
VBAは他のプログラミングに比べて参考書やネットで紹介されている情報量が多いので初心者でも導入しやすい
プログラミングです。
言い換えると、
情報量が豊富なので自分で勉強できちゃう
ということです。
私のVBAスキルはほとんど独学で身に付けたもので、
考えた処理のほとんどをVBAで表現できるレベルにまで到達した!
と思っています。
私の作ったマクロをプロのプログラマーが見れば、
お前の書くコードはインチキだ!「変数の宣言」とか「引数」を正しく使えよ!!
と感じるはずです。
でも、
私からすればどうでもいい!!!想定した内容を正しく処理できればよくないですか!?
独学であっても『写真を貼り付けるマクロ』『全てのシートをPDF出力するマクロ』『連番を振るマクロ』など、
業務内容に合ったマクロを開発できるようになれます。
独学でVBAスキルを身に付けるコツは、
エラーが発生してもいいからひたすらコードを書く、なんでもいいからエクセル作業をマクロ化してみる
です。
とは言っても、全くの知識0の方は何をすればいいかわからないですよね。
VBA知識0の初心者の方は、参考書『たった1秒で仕事が片づくExcel自動化の教科書【増強完全版】』を読んでみてください。
VBAの知識0の方でもすいすい読み進められる内容になっています。
やさしい内容にも関わらず「え!!VBAを使えばこんなことできるの!?」と感動すると思います。
実際に私はこの参考書を読んでからVBAの勉強を始めました。

ひらめく人
VBAの魅力を発見した後は、
ひたすら自動化したい処理を実現するコードを書くだけ
です。
【VBA 写真を貼る】、【VBA PDF出力】、のようにネット検索すれば知りたいコードをすぐにゲットできます。
実現したい処理に向かって、「調べる→書いてみる→エラーを改善する→調べる」を繰り返していると
自然といろんなマクロが作れるようになっているはずです。
VBAに興味が湧いてきたという方は今からVBA学習をスタートさせちゃいましょう。
ディスカッション
コメント一覧
まだ、コメントがありません