こんにちは!仕事効率化コーチのカフェインレスです。
今回は、多数の書式がある場合の自動化印刷システムの作成方法です。
前回は、「データベースを利用」した、「書式が1パターン」の時の自動印刷システムを作成しました。
今回は、「書式が2パターン以上」あるときの自動印刷システムを作成します。
例として、3パターンの書式をランダムに使っている印刷システムを紹介します。
「印刷システム」としていますが、紙でのプリントアウトだけでなく、PDF化やメール、
FAXなどにも応用可能です。
ややこしそうですが、中身を見てみると結構簡単なので、必要であればトライしてみてください。
完成するとすごく時間が短縮できますよ^^
VBAを書く前の準備
前回の記事で、1パターンの書式で自動印刷システムを作成しました。
たった7行のVBAで完成する成績表などの自動印刷システムの作り方
今回は、これを2パターン以上の書式に変更します。
下準備として、3パターンの書式を作成したエクセルを準備しましたので、下記からダウンロードしてください。
成績表の自動印刷システム-3書式準備
※前回の記事と少し変更しています。変更点は変更点シートをご参照ください。
現在このエクセルのVBAマクロをそのまま実行すると、1 – 50番までの出席番号のデータが、
一瞬でザーッと表示される、というだけの謎のシステムとなっています。
再生するには、下記の再生ボタンを押してください。
※このページの開き方がわからない方は、こちらの記事をご覧ください。
印刷機能は、誤印刷を防ぐためコメントアウトさせています。
プログラミングにおけるコメントというのは、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=”https://gohomeasap.com/wp-content/uploads/2018/06/MultipleFormats2.png”>
「印刷」のコードが、「Select Case」によって分岐されています。
この分岐により、1-3-任意の書式で印刷が可能になりました。
完成したエクセルはこちらに置いておきます。ご自由にダウンロードしてください。
成績表の自動印刷システム-3書式
印刷範囲の指定方法
上記の式では、いかに少ない文字数で書くか、ということにこだわってVBAマクロを作成しています。
ややこしくなりますが、無駄な印刷をなくすためにも、できれば印刷範囲は指定した方が良いと思います。
Worksheets(“Format1”).Printout
よりも、下記ように印刷範囲を指定したほうが、印刷が間違いなく行われます。
Worksheets(“Format1”).Range(“A1:H100”).Printout
ちなみに、こちらを指定しても印刷が上手く出来ない場合は、
各書式で印刷プレビューを見ながら書式の印刷設定をいじって貰えたらいいのかな、と思います。
より使いやすいシステムにするためには
今回のシステムは、1から50まですべてを各書式に印刷しています。
しかし、28番だけ印刷したい場合とかもあると思います。
そこで、より使いやすいシステムにするために、
ボタンと、エクセルのセルへの記述で、印刷枚数をコントロールする方法を、
簡単なので解説しようと思います。
まず、範囲指定箇所を確定します。
この辺りが空いているので、ここに作成したいと思います。
実際に作成してみました。
関数も全く使っていません。直接入力しただけです。
今からこの四角で囲った部分を変更していきます。
具体的には、エクセルの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セルは、エクセルで開始位置と書いた右側のセルのことです。
※ここから混同を避けるため、C9セルの値を少し変更しています。
このVBAマクロを動かすと、
startNUMはC9セル、endNUMはC10セルなので、
startNUMには20、endNUMには22が入ります。
ですので、このVBAマクロは今、20から22番を指定して印刷することができるようになりました。
ボタンを付ける
印刷範囲の指定は、「開始」と「終了」を変数にすることでできましたので、
次は簡単に起動できるように、ボタンを付けたいと思います。
ボタンをクリックするだけでVBAマクロを起動させることが出来るので、
VBAをより身近に感じることができるようになります。
ボタンの設置方法は簡単で、開発タブ→挿入→ボタン→クリックで簡単に設置することができます。
クリックでボタンを作成したら、次はボタンに割り当てるVBAマクロを選択します。
設置したいVBAマクロをクリックし、OKを押すだけです。
右クリックでボタンのテキストを変更すると、この様な見た目になります。
今後はこのボタンを押すだけで、いつでも印刷ができるようになります。
まとめ
今回は、データベースからのデータの呼び出しに、複数の書式が合った場合の解説を行いました。
実際、複数の書式がどの程度あるかわかりませんが、Select Caseを使うことで、
簡単に複数の書式にデータを割り当てることができました。
ただ、今回は少し難しかったと思います。
ここまで連いてこれたということは、かなりエクセルのレベルが上がっているので、
自信を持ってくださいね。