VBAだけでつくるテンプレート インボイス領収書作成1

invoreciptempeyecatch

こんにちは、じゅんぱ店長(@junpa33)です。

今回から何回かに分けて、インボイス領収書を作成するエクセルVBAツールのつくりかたを解説していきます。

初回の今回は、領収書のテンプレートを作成する方法についてです。

既存のテンプレートを使って、書類作成を行う場合のよくある ” あるある ” では、

  • テンプレの記述欄の大きさがマッチしなくて、セルサイズを変更して使ってしまうこと。
  • 次の使用からは、変更したセルサイズをまたまた変更しないといけなくなる。

なんてことは良くあります。

なので、そんな細かい部分での ” めんどくさい ” にも対処できるようにしたテンプレートにしています。

インボイス領収書テンプレートの作り方

invoreciptempp002

テンプレートをどのような方法で作るか?

普通にテンプレートをWebでググった時、多くの場合は「タイトルがあって罫線の枠があって記入項目が書かれていて、記入欄があって、二重線が引かれていて・・・」というような形式でのテンプレートが結果表示されます。普通のテンプレートです。

でもこの普通にあるテンプレートでは、表示形式を多少いじってしまうとテンプレートがすぐ壊れてしまいます。

なので、

ここで作成するテンプレートは、そのような不都合を排除するために、VBAコードからテンプレートを作成します。

全くのデフォルト状態のエクセルシートに、VBAコードから作られたインボイス領収書テンプレートを排出します。

こうすることで、再利用時を気にせず、その時々に合ったテンプレートの項目の表示変更も簡単に行うことが出来ます。

テンプレートを排出するエクセルVBA全コード

テンプレートは控え分も含めて2枚つづりになっています。(発行元名と社印は別項目で設定します。)

invoreciptempp001

テンプレート作成の全VBAコードは以下のようになります。

その前に少々の準備作業をまず行っておいてください。

コードをModule2にコピペして使用することも出来ます。

以下のVBAコードには、4つのプロシージャーから成っていて、VBEの標準モジュール(Module2)に記述しています。

VBA
Option Explicit
Function Flaga() As Boolean
    Dim ws As Worksheet
        For Each ws In ThisWorkbook.Worksheets
            If ws.Name = "インボイス領収書" Then
                Flaga = True
                Exit For
            Else
                Flaga = False
            End If
        Next
End Function
Sub 領収書Temp()
        If Flaga = False Then
            MsgBox "インボイス領収書シートが準備されていません。" & vbCrLf & _
            "先にシートを準備してください。", vbExclamation, _
                                                "インボイス領収書作成"
            Exit Sub
        End If

    Dim i As Long
        With Worksheets("インボイス領収書")
            .Select
'Hight
    '6ピクセル
            .Range("A9,A12,A33,A36").RowHeight = 4.5
    '7ピクセル
            .Range("A1,A5,A25,A29").RowHeight = 5.25
    '8ピクセル
            .Range("A24,A48").RowHeight = 6
    '16ピクセル
            .Range("A8,A10,A11,A15,A16,A17,A32,A34,A35,A39,A40,A41") _
                                                            .RowHeight = 12
    '18ピクセル
            .Range("A13,A14,A37,A38").RowHeight = 13.5
    '20ピクセル
            .Range("A2,A18,A19.A20,A21,A22,A23,A42,A43,A44,A45,A46,A47") _
                                                            .RowHeight = 15
    '23ピクセル
            .Range("A6,A7,A30,A31").RowHeight = 17.25
    '26ピクセル
            .Range("A3,A27").RowHeight = 19.5
    '25ピクセル
            .Range("A4,A28").RowHeight = 18.75
'Width
    '24ピクセル
            .Columns("A:AA").ColumnWidth = 2.38
    '16ピクセル
            .Columns(1).ColumnWidth = 1.38
    '32ピクセル
            .Columns(2).ColumnWidth = 3.38
    '38ピクセル
            .Columns(3).ColumnWidth = 4.13
    '15ピクセル
            .Columns(4).ColumnWidth = 1.25
