見積・納品・請求書テンプレートをVBAコードだけで作る

santenden_tempeyecatch

エクセルVBAコードのみで帳票テンプレートを作ります。その時々のテンプレート加工を行っても、元に戻すことなく何度でも一瞬にして回復させることが出来ます。

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

これからスタートするテーマです。販売に関しての伝票(見積書、納品書、請求書)を、自動で作成するソフトをエクセルVBAベースで作成していきます。

今回は第1回目として、そこに利用する伝票のテンプレートを、エクセルのシートに作成していきます。

伝票をエクセルで作って印刷出力するのに、一番大事なのがテンプレートですので、

ここはしっかり、でも、サクッと作ってしまいましょう。

見積書納品書請求書作成の記事編成

エクセルVBAで顧客に出す伝票を作る

3tendensakusip007

エクセルを会社業務で使っている人は多いでしょう。

” 社内会議や部署内資料、データ整理用のための資料 ” を主に作っているという方もおられるでしょう。

そういった方の中でも、社内文書は大丈夫だけれど、外に出す文書や帳票はあまり得意では無い。というタイプの人。

数字や金額を集計をして、様式を整えてと、間違いの許されない請求系の文書と帳票。

トラブルがあれば、「誰が作った?」と一番に名前が上げられますし、だから出来たら、他の人にお任せしたい的な感じでしょうか?

エクセルのスキルをもっとアップさせたいと志しているなら、社外に出す帳票類を「きれいに効率よく作ること」に挑戦してみましょう。

日常業務の中で既に、エクセルで対外的な通達書・通知書などを作成しているという方も、それは単にエクセルを使った文章ということではないですか。

チャレンジしましょう

この記事をきっかけに、エクセルの機能を活かしながら、社外に提示する帳票作成の一連の仕組み(エクセルVBAソフト)を作ってみましょう。

じゅんぱ店長
じゅんぱ店長

チャレンジがスキルアップにつながります!

たとえば、こんな環境の人

商品販売の中でも基本の伝票に「見積書」・「納品書」・「請求書」があります。

販売管理ソフトを使っている会社なら、この顧客に出す3つの伝票は専用用紙に印刷で簡単に作れます。

けれどもその中でも、顧客(官公庁など)によっては、伝票様式を3つ同じにしなければいけない場合もあります。

また今現在も、昭和の伝票的な、全て手書きで伝票を作っているなんて会社や部署もあるかもしれません。

もしそのような職場の中にあなたがいたなら、もうこれは逆に大ラッキーです。まさにチャレンジ環境です。

今回作成するテンプレート

3tendensakusip008

エクセルで「伝票を自動作成するソフト」を作っていきますが、今回の作業の部分は、伝票のテンプレートづくりとなります。

テンプレートを作成するシートはこのシートです。

  1. 作業シート
  2. 見積書テンプレート
  3. 納品書テンプレート
  4. 請求書テンプレート
  5. 宛名の登録シート
  6. 電子印鑑の登録シート

この6つの項目をエクセルのシートに作成します。

特に、見積書、納品書、請求書の3つのテンプレートについては、

このテンプレートは誤って形式を崩したり削除したりしてしまうと後が大変ですので、

テンプレートをVBAコード化して最終的にはボタンワンクリックで復元できるようにします。

エクセルシートで作成する各テンプレート内容

3tendensakusip009

テンプレート作成を始めていきます。

見積書、納品書、請求書の3つのテンプレート以外は、VBAコードで記述するよりも、手打ち作成の方が早くて簡単ですので、その方向で作成を進めます。

1.エクセルBOOKの準備、シートのリネーム

Microsoft Office のExcelをダブルクリックして起動してください。

「空白のブック」を選択して開きます。

(ここでMicrosoft Office自体がパソコンに導入されていない場合はこちらからスタートしてください。)

Excelの入手するための販売パッケージについては何種類かあります。

サブスクリプションと永続版があります。

永続版

Microsoft Office Personal 2021

Microsoft Office Home & Business 2021

サブスクリプション版

Microsoft 365 Personal サブスクリプション icon

Sheet選択タブの右の̟「+マーク」を何回かクリックしてSheet7まで作成します。

シートをリネームします。

