【VBAで印刷】エクセル作業をボタン1つで楽にするプログラム
この記事はエクセルの拡張機能VBAを使ってボタン1つで印刷が出来るようなプラグラムを説明しています。
記事の内容
こんにちは、Fujiya(@fujiya_xyz)です。
今回はエクセル作業でよく使う「印刷」をカンタンにするプログラムを組んでいきたいと思います。
一概に”カンタンにする“と言っても色々な方法があると思うのですが、具体的には”任意のセル範囲をシートに設置したボタンを押せば印刷が出来る“ようにしたいと思います。
今回は、僕が以前に作成した「入力自動化ツール」に機能を追加していく感じで説明をしていきたいと思います。読んだことの無い方はそちらを参考にしていただくと理解がスムーズだと思います。この記事を読んだ後でも問題ないです。
参考:入力自動化ツールの作成記事
【excel】vba初心者向け『入力フォーム』の作り方”オブジェクト作成編”
入門用のプログラムの解説をします。主にコードを記述する前の準備編。
【VBA印刷プログラム】ボタンでカンタン印刷
手順はこんな感じとなります。以下。
- オブジェクト設置
- コード記述
- 動作確認
3つの工程となりますが、作業は単純で簡単です。
シートにボタンを設置する
まずは「印刷ボタン」を設置していきます。
やり方は、以前に別の記事で説明した”手動で入力フォームの表示をする“と同じですので参考にしてください。
違うのはプロパティ設定のキャプションが「印刷する」になるくらい。
文字のスタイルや色なども自由に設定できます。
今回使用するプログラムコード
まず最初に今回使用するコードの説明をしていきます。
ワークシート.PageSetup.オブジェクト(印刷設定)
ワークシート.PrintOut(印刷実行)
この2つです。印刷設定をしてから、実行するのは通常の流れと一緒。それがコードになるだけの話です。
PageSetupプロパティ
印刷設定の命令です。
ワークシート.PageSetup.オブジェクト(印刷設定)
「縦向き・横向き」「範囲」「サイズ」など様々ことを設定できます。
ぶっちゃけ、コードにするとわかりづらいですよね(笑)。
これは決まりごとになります。実際どのように使うのかを見ていただいた方が分かりやすいです。下で説明しているので参考にしてみてください。
PrintOutメソッド
これが印刷するプログラムのコードです。
ワークシート.PrintOut(印刷実行)
これを記述するだけで印刷が可能になりますが、上記した印刷設定のコードを習得していないと、自分の理想の印刷が出来ません。
「PageSetup」と「PrintOut」はセットです。
コードを記述していく
デザインモードのまま、オブジェクトに設置した印刷ボタンを選択、右クリックし「コードを表示」を選択します。
Private Sub CommandButton2_Click()
【スペース】
End Sub
すると、編集画面(VBE)で「コマンドボタン2」を押したとき動作するプログラムとして、上記のコードが表示されます。
【スペース】の部分に「印刷する」のコードを記述していくのですが、まずは「範囲」や「ページ数」「向き」などの”印刷設定“をプログラムしていきます。
ちなみに本来プログラマーは変数を利用してコードが見やすい・管理しやすいように省略しますが、初心者だと逆に分かりづらくなるので、この記事ではしていません。
印刷範囲の設定
印刷の範囲は『一番上から最新の入力データまで』となります。以下。
Worksheets("Sheet1").PageSetup.PrintArea = "A1:D" & Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Sheet1").PageSetup.
がワークシート1の”ページの設定“となります。
それに続く.PrintArea
が”印刷の範囲”です。
このコードは、「ワークシート1」の印刷するエリアは『A1からD列の最後のデータが入っている行までの範囲』ということになります。
ちょっと分かりづらいと思うのですが、 & Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
でD列の最終セルの行を取得しています(最終セルの取得は覚えるしかない)。
VBAの範囲選択については下のリンクの記事で解説しているので併せて読んでいただくと理解がスムーズ化と思います。
VBAでセル範囲を設定する
【VBAでセルを選択する】プログラミングで「セル」「範囲」を操作
VBAで「セル選択」をします。「単一セル」「複数選択」「範囲選択」などのコードを説明します。
印刷の向き
これは用紙を”縦”にするか”横”にするかという設定です。今回は「縦」にするので。
Worksheets("Sheet1").PageSetup.Orientation = xlPortrait
という感じになります。ちなみに縦横の設定は以下となります。
- 縦⇒xlPortrait
- 横⇒xlLandscape
幅と高さ
Worksheets("Sheet1").PageSetup.FitToPagesWide = 1
上記は『幅を1ページに収める』というプログラムになります。
『高さを1ページに収める』のは.FitToPagesTall = 1
というコードをもう1つ追加します。今回は使いません。
ページの中央に印刷する
印刷した時に左に寄ってしまうのを防ぎ、真ん中に表示するためのコードです。
Worksheets("Sheet1").PageSetup.CenterHorizontally = True
これは絶対に必要ではありません。完全に見栄え重視。
印刷を実行する
Worksheets("Sheet1").PrintOut
このボタンの根幹のコードですね。印刷の設定をした後に印刷するので一番下に記述します。
わりと設定項目が多いですが、まとめると以下になります。
Private Sub CommandButton2_Click()
'印刷範囲の設定
Worksheets("Sheet1").PageSetup.PrintArea = "A1:D" & Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
'印刷の向き縦か横か
Worksheets("Sheet1").PageSetup.Orientation = xlPortrait
'1ページの幅と高さに収まるように印刷します
Worksheets("Sheet1").PageSetup.FitToPagesWide = 1
'ページ中央に印刷
Worksheets("Sheet1").PageSetup..CenterHorizontally = True
'印刷の実行
Worksheets("Sheet1").PrintOut
End Sub
コードを記述したらシートに戻り『デザインモード』を解除してから、ボタンをクリックしてみましょう。印刷が実行されるはず。
エラーになる場合には、コードの誤りが無いかもう一度確認してみてください。
これで作業は完了です。
【VBA印刷プログラム】ボタンでカンタン印刷|まとめ
今回は『印刷プログラム』を組んでみました。
「設定」と「実行」のコードはセットになります。それほど難しいコードでは無いので押さえたいですね。
印刷のコードが組めるようになると様々な作業場面で自動的に印刷できるようになります。例えば「登録をした後」「転記をした後」など。
作業の自動化という点では下のリンク「自動保存」と同じで、かなり多用することとなるコードだと思います。
参考:自動保存のプログラム記事
【エクセル】VBAで自動保存プログラムを作ってみる
エクセルVBAで自動保存プログラムの解説です。
今回の記事は以上になります。
最後まで読んでいただきましてありがとうございました。