こんにちは、じゅんぱ店長(@junpa33)です。
今回から何回かに分けて、インボイス領収書を作成するエクセルVBAツールのつくりかたを解説していきます。
初回の今回は、領収書のテンプレートを作成する方法についてです。
既存のテンプレートを使って、書類作成を行う場合のよくある ” あるある ” では、
- テンプレの記述欄の大きさがマッチしなくて、セルサイズを変更して使ってしまうこと。
- 次の使用からは、変更したセルサイズをまたまた変更しないといけなくなる。
なんてことは良くあります。
なので、そんな細かい部分での ” めんどくさい ” にも対処できるようにしたテンプレートにしています。
インボイス領収書作成の記事編成
- インボイス領収書作成ソフトの使い方とダウンロード
コンテンツ
インボイス領収書テンプレートの作り方

テンプレートをどのような方法で作るか?
普通にテンプレートをWebでググった時、多くの場合は「タイトルがあって罫線の枠があって記入項目が書かれていて、記入欄があって、二重線が引かれていて・・・」というような形式でのテンプレートが結果表示されます。普通のテンプレートです。
でもこの普通にあるテンプレートでは、表示形式を多少いじってしまうとテンプレートがすぐ壊れてしまいます。
なので、
ここで作成するテンプレートは、そのような不都合を排除するために、VBAコードからテンプレートを作成します。
全くのデフォルト状態のエクセルシートに、VBAコードから作られたインボイス領収書テンプレートを排出します。
こうすることで、再利用時を気にせず、その時々に合ったテンプレートの項目の表示変更も簡単に行うことが出来ます。
テンプレートを排出するエクセルVBA全コード
テンプレートは控え分も含めて2枚つづりになっています。(発行元名と社印は別項目で設定します。)

テンプレート作成の全VBAコードは以下のようになります。
その前に少々の準備作業をまず行っておいてください。
コードをModule2にコピペして使用することも出来ます。
以下のVBAコードには、4つのプロシージャーから成っていて、VBEの標準モジュール(Module2)に記述しています。
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がTrue」になっているかを調べています。
セルサイズとデータの表示位置、セルの結合、罫線の設定などを記述しています。
セル位置指定が細かいので指定ミスに注意が必要です。
セルに表示する項目の表示を設定しています。
エクセルシートをデフォルトの状態に戻すプログラムです。
クリアするシート「インボイス領収書」シートが存在するかどうかをチェックし、存在する場合にプログラムを実行します。
インボイス領収書テンプレート作成に事前準備すること

次の2つの項目を事前に行っておいてください。
- 新規エクセルBOOKを起動して、ブックネームを「インボイス領収書作成.xlsm」とします。
- エクセルBOOKをリネームした後、再起動してシート名を変更します。
- Sheet1を ” インボイス領収書 ”
- Sheet2を ” 発行データ入力 ”
- Sheet3を ” 印影 ”
まとめ

VBAコードでテンプレートを作成することで、作成したテンプレートが壊れても、何度でも再生することが出来ます。
VBAコードの実行は別に作成するユーザーフォームのコマンドボタンから実行できるようにします。
次回は、このテンプレートに入力するデータをまとめる入力表を作成し入力作業をVBAコード化していきます。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

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