Sheet1作業シート
Sheet2請求書
Sheet3納品書
Sheet4見積書
Sheet5宛名の登録
Sheet6電子印鑑の登録
Sheet7データストック

一旦、このエクセルBOOKを保存します。

名前を「見納請3点伝票作成.xlsm」として「Excelマクロ有効ブック」で、ご自分で分かり易い場所に保存をしてください。

2.各シートの項目欄の作成

作業シート

作業シートに項目欄を作ります。

シートの1行目に

A列   43ピクセル通番
B列   558ピクセル品名
C列   72ピクセル数量
D列   72ピクセル単位
E列   72ピクセル単価
F列   72ピクセル金額
G列   72ピクセル備考

とタイプしてください。列幅は適当ですが、「品名」は広げておきましょう。

3tendensakusi001

宛名の登録シート

次に、宛名の登録シートに項目欄を作ります。

シートの1行目に

A列   72ピクセルNO.
B列     72ピクセル顧客番号
C列  590ピクセル宛名
D列   72ピクセル郵便番号
E列  250ピクセル住所

と打ち込んでください。列幅は適当ですが、「宛名」と「住所」は広げておきましょう。

3tendensakusi002

電子印鑑の登録シート

電子印鑑の登録シートに登録欄を作成します。

セル位置を間違わないように画像のようにセットしてください。肝心の電子印鑑ですが、

電子印鑑の準備をするには、

が参考になります。

電子印鑑を、今使っている角印から作るには、

が参考になります。

データ入力欄はB列です。

3tendensakusi003

3.見積納品請求3点伝票のテンプレートVBAの組み立て

VBAコードを使ってテンプレートを作ります。

表題が違うだけで、見積書、納品書、請求書とも様式が同じですので、共通のテンプレートとして作成します。

それぞれシートをアクティブ(開いて)にしてコードを実行します。

どこにコードを記述するかは、VBE(ビジュアルベーシックエディター)を起動するで確認できます。

(標準モジュールでModule1に記述しましょう。)

関連記事

vbavbekidoeyecatch VBA初めての起動。VBEの立ち上げ、保存と終了 vbacleareyecatch シートクリアーを目的のメソッド別にVBA最速理解 vbawithstateeyecatch With~End Withの使い方。VBAコードを簡潔に記述する vbacellsbordereyecatch 「罫線」のVBAを最速理解 vbacellsfonteyecatch 「フォント」の操作を最速理解する エクセルVBA

シート上でセルサイズを変更したり文字を入力したりということはありません。

このコードが保存されている限り、何度でもテンプレートの複製が可能になります。

VBA
Option Explicit
Public MRK As Integer

Sub テンプレ作成2()
    Dim a As Integer
        Workbooks("見納請3点伝票作成.xlsm").Activate
        For a = 2 To 4
            Worksheets(a).Select
            With ActiveSheet
'一旦初期化
                .Cells.ClearFormats
                .Cells.ClearContents
                .Cells.UseStandardHeight = True
                .Cells.UseStandardWidth = True
                .DrawingObjects.Delete
                .PageSetup.PrintArea = False
                .PageSetup.PrintTitleRows = False
                .PageSetup.RightHeader = ""
                .PageSetup.CenterFooter = ""
'行高さ設定
                .Rows.RowHeight = 24
                .Rows("1:12").RowHeight = 19.5
                .Rows(2).RowHeight = 9
                .Rows(4).RowHeight = 7.5
                .Rows("7:9").RowHeight = 15.75
                .Rows(10).RowHeight = 6.75
                .Rows(11).RowHeight = 22.5
'列幅の設定
                .Columns("A").ColumnWidth = 3.5
                .Columns("B").ColumnWidth = 27.63
                .Columns("C").ColumnWidth = 9.13
                .Columns("D").ColumnWidth = 6.63
                .Columns("E:F").ColumnWidth = 12.63
                .Columns("G").ColumnWidth = 11.13
                .Columns("H:I").ColumnWidth = 1.5
'セルの結合
                .Range("B4:B5").Merge
                .Range("B6:C7").Merge
                .Range("B9:B10").Merge