'セル結合と罫線
            With .Range("C2:E4")
                .Merge
                .Borders.LineStyle = xlContinuous
                .Borders.Weight = xlHairline
            End With
            With .Range("C26:E28")
                .Merge
                .Borders.LineStyle = xlContinuous
                .Borders.Weight = xlHairline
            End With
            With .Range("I2:N3")
                .Merge
                .Borders(xlEdgeBottom).Weight = xlMedium
                .Borders(xlEdgeBottom).LineStyle = xlDouble
            End With
            With .Range("I26:N27")
                .Merge
                .Borders(xlEdgeBottom).Weight = xlMedium
                .Borders(xlEdgeBottom).LineStyle = xlDouble
            End With
            With .Range("T2:V2")
                .Merge
                .Borders(xlEdgeBottom).Weight = xlThin
                .Borders(xlEdgeBottom).LineStyle = xlContinuous
            End With
            With .Range("T26:V26")
                .Merge
                .Borders(xlEdgeBottom).Weight = xlThin
                .Borders(xlEdgeBottom).LineStyle = xlContinuous
            End With
            With .Range("S2,S26")
                .Borders(xlEdgeBottom).Weight = xlThin
                .Borders(xlEdgeBottom).LineStyle = xlContinuous
            End With
            .Range("R4:W4").Merge
            .Range("R28:W28").Merge
            .Range("C6:I6").Merge
            .Range("C30:I30").Merge
            With .Range("C7:J7")
                .Merge
                .Borders(xlEdgeBottom).Weight = xlThin
                .Borders(xlEdgeBottom).LineStyle = xlContinuous
            End With
            With .Range("C31:J31")
                .Merge
                .Borders(xlEdgeBottom).Weight = xlThin
                .Borders(xlEdgeBottom).LineStyle = xlContinuous
            End With
            With .Range("K7,K31")
                .Borders(xlEdgeBottom).Weight = xlThin
                .Borders(xlEdgeBottom).LineStyle = xlContinuous
            End With
            With .Range("E8:T8,E12:T12,E32:T32,E36:T36")
                .Borders(xlEdgeBottom).Weight = xlMedium
                .Borders(xlEdgeBottom).LineStyle = xlContinuous
            End With
            For i = 5 To 20
                With .Range(Cells(10, i), Cells(11, i))
                    .Merge
                    .Borders.LineStyle = xlContinuous
                    .Borders.Weight = xlThin
                    .Interior.Pattern = xlPatternGray8
                End With
            Next i
            For i = 5 To 20
                With .Range(Cells(34, i), Cells(35, i))
                    .Merge
                    .Borders.LineStyle = xlContinuous
                    .Borders.Weight = xlThin
                    .Interior.Pattern = xlPatternGray8
                End With
            Next i
            .Range("N30:P31").Merge
            .Range("E13:E14,E37:E38").Merge
            .Range("F13:T13,F37:T37").Merge
            .Range("F14:T14,F38:T38").Merge
            .Range("C15:T16,C39:T40").Merge
            .Range("C18:D18,E18:F18,G18:I18").Merge
            .Range("E19:F19,G19:I19").Merge
            .Range("C20:D20,E20:F20,G20:I20").Merge
            .Range("E21:F21,G21:I21").Merge
            .Range("C22:D22,E22:F22,G22:I22").Merge
            .Range("E23:F23,G23:I23").Merge
            .Range("C42:D42,E42:F42,G42:I42").Merge
            .Range("E43:F43,G43:I43").Merge
            .Range("C44:D44,E44:F44,G44:I44").Merge
            .Range("E45:F45,G45:I45").Merge
            .Range("C46:D46,E46:F46,G46:I46").Merge
            .Range("E47:F47,G47:I47").Merge
            .Range("K18:W22,K42:W46").Merge
            .Range("K23:M23,N23:V23").Merge
            .Range("K47:M47,N47:V47").Merge
            With .Range("C18:I23,C42:I47")
                .Borders.LineStyle = xlContinuous
                .Borders.Weight = xlHairline
                .BorderAround LineStyle:=xlContinuous, Weight:=xlThin
            End With
            With .Range("C18:I23,C20:I21,C42:I47,C44:I45")
                .BorderAround LineStyle:=xlContinuous, Weight:=xlThin
            End With
            With .Range("E18:E23,E42:E47")
                .Borders(xlEdgeLeft).Weight = xlThin
                .Borders(xlEdgeLeft).LineStyle = xlContinuous
            End With
        End With
End Sub

