エクセルVBAを使った多数の書式に対する自動印刷システムの作り方

  • このエントリーをはてなブックマークに追加
  • Pocket
自動印刷システムを他書式に応用

こんにちは!仕事効率化コーチのカフェインレスです。
今回は、多数の書式がある場合の自動化印刷システムの作成方法です。

前回は、「データベースを利用」した、「書式が1パターン」の時の自動印刷システムを作成しました。
今回は、「書式が2パターン以上」あるときの自動印刷システムを作成します。

例として、3パターンの書式をランダムに使っている印刷システムを紹介します。
「印刷システム」としていますが、紙でのプリントアウトだけでなく、PDF化やメール、
FAXなどにも応用可能です。

ややこしそうですが、中身を見てみると結構簡単なので、必要であればトライしてみてください。
完成するとすごく時間が短縮できますよ^^

VBAを書く前の準備

前回の記事で、1パターンの書式で自動印刷システムを作成しました。
たった7行のVBAで完成する成績表などの自動印刷システムの作り方

今回は、これを2パターン以上の書式に変更します。
下準備として、3パターンの書式を作成したエクセルを準備しましたので、下記からダウンロードしてください。


※前回の記事と少し変更しています。変更点は変更点シートをご参照ください。
 
 
現在このエクセルのVBAマクロをそのまま実行すると、1 – 50番までの出席番号のデータが、
一瞬でザーッと表示される、というだけの謎のシステムとなっています。

再生するには、下記の再生ボタンを押してください。

VBAの再生ボタン
※このページの開き方がわからない方は、こちらの記事をご覧ください
 
 
印刷機能は、誤印刷を防ぐためコメントアウトさせています。

プログラミングにおけるコメントというのは、VBA(もしくはプログラム)の
記述ではなく開発者のコメントです、という意味で、
コメントアウトというのは、VBA記述をコメントとして処理することで、
VBAの処理を行わせないということです。

一言で言うと、コメントアウトした行はVBAを実行しない、という意味です。
 
 
コメントアウトはVBAの行の頭に「’」を付けることで簡単に行なえます。
なので、もし印刷もしてみたいなーという方は、最後から2番目の行の「’」を削除してください。

あと、50枚も印刷されたら困るので、For i = 1 to 50 を For i = 1 to 3 に変更してください。
これで、印刷されても3枚だけで済みますので。

この場合、Format1の書式で印刷が行われます。

3つの書式への自動印刷システムの構築

いよいよ、本記事のメインですね。
 
 
今回の場合は、必要な書式が3つありますので、Select CaseというVBAを用います。

Ifを用いても書くことが出来るのですが、複雑になりますし、あとで見返した時に分かりにくくなりますし、
4種以上の書式になっても複雑にならないSelect Caseをオススメします。

実際に書いてみるとこの様になります。

Sub autoprint()
Dim i As Long

For i = 1 To 50
Worksheets(“Cal”).Range(“B1”).Value = i

Select Case Worksheets(“Cal”).Range(“E1”).Value
Case 1
Worksheets(“Format1”).PrintOut

Case 2
Worksheets(“Format2”).PrintOut

Case 3
Worksheets(“Format3”).PrintOut
End Select

Next i
End Sub

赤文字で示したところが今回新たに付け加えた内容になります。
結構少ないでしょ?ややこしそう?

よく見るとそうでもないです。
実際にどういう事が書いてあるのか、解説します。


Select Case Worksheets(“Cal”).Range(“E1”).Value
‘CalワークシートのE1セルの値で、場合を選択してください。

Case 1
‘セルの値が1の場合
Worksheets(“Format1”).Printout
‘Formatシート1を印刷してください。

  Case 2
‘セルの値が2の場合
Worksheets(“Format2”).Printout
‘Formatシート2を印刷してください。

  Case 3
Worksheets(“Format3”).Printout
‘上記と同じ

End Select
‘Select Case の終了

要は、書式の指定ごとに印刷するシートを変更してね、と書いています。