'罫線の設定
                .Range("B6:C7").Borders(xlEdgeBottom).LineStyle _
                            = xlContinuous
                .Range("B11").Borders(xlEdgeBottom).LineStyle _
                            = xlDouble
                .Range("A13:G39").Borders.LineStyle = xlContinuous
'日付の表記
                With .Range("F3")
                    .Font.Size = 10
                    .Value = "令和  年  月  日"
                End With
'項目の入力
                .Range("A13") = "No."
                .Range("B13") = "品名"
                .Range("C13") = "数量"
                .Range("D13") = "単位"
                .Range("E13") = "単価"
                .Range("F13") = "金額"
                .Range("G13") = "備考"
                .Rows(13).Font.Size = 11
                With .Range("D1")
                    .Font.Size = 18
                    .HorizontalAlignment = xlCenter
                End With
'印刷余白の設定
                .PageSetup.TopMargin = Application _
                                    .CentimetersToPoints(1.5)
                .PageSetup.LeftMargin = Application _
                                    .CentimetersToPoints(2.5)
                .PageSetup.RightMargin = Application _
                                    .CentimetersToPoints(1)
                .PageSetup.BottomMargin = Application _
                                    .CentimetersToPoints(1)
                .PageSetup.HeaderMargin = Application _
                                    .CentimetersToPoints(0.5)
                .PageSetup.FooterMargin = Application _
                                    .CentimetersToPoints(0.5)
'自社の表示設定
                .Range("E5") = Worksheets("電子印鑑の登録").Range("B2")
                .Range("E5").Font.Size = 14
                .Range("F6") = Worksheets("電子印鑑の登録").Range("B3")
                .Range("E6").Font.Size = 12
                .Range("E7") = Worksheets("電子印鑑の登録").Range("B5") _
                    & "  " & Worksheets("電子印鑑の登録").Range("B6")
                .Range("E7").Font.Size = 10
                .Range("F8") = Worksheets("電子印鑑の登録").Range("B7")
                .Range("F8").Font.Size = 10
                .Range("F9") = Worksheets("電子印鑑の登録").Range("B8")
                .Range("F9").Font.Size = 10
                With .Range("F11")
                    .Value = Worksheets("電子印鑑の登録").Range("B9")
                    .Font.Size = 9
                    .VerticalAlignment = xlTop
                End With
'相手先文字ほか表示
                .Range("B3").Font.Size = 10
                With .Range("B4")
                    .VerticalAlignment = xlTop
                    .WrapText = True
                    .Font.Size = 10
                End With
                With .Range("B6")
                    .WrapText = True
                    .Font.Size = 13
                End With
                With .Range("B11")
                    .HorizontalAlignment = xlCenter
                    .Font.Size = 21
                    .NumberFormatLocal = "\ #,##0"
                End With
'帳票別設定
    '請求書
                If ActiveSheet.Name = "請求書" Then
                    .Range("D1") = "請 求 書"
                    .Range("E12") = Worksheets("電子印鑑の登録") _
                                .Range("B11")
                    .Range("E12").Font.Size = 9
                    .Range("E12").VerticalAlignment = xlTop
                    .Range("B8") = "下記の通り請求申し上げます。"
                    .Range("B8").Font.Size = 10
                    .Range("B9") = "税込合計金額"
                    .Range("B9").Font.Size = 10
                    .Range("B9").VerticalAlignment = xlBottom
                    If 操作パネル.CheckBox2 = True Then
                        Worksheets("電子印鑑の登録").Range("B13") _
                                    .Copy Worksheets("請求書").Range("F5")
                        Worksheets("請求書").Range("F5").ClearFormats
                    End If
                End If
    '納品書
                If ActiveSheet.Name = "納品書" Then
                    .Range("D1") = "納 品 書"
                    .Range("E12").VerticalAlignment = xlTop
                    .Range("B8") = "下記の通り納品申し上げます。"
                    .Range("B8").Font.Size = 10
                    .Range("B9") = "税込合計金額"
                    .Range("B9").Font.Size = 10
                    .Range("B9").VerticalAlignment = xlBottom
                    If 操作パネル.CheckBox2 = True Then
                        Worksheets("電子印鑑の登録").Range("B13") _
                                    .Copy Worksheets("納品書").Range("F5")
                        Worksheets("納品書").Range("F5").ClearFormats
                    End If
                End If
    '見積書
                If ActiveSheet.Name = "見積書" Then
                    .Range("D1") = "見 積 書"
                    .Range("E12").VerticalAlignment = xlTop
                    .Range("B8") = "下記の通り見積申し上げます。"
                    .Range("B8").Font.Size = 10
                    .Range("B9") = "税込合計金額"
                    .Range("B9").Font.Size = 10
                    .Range("B9").VerticalAlignment = xlBottom
                    If 操作パネル.CheckBox2 = True Then
                        Worksheets("電子印鑑の登録").Range("B13") _
                                    .Copy Worksheets("見積書").Range("F5")
                        Worksheets("見積書").Range("F5").ClearFormats
                    End If
                End If
            End With
        Next a
        Worksheets("請求書").Select
        If MRK = 1 Then
        MsgBox "3点伝票テンプレートの作成が完了しました。", vbInformation, _
                    "見積書納品書請求書作成エクセル"
        End If
