エクセルVBAを使って、データ一覧の中から指定して、インボイス領収書にデータを記入できるようにします。また消費税金額計算はボタンクリックで計算できるようにします。
こんにちは、じゅんぱ店長(@junpa33)です。
今回の作業は、先回作成したインボイス領収書のテンプレートに、金額データ等を記入していきます。
記入するデータは「発行データ入力」シートに一覧表形式で作成しておきます。
領収書を作成するデータの有る行のいずれかのセルを選択すれば、領収書に記入するデータが指定されるようにします。
インボイス領収書作成の記事編成
- インボイス領収書作成ソフトの使い方とダウンロード
コンテンツ
データ一覧(発行データ入力表)の作成

インボイス領収書に表示する金額などを入力する一覧表を「発行データ入力」シートに作成します。
入力項目欄の作成と、消費税の金額計算をするVBAも作成します。
一覧の項目表示と税計算のVBA
今回作成するすべてのVBAコードは、Module1に記述しています。
あとで作成するユーザーフォームから入手する変数化したデータを利用するために、パブリック変数として設定します。
Option Explicit
Public STA, STO As Long
Public Arow, Orow As Variant
Public ErrNo As Long
Public Gen, Nen, Tuk, Nit As String
一覧の見出し行を作成します。
ほぼ1回限りの使用コードになるかと思いますが、手作業作成も面倒なので、コードを作っています。
このVBA(列項目プロシージャー)の起動は「Alt + F8」でマクロウインドウから実行してください。起動ボタンの設定は行いません。
この見出し行の一部の項目上には、コマンドボタンも乗せることになります。
また、データ行数が増えると、スクロールによって見出し行(コマンドボタンも)が消えてしまいますので、ウインドウ枠固定を行っておきます。
Sub 列項目()
With Worksheets("発行データ入力")
Range("A1") = "伝票番号"
Range("B1") = "作成年月日"
Range("C1") = "宛先1"
Range("D1") = "宛先2"
Range("E1") = "税込総計金額"
Range("F1") = "10%税別金額"
Range("G1") = "10%消費税金額"
Range("H1") = "8%税別金額"
Range("I1") = "8%消費税金額"
Range("J1") = "非課税金額"
Range("K1") = "発行済"
Range("L1") = "但し書き"
Range("M1") = "チェック欄"
With .Range("A1:M1")
.Font.Size = 11
.Font.Name = "MS 明朝"
.Font.Bold = True
.HorizontalAlignment = xlCenter
.Interior.ColorIndex = 15
End With
Range("A2").Select
ActiveWindow.FreezePanes = True
End With
End Sub
インボイス領収書では、各税率で「課税対象金額」と「消費税額」を明示しなければいけません。
従来の「税込価格」と「内消費税額」では認められません。
なので、領収書を1枚発行するのに、税率別計算と総計計算 最大3回計算しなければなりません。
ここはサクッとVBA自動計算で行います。(小数点以下計算は四捨五入で行います。)
Sub 税込総額計算()
Worksheets("発行データ入力").Select
Cells(ActiveCell.Row, 5) = WorksheetFunction.Sum _
(Range(Cells(ActiveCell.Row, 6), Cells(ActiveCell.Row, 11)))
End Sub
Sub 消費税計算10()
Worksheets("発行データ入力").Select
Cells(ActiveCell.Row, 7) = WorksheetFunction.Round _
(Cells(ActiveCell.Row, 6) * 0.1, 0)
End Sub
Sub 消費税計算8()
Worksheets("発行データ入力").Select
Cells(ActiveCell.Row, 9) = WorksheetFunction.Round _
(Cells(ActiveCell.Row, 8) * 0.08, 0)
End Sub
消費税額計算と総額計算のコードを実行するコマンドボタンを、発行データシートの見出し行に設置します。



コマンドボタンの設置方法については次の記事を参考にしてください。
ここで設置したコマンドボタンは、ActiveXコントロールのタイプで行いました。
VBEでシートモジュール Sheet2(発行データ入力)に以下のVBAコード記述を行います。
Option Explicit
Private Sub 消費税金額10_Click()
Call Module1.消費税計算10
消費税金額10.TakeFocusOnClick = False
End Sub
Private Sub 消費税金額8_Click()
Call Module1.消費税計算8
消費税金額8.TakeFocusOnClick = False
End Sub
Private Sub 税込総計額_Click()
Call Module1.税込総額計算
税込総計額.TakeFocusOnClick = False
End Sub
それそれのコマンドボタンのプロパティウインドウにおいては、次のように設定します。



