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はかなりおすすめ
デスクワークをしている方にとって、印刷をするということはあたりまえの行為ですよね。
私が毎月行っている印刷業務
・会議資料の印刷
ページ番号を入れて5部印刷
・請求書の印刷
ヘッダーに内容を入れて印刷
・検査データ報告書の印刷
ページ指定をして印刷
他にもありますが印刷をするという行為でかなりの時間を費やしています。
このあたりまえの行為を自動化することで、作業効率を格段にあげることができます。
ディスカッション
コメント一覧
まだ、コメントがありません