Sub セル表示設定()
        If Flaga = False Then
            Exit Sub
        End If
        With Worksheets("インボイス領収書")
            .Select
            With .Range("C2,C26")
                .Value = "売上代金の受取り書は、2百円の収入印紙を" & _
                                                "貼付してください。"
                .Font.Size = 6
                .WrapText = True
            End With
            With .Range("I2,I26")
                .Value = "領収書"
                .Font.Name = "游ゴシック"
                .Font.Size = 21
                .Font.Bold = True
                .HorizontalAlignment = xlCenter
            End With
            .Range("S2,S26") = "No."
            .Range("R4:W4,R28:W28").Font.Size = 10
            With .Range("K7,K31")
                .Value = "様"
                .Font.Size = 13
            End With
            With .Range("N30")
                .Value = "控"
                .Font.Name = "游ゴシック"
                .Font.Size = 21
                .Font.Bold = True
                .Font.Color = RGB(255, 0, 0)
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
            End With
            With .Range("E10:T11,E34:T35")
                .Font.Size = 13
                .Font.Bold = True
                .HorizontalAlignment = xlCenter
            End With
            With .Range("E13,E37")
                .Value = "但し"
                .Font.Size = 9
            End With
            .Range("F13:F14,F37:F38").Font.Size = 10
            With .Range("C15,C39")
                .Value = "上記の金額正に領収いたしました"
                .Font.Size = 15
            End With
            With .Range("B18,B42")
                .Value = "内訳"
                .Font.Size = 9
            End With
            .Range("C18,C20,C22,C42,C44,C46") = "税率"
            .Range("C19,C43") = "10"
            .Range("C21,C45") = "8"
            .Range("C23,C47") = "非課税"
            .Range("E18,E20,E22,E42,E44,E46") = "税抜金額"
            .Range("E19,E21,E23,E43,E45,E47") = "消費税額"
            .Range("K23,K47") = "登録番号"
            With .Range("C18:I23,C42:I47")
                .Font.Size = 7.5
            End With
            .Range("D19,D21,D23,D43,D45,D47") = "%"
            .Range("C19:D19,C21:D21,D23").Font.Size = 9
            .Range("C43:D43,C45:D45,D47").Font.Size = 9
            .Range("G18:I23,G42:I47").Font.Size = 9
            With .Range("K23:M23,K47:M47")
                .Font.Size = 9
                .HorizontalAlignment = xlRight
            End With
            With .Range("N23,N47")
                .Font.Size = 9
                .HorizontalAlignment = xlLeft
            End With
        End With
        Worksheets("発行データ入力").Select
        Worksheets("インボイス領収書").Select
        MsgBox "インボイス領収書テンプレートの作成が完了しました。", _
            vbInformation, "インボイス領収書作成"
End Sub

Sub テンプレートオールクリア()
        If Flaga = False Then
            MsgBox "インボイス領収書シートがありません。" & vbCrLf & _
                "シート内容をクリアすることは不可能です。", vbExclamation, _
                "インボイス領収書作成"
            Exit Sub
        End If
        With Worksheets("インボイス領収書")
            .Select
            .DrawingObjects.Delete
            .Cells.UseStandardHeight = True
            .Cells.UseStandardWidth = True
            .Cells.Clear
        End With
End Sub

VBAコード説明

作成したVBAは殆ど表示設定系の動作コードですので、特に問題になるような部分はないかと思います。

それぞれでの参考記事を参考にしてください。

Functionプロシージャー「Flaga」

インボイス領収書を作成するエクセルシートは、 ” インボイス領収書 ” シートに表示するように設定しています。

事前に” インボイス領収書 ” シートが準備されていないとプログラムが起動しない設定になっています。

Functionプロシージャーで「FlagaがTrue」になっているかを調べています。

「領収書Temp」プロシージャー

セルサイズとデータの表示位置、セルの結合、罫線の設定などを記述しています。

セル位置指定が細かいので指定ミスに注意が必要です。

「セル表示設定」プロシージャー

セルに表示する項目の表示を設定しています。

「テンプレートオールクリア」プロシージャー

エクセルシートをデフォルトの状態に戻すプログラムです。

クリアするシート「インボイス領収書」シートが存在するかどうかをチェックし、存在する場合にプログラムを実行します。

インボイス領収書テンプレート作成に事前準備すること

invoreciptempp003

次の2つの項目を事前に行っておいてください。

  1. 新規エクセルBOOKを起動して、ブックネームを「インボイス領収書作成.xlsm」とします。
  2. エクセルBOOKをリネームした後、再起動してシート名を変更します。
    • Sheet1を ” インボイス領収書 ”
    • Sheet2を ” 発行データ入力 ”
    • Sheet3を ” 印影 ”

まとめ

invoreciptempp004

VBAコードでテンプレートを作成することで、作成したテンプレートが壊れても、何度でも再生することが出来ます。

VBAコードの実行は別に作成するユーザーフォームのコマンドボタンから実行できるようにします。

次回は、このテンプレートに入力するデータをまとめる入力表を作成し入力作業をVBAコード化していきます。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min