領収書へデータ移転させるVBA
発行データ入力表のデータをインボイス領収書のテンプレートに転記します。
転記データの指定は、転記したいデータ行のいずれかのセルをアクティブにすることで可能になります。
領収金額は、桁区切りをつけて表記して、数字1文字を1セルにはめていきます。
異なる税率が適用された場合は、自動的に「但し書き」にその旨が表示されます。
Sub インボイス領収書作成()
Dim aR, aN As Long
Dim aDay, aCusa, aCusb As String
Dim aBill, aTAXa, aTAXb As Long
Dim aBILLa, aBILLb, aBILLc As Long
Dim aNote As String
Dim anum, anum1, anum2 As Integer
Dim x, y, P, Z, i, j, s, t As Long
Dim aBilln As String
With Worksheets("発行データ入力")
.Select
aR = ActiveCell.Row
If Nen = "" Then Nen = " "
If Tuk = "" Then Tuk = " "
If Nit = "" Then Nit = " "
.Range("B" & aR).Value = _
Gen & Nen & "年" & Tuk & "月" & Nit & "日"
.Range("K" & aR).Value = "済"
'データを変数に代入
'伝票番号
aN = .Range("A" & aR).Value
'作成年月日
aDay = .Range("B" & aR).Value
'宛先1
aCusa = .Range("C" & aR).Value
'宛先2
aCusb = .Range("D" & aR).Value
'税込領収金額
aBill = .Range("E" & aR).Value
'10%税別金額
aBILLa = .Range("F" & aR).Value
'10%消費税額
aTAXa = .Range("G" & aR).Value
'8%税別金額
aBILLb = .Range("H" & aR).Value
'8%消費税額
aTAXb = .Range("I" & aR).Value
'非課税金額
aBILLc = .Range("J" & aR).Value
'但し書き
aNote = .Range("L" & aR).Value
End With
anum1 = Len(CStr(aBill))
x = anum1 \ 3
y = anum1 Mod 3
If y <> 0 Then
P = x + 1
Else
P = x
End If
Dim myBOX(5) As String
If anum1 = 3 Or anum1 = 2 Or anum1 = 1 Then
aBilln = CStr(aBill)
Else
For t = 0 To P - 1
If y <> 0 Then
If t = 0 And y <> 0 Then
myBOX(0) = Mid(aBill, 1, y)
Else
myBOX(t) = Mid(aBill, y + 3 * (t - 1) + 1, 3)
End If
Else
If t = 0 Then
myBOX(0) = Mid(aBill, 1, 3)
Else
myBOX(t) = Mid(aBill, y + 3 * t + 1, 3)
End If
End If
Next t
aBilln = Join(myBOX, ",")
End If
anum2 = Len(aBilln)
With Worksheets("インボイス領収書")
.Select
.Range("T2,T26") = aN
.Range("R4,R28") = aDay
.Range("C6,C30") = aCusa
.Range("C7,C31") = aCusb
For s = 0 To 15
.Cells(10, s + 5).Value = ""
.Cells(32, s + 5).Value = ""
Next s
.Range("E10") = "¥"
.Range("E34") = "¥"
For i = 1 To anum2
.Cells(10, 5 + i).Value = Mid(aBilln, i, 1)
.Cells(34, 5 + i).Value = Mid(aBilln, i, 1)
Next i
If y <> 0 Then
Z = y + 3 * (P - 1) + 1 + P - 1
Else
Z = y + 3 * (P - 1) + 1 + 3 + P - 1
End If
.Cells(10, Z + 5).Value = "-"
.Cells(34, Z + 5).Value = "-"
For j = Z + 6 To 20
.Cells(10, j).Value = ""
.Cells(34, j).Value = ""
Next j
If aTAXa = 0 And aBILLa = 0 Then
.Range("G18:G19,G42:G43") = " - 円"
ElseIf aTAXa > 0 Then
.Range("G18,G42") = aBILLa & "円"
.Range("G19,G43") = aTAXa & "円"
End If
If aTAXb = 0 And aBILLb = 0 Then
.Range("G20:G21,G44:G45") = " - 円"
ElseIf aTAXb > 0 Then
.Range("G20,G44") = aBILLb & "円"
.Range("G21,G45") = aTAXb & "円"
End If
If aBILLc = 0 Then
.Range("G22:G23,G46:G47") = " - 円"
ElseIf aBILLc > 0 Then
.Range("G22,G46") = aBILLc & "円"
.Range("G23,G47") = " - 円"
End If
.Range("F13,F37") = aNote
.Range("F14,F38") = ""
If aBILLb > 0 And aBILLc > 0 Then
.Range("F14,F38") = "軽減税率8%と非課税の商品代金が" & _
"含まれています。"
ElseIf aBILLb > 0 Then
.Range("F14,F38") = "軽減税率8%の商品代金が含まれています。"
ElseIf aBILLc > 0 Then
.Range("F14,F38") = "非課税の商品代金が含まれています。"
End If
End With
End Sub
まとめ

今回は発行データ入力表の作成と、領収書テンプレートへの転記について説明をしました。
今回行った作業での実行結果イメージはこのような感じになります。


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

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