VBA

EXCELで領収書の発行管理

投稿日:

はじめに

複写伝票を利用して領収書を発行することが多いかもしれませんが、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側は自動的に変更してくれませんので。

 

スポンサードリンク

スポンサードリンク

-VBA
-, , ,

Copyright© あきらちんの技術メモ , 2024 All Rights Reserved Powered by STINGER.