サンプル

職務上請求書の定型用紙に印字(エクセルVBA)

今回は、職務上請求書をエクセルで作ってみましょう。

職務上請求書は、弁護士会から購入する定型用紙を使わなければならないので、エクセルでは無理なんじゃないですか?

その定型用紙にエクセルで印字すれば大丈夫ですよ。

それだったら、「すごい位置合わせPRO」とか、それ専用のアプリがいろいろありますよね。

そうですね。でも、そういったアプリが使えない環境で勤務されている方もいますし、エクセルならばデータベースから自動入力させるとか、より使いやすく発展させることもできます。

VBAを使わなければだめなんですよね?

そんなことは、ありません。印刷自体は、ワークシートの機能だけでできちゃいます。ただ、簡単なVBAを使うとより便利になります。今回は、「マクロの記録」という機能を使って、簡単に自動化を実現してみましょう。

ダウンロード

サンプルファイルは、こちらからダウンロードしてください。

職務上請求書の様式は、一般に公開されていません。このため、サンプルファイルには、独自に作成したダミーの様式を用いています。ご使用にあたっては、実際に使用する様式を読み込んでください。

ワークシートの作成

ワークシートの背景に職務上請求書の画像を表示し、それにセルを合わせて入力します。印刷するときは、背景画像を印刷しないようにして、定型用紙に文字だけを印刷するようにします。

その方法は、こちらのサイトに詳しく説明されています。目からうろこのテクニックを紹介して下さった相澤裕介様に感謝申し上げます。

この手順で、職務上請求書を印刷できるようにワークシートを作成してみましょう。

職務上請求書のスキャン

まず、スキャナーを使って、職務上請求書をjpeg形式でスキャンします。(png形式でも大丈夫です。)

職務上請求書の書式は一般に公開されていないので、この記事では、こちらのダミーの職務上請求書を使って、話を進めます。

スキャナーで読み取ったA用紙の画像

画像の挿入

次にエクセルを起動して、ワークシートにスキャンした画像を貼り付けます。このとき、シートにそのまま張り付けてしまうと文字が入力できなくなってしまうので、「ヘッダー」に貼り付けます。ここがポイントです。

「ページレイアウト」-「ページ設定」をクリックします。

「ヘッダー/フッター」ー「ヘッダーの編集」をクリックします。

「図の挿入」をクリックします。

「ファイルから」をクリックし、スキャナーで読み取った画像を選択し、「OK」をクリックします。

表示方法を「ページ レイアウト」に切り替えると画像が表示されます。

画像の調整

表示された画像を見て分かるとおり、画像の周りに余白ができてしまっています。この余白をなくし、かつ、印刷する職務請求書と同じ大きさで同じ位置になるように画像を調整しなければなりません。
「すごい位置合わせPRO」のような専用アプリ(同じようなアプリがいくつもあるようですが、他は使ったことがないので...)は、これを自動でやってくれるのです。でも、エクセルでは手動でやるしかありません。

まず、「ページ設定」ですべての余白を0に設定します。

次に「印刷」ー「プリンターのプロパティ」を開き、「フチなし」に設定します。

「フチなし」の設定ができないプリンターの場合は、後ほど説明する要領で図をトリミングして調整します。

この状態で印刷プレビューを表示させると、ページ一杯に背景が印刷されるようになっているはずです。(「印刷する対象がありません」と表示される場合は、どこかのセルに文字を入力してから、やり直してください。)

この状態で試し印刷を行い、実際に印字する職務上請求書と重ね合わせてみて、ずれがないことを確認します。

ズレている場合は、次の要領で図の大きさと位置を調整します。

「ページ設定」ー「ヘッダー/フッター」ー「ヘッダーの編集」をクリックし、&[図]の入力されているセルが選択された状態で、「図の編集」をクリックします。

「図」を選択して、トリミング範囲を設定します。-(マイナス)の値も使えます。

「サイズ」の設定が必要な場合もあるかも知れません。

修正したら、再度印刷してズレを確かめます。ズレがなくなるまでこれを繰り返します。
ちょっと大変ですが、これができていないと文字の位置がずれてしまうので、根気よく繰り返してください。

セルの調整

背景画像が準備できたら、それに合わせてワークシートのセルの幅と高さを調整します。

一昔前は、こういう場合にはセルを方眼紙のように縦横同じ大きさにそろえておいて、セルを連結させて調整するというのが流行っていました。そういうやり方でも良いのですが、職務上請求書の場合は、けっこう細かい位置の調整が必要ですし、あとからデータベースを組み込もうなんて時にセルの番地がとても分かりにくくなるのでお勧めしません。セルの連結箇所ができるだけ少なくなるように調整した方が良いでしょう。

できあがりは、こんな感じです。文字列の配置を設定する必要があるかもしれません。余計なセルに入力してしまわないように、セルをロックするのも良いでしょう。そこらへんは、ご自由に。

ここまでの手順が必要なのは、最初の1回だけです。出来上がったエクセルファイルを保存しておけば、次回からは文字を入力して、印刷するだけです。

文字の入力

セルの調整が終わったら、文字を入力してみましょう。

文字を入力すると背景の画像が乱れる場合がありますが、画面をスクロールすると元に戻ります。

入力した後は、こんな感じです。

印刷

印刷する際には、そのまま印刷すると背景画像も印刷されてしまいます。このため、印刷する前に「ページレイアウト」ー「ページ設定」ー「ヘッダー/フッター」ー「ヘッダーの編集」ー「図の書式設定」ー「図」の画面で、「明るさ」を100%にして背景画像を非表示にします。

すると背景画像が表示されなくなり、文字だけを印刷することができます。正式の職務上請求書に印刷する前に、テスト印刷を行ってくださいね。