End Sub

一旦初期化

テンプレートの再作成の前に、シートそのものを全てリセットします。

書かれているデータは全て消去されます。

行高さ設定

それぞれの行で行高さを規定します。

行高さを適当に変更してしまうと、1ページにはまる行数が変わってしまいます。

印刷ページ数と印刷結果がおかしくなるので注意してください。

列幅の設定

それぞれの列で列幅を規定します。

無闇な変更の結果は、行高さ設定の場合と同じです。

セルの結合

データ入力のためのセル結合になります。

罫線の設定

このデフォルトのテンプレートでは伝票1ページ分を作成します。

データを入力し帳票を正式作成するときは使用する行によって作成ページ数を変化させます。

その時は罫線の引き直しを行います。

項目の入力

13行目にデータの固定項目をセルに入力します。

印刷余白の設定

4方向の余白はcm単位で設定しています。

自社の表示設定

「電子印鑑の登録」シートのデータから転記していきます。

フォントサイズをあらかじめ設定しています。

変更したい場合は、コードを直接変更してください。

相手先文字ほか表示

「宛名の登録」シートのデータを表示するセルの、表示設定を行います。

変更するはこの場合も、コードを直接変更してください。

帳票別設定

帳票の表題の表示、メッセージ項目、振込口座情報、社印押印などを設定しています。

テンプレートVBAコードの実行結果ビュー

VBAコードを実行するには、テンプレートを展開したいシート(請求書か納品書か見積書の何れかのシート)を開きます。

3tendensakusi006

「横△マーク」sub/ユーザーフォームの実行のボタンをクリックします。

テンプレートコードの実行前

3tendensakusi004
矢印下001

テンプレートコードの実行後

3tendensakusi005

VBAコードでテンプレート作成のまとめ

3tendensakusip010

これで、ベースとなるテンプレート作成部分は終了です。

それぞれのセルを整えて罫線を引く分には、ほとんどが簡単なコード組み立てで可能です。

電子印鑑押印の個所で、チェックボックスの状態の条件分岐処理がありますが、特に難しいコードでもないでしょう。

VBAコードについては、後で作成するユーザーフォームと連携させますので、

後に一部のコード追加と修正を行います。

次の記事を読むにはこちら↓になります。

santenden_tyoueyecatch VBAでデータ移動と計算を行う。ヒューマンエラーを減らす

大村式【動画&テキスト】Excelマクロ&VBA最高のはじめ方
初めてのVBAの勉強、構えなくても気軽に始められる。
vbastudy020a
vbastudy021a

電子書籍版「大村式【動画&テキスト】Excelマクロ&VBA最高のはじめ方」をamazonで見てみる

(著者)大村あつし
(出版社)技術評論社
(税込価格)1,628円(本体1,480円+税)

学習書の新しい形です。
YouTubeと完全リンクした参考書です。入門と基礎を重点的に22本の動画で解説をしています。
ちょっとした空き時間を利用してでもスマホがあれば学習ができます。
動画は優しい語り口調で、視聴者にある意味安心感を与えてくれます。動画は5分から20分間ぐらいで22本の構成です。
文章解説と動画解説の関係性は、動画解説が主で、文章解説がサポートいう使い方もできます。

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

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

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

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

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

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

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

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

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min