エクセルVBAコードだけで、見積書・納品書・請求書のテンプレートを作成します。
適格請求書の様式に対応しています。
VBAですので、壊しても簡単に再生することが出来ます。
こんにちは、じゅんぱ店長(@junpa33)です。
インボイス見積納品請求伝票日付版で、見積書・納品書・請求書のテンプレートを作成します。
テンプレートは、白紙のシートから作るのではなく、VBAコード記述のみで作成します。
1ページ分のテンプレートですが、このままプリントアウトして手書きでも利用いただけます。
もちろん手打ち入力で紙化やPDF化を行うことも可能です。
なお、プログラム本体でのテンプレートについては、今から作る固定化したテンプレートそのものを利用するのではなく、その時々のデータ行数にも対応できるように、変更した形でVBAコードを作成しています。
インボイス見積納品請求3点伝票作成の記事編成
- インボイス見積納品請求3点伝票作成ソフトの使い方とダウンロード
- インボイス見積納品請求伝票日付版作成ソフトの使い方とダウンロード
コンテンツ
完成形のテンプレート
完成したテンプレートはこのようになります。
それぞれの帳票にはインボイス登録番号が表示されます。
帳票下段には、消費税率毎の税別合計と各消費税額の集計欄を設置されます。
また、商品の入力可能行数は22行です。
請求書の場合は、振込先銀行名と口座番号が表示されます。
テンプレートを作成するVBA
VBAコードだけでテンプレートを作成するメリットは、
同じテンプレートを何回でも作成でき、シート上のテンプレートにどのような加工をしてもOKです。コードの再実行で、元通りのテンプレートに復旧することが出来ます。
今回作成する、テンプレートコードは、テンプレ様式を作成する記述だけで、セルにデータ入力した時の金額計算等の処理コードは含まれていません。
データ処理については、別記事での紹介になります。
作成のためのすべてのVBAコード
以下のコードを実行することで、同一フォーマットで、インボイス対応の「見積書」「納品書」「請求書」が作成されます。
記述する場所は、VBEの標準モジュール(例えばModule1など)になります。
コピペすることも出来ます。使い方の参考記事はこちら↓です。
Webで見つけたマクロをコピペで使うOption Explicit
Public MRK As Integer
Sub テンプレ作成2()
Dim a, i, s As Long
Dim Dtitle, Vinfo As String
ThisWorkbook.Activate
For a = 2 To 4
With Worksheets(a)
.Select
'一旦初期化
With .Cells
.ClearFormats
.ClearContents
.UseStandardHeight = True
.UseStandardWidth = True
End With
.DrawingObjects.Delete
With .PageSetup
.PrintArea = False
.PrintTitleRows = False
.RightHeader = ""
.CenterFooter = ""
End With
'行高さ設定
.Rows.RowHeight = 24
.Rows("1:12").RowHeight = 19.5
.Rows(1).RowHeight = 29.25
.Rows(2).RowHeight = 9
.Rows(4).RowHeight = 7.5
.Rows("7:10").RowHeight = 15.75
.Rows(11).RowHeight = 15.75
.Rows(12).RowHeight = 7.5
.Rows("13:14").RowHeight = 15.75
'列幅の設定
.Columns("A").ColumnWidth = 3.5
.Columns("B").ColumnWidth = 7.25
.Columns("C").ColumnWidth = 27.63
.Columns("D").ColumnWidth = 9.13
.Columns("E").ColumnWidth = 6.63
.Columns("F").ColumnWidth = 6
.Columns("G").ColumnWidth = 4.75
.Columns("H").ColumnWidth = 13.5
.Columns("I").ColumnWidth = 7.5
'セルの結合
.Range("C1:D1").Merge
.Range("H1:I2").Merge
.Range("H3:I3").Merge
.Range("B4:C5").Merge
.Range("B6:C7").Merge
.Range("B9:C10").Merge
.Range("B11:C11").Merge
.Range("B12:C13").Merge
.Range("D11:E11").Merge
.Range("D12:E13").Merge
For i = 15 To 40
.Range(.Cells(i, 6), Cells(i, 7)).Merge
Next i
'罫線の設定
.Range("B6:C7").Borders(xlEdgeBottom).LineStyle _
= xlContinuous
With .Range("B11:E13").Borders
.LineStyle = xlDot
.Weight = xlHairline
End With
With .Range("B11:E11")
.Interior.Color = RGB(211, 211, 211)
.Font.Size = 12
.Font.Bold = True
End With
With .Range("B13:E13").Borders(xlEdgeBottom)
.LineStyle = xlDouble
.Weight = xlMedium
End With
.Range("A15:I40").Borders.LineStyle = xlContinuous
.Range("B38:H40").BorderAround LineStyle:= _
xlContinuous, Weight:=xlMedium
'日付の表記
With .Range("H1")
.Font.Size = 10
.Value = "令和 年 月 日"
End With
'合計欄の作成
With .Range("B11")
.Value = "税込合計金額"
.Font.Size = 10
.VerticalAlignment = xlBottom
End With
With .Range("D11")
.Value = "内消費税額"
.Font.Size = 10
.VerticalAlignment = xlBottom
End With
'項目の入力
.Range("A15") = "No."
.Range("B15") = "日付"
.Range("C15") = "品名"
.Range("D15") = "数量"
.Range("E15") = "単位"
.Range("F15") = "単価"
.Range("H15") = "税別金額"
.Range("I15") = "税率"
.Rows(15).Font.Size = 11
With .Range("C1")
.Font.Size = 18
.HorizontalAlignment = xlRight
End With
'印刷余白の設定
With .PageSetup
.TopMargin = Application _
.CentimetersToPoints(1.5)
.LeftMargin = Application _
.CentimetersToPoints(2)
.RightMargin = Application _
.CentimetersToPoints(1)
.BottomMargin = Application _
.CentimetersToPoints(1)
.HeaderMargin = Application _
.CentimetersToPoints(0.5)
.FooterMargin = Application _
.CentimetersToPoints(0.5)
End With
'自社の表示設定
With .Range("G5")
.Value = Worksheets("電子印鑑の登録").Range("B2")
.Font.Size = 14
End With
With .Range("H6")
.Value = Worksheets("電子印鑑の登録").Range("B3")
.Font.Size = 12
End With
With .Range("G7")
.Value = Worksheets("電子印鑑の登録").Range("B5")
.Font.Size = 10
End With
With .Range("G8")
.Value = Worksheets("電子印鑑の登録").Range("B6")
.Font.Size = 10
End With
With .Range("G9")
.Value = Worksheets("電子印鑑の登録").Range("B7")
.Font.Size = 10
End With
With .Range("G10")
.Value = Worksheets("電子印鑑の登録").Range("B8")
.Font.Size = 10
End With
With .Range("G11")
.Value = Worksheets("電子印鑑の登録").Range("B9")
.Font.Size = 10
End With
With .Range("G13")
.Value = "登録番号" & ":" & _
Worksheets("電子印鑑の登録").Range("B10")
.Font.Size = 10
.VerticalAlignment = xlTop
End With
If インボイス3点操作パネル.CheckBox2 = True Then
Worksheets("電子印鑑の登録").Range("B13") _
.Copy Worksheets(a).Range("H5")
Worksheets(a).Range("H5").ClearFormats
End If
'相手先文字ほか表示
With .Range("B4")
.VerticalAlignment = xlTop
.WrapText = True
.Font.Size = 10
End With
With .Range("B6")
.WrapText = True
.Font.Size = 13
.Font.Bold = True
End With
With .Range("B12")
.HorizontalAlignment = xlCenter
.Font.Size = 21
.NumberFormatLocal = "\ #,##0"
End With
With .Range("D12")
.HorizontalAlignment = xlCenter
.Font.Size = 18
.NumberFormatLocal = "\ #,##0"
End With
'帳票別設定
If a = 2 Then
Dtitle = "請 求 書"
Vinfo = "下記の通り請求申し上げます。"
With .Range(.Cells(14, 6), .Cells(14, 9))
.Merge
.Value = Worksheets("電子印鑑の登録") _
.Range("B11")
.ShrinkToFit = True
.Font.Size = 9
.VerticalAlignment = xlTop
End With
ElseIf a = 3 Then
Dtitle = "納 品 書"
Vinfo = "下記の通り納品申し上げます。"
Else
Dtitle = "見 積 書"
Vinfo = "下記の通り見積申し上げます。"
End If
With .Range("C1")
.Value = Dtitle
End With
With .Range("B9")
.Value = Vinfo
.Font.Size = 10
End With
'合計欄の設定
With .Range(.Cells(38, 2), .Cells(40, 2))
.Merge
.Value = "税抜き合計"
.WrapText = True
.Font.Bold = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
For s = 38 To 40
With .Cells(s, 3)
.Font.Bold = True
If s = 38 Then .Value = "10%対象合計"
If s = 39 Then .Value = "8%対象合計"
If s = 40 Then .Value = "非課税対象合計"
End With
With .Range(.Cells(s, 4), .Cells(s, 5))
.Merge
.NumberFormatLocal = "¥#,##0;[赤]-¥#,##0"
.Font.Bold = True
End With
With .Cells(s, 6)
.Value = "消費税額"
.Font.Bold = True
End With
With .Cells(s, 8)
.NumberFormatLocal = "¥#,##0;[赤]-¥#,##0"
.Font.Bold = True
End With
Next s
End With
Next a
Worksheets("請求書").Select
If MRK = 1 Then
MsgBox "3点伝票テンプレートの作成が完了しました。", vbInformation, _
"インボイス見積納品請求3点日付版作成"
End If
End Sub
それぞれの処理コードの説明
各処理のコードを簡単に説明して行きます。
Option Explicit
Public MRK As Integer
「Option Explicit」については、こちらの記事を参考にしてください。
Option Explicitとは何、必要? VBA記述で不注意なエラーを防止する変数MRKをパブリック変数として宣言しています。
変数MRKは、「何処のルートからの実行命令か?」によって、ユーザーに表示するメッセージを区別するための指標として使用しています。
宣言方法で変数の適用範囲を変える エクセルVBA
Dim a, i, s As Long
Dim Dtitle, Vinfo As String
ThisWorkbook.Activate
For a = 2 To 4
With Worksheets(a)
.Select
プロシージャー内で有効な変数を宣言しています。
「見積書」「納品書」「請求書」シートに対して、シートのインデックス番号を使って、同じ操作をループして実行していきます。
ワークシートの全セルに対して値、書式設定を消去した上でセルの行高さと列幅をデフォルトの状態に戻します。
シート上の描画を削除します。(オブジェクトはワークシートになります。)
印刷範囲をクリアし、プリントタイトルを無効にし、ヘッダー・フッターの内容を消去します。
セルのサイズを設定しています。
明細表、合計欄などの罫線表示を規定しています。
罫線の使い方についてはこちらを参考にしてください。
「罫線」のVBAを最速理解 Bordersの/位置/線種/太さ/色/と<外枠だけの罫線>の設置それぞれの見出しセルに入力項目を当てはめています。
With .PageSetup
.TopMargin = Application _
.CentimetersToPoints(1.5)
・・・・
End With
「With PageSetup・・・End With」の中で、4方向の余白を設定しています。
「Application .CentimetersToPoints(1.5)」は、1.5cmの余白を取得するというコードになります。
「電子印鑑の登録」シートに保存された自社情報から表示データを取得しています。
If インボイス3点操作パネル.CheckBox2 = True Then
・・・
とは、
ユーザーフォームの「電子印鑑 押印する」チェックボックスがチェックされている場合は・・・という意味になります。
文字の表示設定、書式設定を行っています。
参考記事としてこちらをご覧ください。
「表示形式」をVBAコード的に最速理解する 「配置」を最速理解する エクセルVBA「見積書」「納品書」「請求書」毎に表示が異なる部分を指定しています。
作成する帳票の一番下の部分に、消費税別にそれぞれの合計金額と消費税額計を表示するようにしています。
適格請求書の作成規定に準じた部分になります。
If MRK = 1 Then
「MRK=1」とは、ユーザーフォームで「テンプレ作成」ボタンをクリックした時にMRKに1が代入されるようにしています。
つまり「テンプレ作成」ボタンをクリックしてこのプロシージャーを実行した場合に、条件合致で、以下記述のメッセージが表示されるという仕組みになっています。
VBAコードでテンプレート作成のまとめ
VBAコードだけで作るインボイス対応の「見積書」「納品書」「請求書」のテンプレート作成を紹介しました。
「インボイス見積納品請求伝票日付版作成ソフト」を構成する一部分のプログラムではありますが、この記事部分だけを取り出して、利用いただくことも可能です。
多少のVBAの知識は必要ですが、
マクロの実行を1クリックで!フローティングボタンをユーザーフォームで作るを利用して独立した実行ボタンにプロシージャーを関連付けて使用することも可能です。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。