印刷が終了したら、「明るさ」を50%に戻してやれば、背景画像を再表示できます。

別の種類の職務上請求書についても、これまで説明した要領で、別のシートに設定をします。

これで職務上請求書をエクセルで印刷できるようになりました。

設定に、すごく手間がかかりますね。

この記事の最初のところにあるサンプルファイルを利用してもらえれば、効率よく設定できると思います。

設定が終わったとしても、印刷のたびに、背景画像を消したり、元に戻したりするのが面倒です。

そこは、マクロを使えば自動化できます。ここからは、その方法を説明してゆきます。

マクロの作成

このままでも使えなくはないのですが、印刷するたびに背景画像の設定をやり直すのが面倒です。マクロを使って、背景画像の非表示と再表示を切り替えるようにしてみましょう。

エクセルの初期設定では、「開発」タブが表示されていないので、マクロの編集ができません。設定ができていない方は、下のサイトを参考に設定を行ってください。

マクロの記録

今回のようなマクロは、「マクロの記録」という機能を使うと簡単に作ることができます。

まず、背景画像を非表示にするマクロを作ります。

「開発」ー「マクロの記録」をクリックしてください。

「マクロの記録」というダイヤログが表示されるので、マクロ名とショートカットキーを入力し「OK」をクリックしてください。

これでもう「マクロの記録」が始まっています。
この状態で背景画像を非表示にする操作を行ってください。

非表示になったら、「開発」ー「記録終了」をクリックしてください。

同じように背景画像を再表示するマクロを作ってください。

記録を終了したならば、設定したショートカットキーを押してみてください。背景の非表示と再表示が行えるはずです。

画面をスクロールしないと、背景画像が変化しない場合があります。

うまくいきましたか?

できました! マクロ、簡単じゃないですか!

そうなのですが、これで満足していては進展がありません。ぜひ、次のステップに進んで、より理解を深めてください。

マクロの確認と修正

「開発」ー「Visual Basic」をクリックして、VBE(ビジュアル・ベーシック・エディタ)を起動してください。

左側のプロジェクトの画面から「標準モジュール」の「Module 1」を選択するとこのようなコードが表示されるはずです。

最初に「背景の非表示」、その下に「背景の再表示」のプログラム・コードが記載されています。これが、「マクロの記録」で自動的に作られたマクロです。

非常に複雑ですが、実は、ここには不要なものが多く含まれています。「マクロの記録」では、「OK」ボタンを押した際に行われるすべての設定が記録されてしまっているのです。
今回のマクロに必要なのは、次の部分だけです。VBAを知らない方でも、何をどう設定しているか、なんとなく分かりますよね。

Sub 背景の非表示()
    ActiveSheet.PageSetup.LeftHeaderPicture.Brightness = 1
End Sub
Sub 背景の再表示()
    With ActiveSheet.PageSetup.LeftHeaderPicture
        .Brightness = 0.5
    End With
End Sub

さらに「背景の再表示」の部分は、次のように書き換えることができます。こちらも、なんとなく分かると思います。

Sub 背景の非表示()
    ActiveSheet.PageSetup.LeftHeaderPicture.Brightness = 1
End Sub
Sub 背景の再表示()
    ActiveSheet.PageSetup.LeftHeaderPicture.Brightness = 0.5
End Sub

不要なコードを削除すると、次のようになります。

エクセルの画面に戻ってから、マクロを動作させてみてください。
どうでしょうか? 正常に動くはずです。

画面をスクロールしないと、背景画像が変化しない場合があります。
また、ショートカットが一旦削除されてしまっている可能性もありますので、「開発」ー「マクロ」ー「オプション」をクリックして再設定してください。

マクロの自動実行

これで「マクロの記録」は使いこなせるようになりました。でも、印刷するたびにマクロを起動させるのも面倒ですよね。イベントプロシージャという機能を使えば、印刷を行う前と後に、それぞれのマクロを自動実行させることができます。

今回のマクロの自動実行は、「ThisWorkbook」という部分に、次のコードを入力することで実現できます。VBAを使ったことのない方でも、どのタイミングで何を行っているか、なんとなく分かると思います。

Private Sub Workbook_BeforePrint(Cancel As Boolean)
'印刷前に背景画像を見えなくする
    ActiveSheet.PageSetup.LeftHeaderPicture.Brightness = 1
    
    '印刷後の処理を呼び出す
    'Workbook_AfterPrintというイベントプロシージャが存在しないため、
    '印刷前にOntimeで実行し、実際には印刷後に実行されるようにします。
    'このテクニックについては、次のサイトを参考にしました。
    '印刷前と印刷後のイベントを制御する
    'https://www.officelabo.net/vbaskill/vba20.html
    
    Application.OnTime Now(), "ThisWorkbook.After_Print"
End Sub

Private Sub After_Print()
'印刷後に背景画像を見えるようにする
    ActiveSheet.PageSetup.LeftHeaderPicture.Brightness = 0.5
End Sub

サンプルファイルには、こちらのマクロを使っています。画面上では背景が見えていますが、何も操作しなくても、印刷したものには背景が印刷されていないはずです。

「なんとなく」ではなく、ちゃんと理解したいと思った方は、VBAを基礎から勉強する必要があります。VBAアセットでは、こちらの書籍をお勧めしています。

どうでしたか?

マクロを使うと、どういう場合に便利なのかが分かりました。いつも同じ操作を繰り返すような場合には、「マクロの記録」機能を使うだけでも業務の効率化ができますね。

そうですね。VBAを勉強して、自分でコードが書けるようになっても、「マクロの記録」は有効です。すべてのコードが頭に入っているわけではないからです。今回の事例のように、「マクロの記録」を使ってから、必要な部分を抜き出して、修正を加えるという、手順を踏むことは少なくありません。

コメント

タイトルとURLをコピーしました