はじめに
複写伝票を利用して領収書を発行することが多いかもしれませんが、EXCELで簡単に管理ができると金額の集計など便利になったりします。
一覧表にデータを打ち込んで領収書&領収書(控)を発行するEXCELを作成しましたので公開します。
ダウンロード
こちらからダウンロードしてご利用ください。
※ZIP圧縮してありますので任意のフォルダに解凍してご利用ください。
※シートの保護をしておりますがパスワードは設定しておりません。
ちょこっと解説
一覧表シート
一覧表シートにデータを入力し管理番号を入力して「領収書プレビュー」ボタンを押すとプレビュー画面が表示されます。
管理番号の範囲を指定して「まとめて印刷」ボタンを押すと連続して印刷されます。この場合はプレビュー画面では無く直接印刷されます。
「一覧表クリア」ボタンを押すと一覧表の入力データが全てクリアされます。
領収書シート
領収書シートはA4縦で上段に領収書、下段に領収書(控)が印字されます。
一覧表シートの「領収書プレビュー」か「まとめて印刷」ボタンが押されたときに該当するデータを領収書シートにセットして印刷するシンプルな仕組みです。
VBA
Option Explicit Private Sub cmdClear_Click() ActiveSheet.Range("B3").Select ' ActiveSheet.Range("B3", ActiveCell.SpecialCells(xlLastCell)).Select ActiveSheet.Range("B3", "I500").Select Selection.ClearContents ActiveSheet.Range("B3").Select End Sub Private Sub cmdPrint_Click() Dim kanriNo As Integer On Error GoTo ErrHandler ' 管理番号取得 kanriNo = Range("K2").Value ' 領収書クリア Call ClearR ' 領収書にデータセット With Sheets("領収書") .Range("J1").Value = WorksheetFunction.VLookup(kanriNo, Range("A:H"), 2, False) .Range("J2").Value = WorksheetFunction.VLookup(kanriNo, Range("A:H"), 3, False) .Range("B4").Value = WorksheetFunction.VLookup(kanriNo, Range("A:H"), 4, False) .Range("F4").Value = WorksheetFunction.VLookup(kanriNo, Range("A:H"), 5, False) .Range("E7").Value = WorksheetFunction.VLookup(kanriNo, Range("A:H"), 6, False) .Range("E11").Value = WorksheetFunction.VLookup(kanriNo, Range("A:H"), 7, False) .Range("E8").Value = WorksheetFunction.VLookup(kanriNo, Range("A:H"), 8, False) End With ' 領収書プレビュー Sheets("領収書").PrintOut Preview:=True ActiveSheet.Range("K2").Select Exit Sub ErrHandler: MsgBox "管理番号の指定に謝りはありませんか?" & vbCrLf & Err.Description, vbExclamation End Sub Private Sub cmdPrintMulti_Click() Dim kanriNoS As Integer Dim kanriNoE As Integer Dim i As Integer On Error GoTo ErrHandler ' 管理番号取得 kanriNoS = Range("P2").Value kanriNoE = Range("R2").Value If kanriNoS > kanriNoE Then MsgBox "管理番号(始)は、管理番号(終)より小さく設定してください。", vbInformation ActiveSheet.Range("P2").Select Exit Sub End If For i = kanriNoS To kanriNoE ' 領収書クリア Call ClearR ' 領収書にデータセット With Sheets("領収書") .Range("J1").Value = WorksheetFunction.VLookup(i, Range("A:H"), 2, False) .Range("J2").Value = WorksheetFunction.VLookup(i, Range("A:H"), 3, False) .Range("B4").Value = WorksheetFunction.VLookup(i, Range("A:H"), 4, False) .Range("F4").Value = WorksheetFunction.VLookup(i, Range("A:H"), 5, False) .Range("E7").Value = WorksheetFunction.VLookup(i, Range("A:H"), 6, False) .Range("E11").Value = WorksheetFunction.VLookup(i, Range("A:H"), 7, False) .Range("E8").Value = WorksheetFunction.VLookup(i, Range("A:H"), 8, False) End With ' 領収書プレビュー Sheets("領収書").PrintOut Preview:=False Next ActiveSheet.Range("P2").Select Exit Sub ErrHandler: MsgBox "管理番号の指定に謝りはありませんか?" & vbCrLf & Err.Description, vbExclamation End Sub Private Sub ClearR() ' 領収書にデータセット With Sheets("領収書") .Range("J1").Value = Null .Range("J2").Value = Null .Range("B4").Value = Null .Range("F4").Value = Null .Range("E7").Value = Null .Range("E11").Value = Null .Range("E8").Value = Null End With End Sub
「領収書プレビュー」ボタンを押した場合は、cmdPrint_Click 部分が実行されます。
ここでは管理番号を取得して該当する行のデータを領収書シートにセットして印刷プレビューしております。
データをセットする前にクリアしておりますので、前のデータが間違って印字されることはありません。
「まとめて印刷」ボタンを押した場合は、cmdPrintMulti_Click 部分が実行されます。
ここでは管理番号の始めと終わりを取得して番号の入力の簡単なチェックをおこなっております。
管理番号の範囲をfor文で繰り返して処理しております。データをセットする前にはクリア処理も忘れずに実施しております。
「一覧表クリア」ボタンを押した場合は、cmdClear_Click 部分が実行されます。
ここでは一覧表シートのセルB3からデータの終わり(最終行)まで自動で選択したいところですが、シートが保護されていると
ActiveSheet.Range(“B3”, ActiveCell.SpecialCells(xlLastCell)).Select
が利用できないため今回は500行までを対象にクリアしております。
ActiveSheet.Range(“B3”, “I500”).Select
ActiveSheet.Range(“B3”, ActiveCell.SpecialCells(xlLastCell)).Select は、SHIFT+CTRL+ENDキーを押したときの範囲選択です。シートの保護を解除すれば正常に動作します。
シート保護の解除は「校閲」メニューの「シート保護の解除」をクリックすると解除できます。
最後に
印刷ボタンを領収書シートに設置したり、管理番号を入力した段階で領収書をセットするようにしたりと使い勝手を修正することは可能かと思います。
また、発行日の範囲指定で金額の集計をを行うなどもしてあげれば使いやすくなるかもしれません。
領収書のレイアウトを修正する場合は、VBA側のセルアドレス変更に注意してご利用ください。シートに行を挿入したりしてもVBA側は自動的に変更してくれませんので。