書式が1つだった頃と比較した場合はこの様になります。
a href=”http://gohomeasap.com/wp-content/uploads/2018/06/MultipleFormats2.png”>自動印刷システムの多書式化
 
 
「印刷」のコードが、「Select Case」によって分岐されています。
この分岐により、1-3-任意の書式で印刷が可能になりました。
 
 
完成したエクセルはこちらに置いておきます。ご自由にダウンロードしてください。

印刷範囲の指定方法

上記の式では、いかに少ない文字数で書くか、ということにこだわってVBAマクロを作成しています。
ややこしくなりますが、無駄な印刷をなくすためにも、できれば印刷範囲は指定した方が良いと思います。

Worksheets(“Format1”).Printout

よりも、下記ように印刷範囲を指定したほうが、印刷が間違いなく行われます。
Worksheets(“Format1”).Range(“A1:H100”).Printout

ちなみに、こちらを指定しても印刷が上手く出来ない場合は、
各書式で印刷プレビューを見ながら書式の印刷設定をいじって貰えたらいいのかな、と思います。

より使いやすいシステムにするためには

今回のシステムは、1から50まですべてを各書式に印刷しています。
しかし、28番だけ印刷したい場合とかもあると思います。

そこで、より使いやすいシステムにするために、
ボタンと、エクセルのセルへの記述で、印刷枚数をコントロールする方法を、
簡単なので解説しようと思います。

まず、範囲指定箇所を確定します。
この辺りが空いているので、ここに作成したいと思います。
印刷範囲設定の準備

実際に作成してみました。
関数も全く使っていません。直接入力しただけです。
印刷範囲コントローラーの作成
 
 
これを今から先述のVBAマクロに加えていきます。
印刷範囲の変更

今からこの四角で囲った部分を変更していきます。
具体的には、エクセルのC9の入った数字からC10に入った数字まで範囲を指定します。
という意味に変更します。

まず、変数の宣言をします。
Dim startNUM as long
Dim endNUM as long

変数startNUMは数字(Long)ですよ、という意味です。
endNUMも同じです。

続いて、変数にデータを入力します。
startNUM = worksheets(“Cal”).Rnage(“C9”).value

startNUMは、worksheets(“Cal”)のC9セルの値を用います。という意味です。
endNUMも同じです。

C9、C10セルは、エクセルで開始位置と書いた右側のセルのことです。
C10セルのデータ確認
※ここから混同を避けるため、C9セルの値を少し変更しています。

実際に記述するとこの様になります。
印刷範囲を変数に

このVBAマクロを動かすと、
startNUMはC9セル、endNUMはC10セルなので、
startNUMには20、endNUMには22が入ります。

ですので、このVBAマクロは今、20から22番を指定して印刷することができるようになりました。
 
 

ボタンを付ける

印刷範囲の指定は、「開始」と「終了」を変数にすることでできましたので、
次は簡単に起動できるように、ボタンを付けたいと思います。

ボタンをクリックするだけでVBAマクロを起動させることが出来るので、
VBAをより身近に感じることができるようになります。

ボタンの設置方法は簡単で、開発タブ→挿入→ボタン→クリックで簡単に設置することができます。
エクセルのボタンの設置方法です。

クリックでボタンを作成したら、次はボタンに割り当てるVBAマクロを選択します。
設置したいVBAマクロをクリックし、OKを押すだけです。
ボタンに割り当てるVBAマクロを設定します。

右クリックでボタンのテキストを変更すると、この様な見た目になります。

今後はこのボタンを押すだけで、いつでも印刷ができるようになります。

まとめ

今回は、データベースからのデータの呼び出しに、複数の書式が合った場合の解説を行いました。

実際、複数の書式がどの程度あるかわかりませんが、Select Caseを使うことで、
簡単に複数の書式にデータを割り当てることができました。

ただ、今回は少し難しかったと思います。
ここまで連いてこれたということは、かなりエクセルのレベルが上がっているので、
自信を持ってくださいね。

  • このエントリーをはてなブックマークに追加
  • Pocket

SNSでもご購読できます。

コメントを残す

*

CAPTCHA