【Excel VBA】Excelで作る請求書テンプレートでのPDF変換方法をご紹介!

操作編

2023年10月から開始されるインボイス制度の導入にともなって、「請求書」や「納品書」などの見直に迫られていませんでしょうか?
インボイス制度では、所定の記載要件を満たした「適格請求書」等の保存が必要になっています。

インボイス(適格請求書)の記載事項
※参照元:国税庁「適格請求書等保存方式(インボイス制度)の手引き

  1. 適格請求書発行事業者の氏名又は名称及び登録番号
  2. 課税資産の譲渡等を行った年月日
  3. 課税資産の譲渡等に係る資産又は役務の内容
    (課税資産の譲渡等が軽減対象資産の譲渡等である場合には、資産の内容及び軽減対象資産の譲渡等である旨)
  4. 課税資産の譲渡等の税抜価額又は税込価額を税率ごとに区分して合計した金額及び適用税率
  5. 税率ごとに区分した消費税額等
  6. 書類の交付を受ける事業者の氏名又は名称

さてこちらでは、インボイス制度の要件に満たすことを目指した実用的な「請求書」のサンプルテンプレートをご紹介します。また、日常的な運用を考慮してできる限りエクセルの機能を活用した方法もあわせてお伝えします。

もしご自身での作成を検討されているのであれば、すこしでもご参考になれば幸いです。

さて、今回はこちらを使用して請求書を作成します。
作成元となるエクセルのテンプレートはいろいろなサイトで公開されているかと思いますが、まずは目的にあったものをご準備ください。

今回ご紹介する例で使用させていただいているのは「ビジネステンプレート」からダウンロードした請求書です。こちらのサイトでは、請求書に限らず、さまざまなビジネスシーンで利用できるテンプレートを無料で入手することができます。

それでは、具体的な設定方法をお伝えします。

申し訳ありませんが、当方はインボイス制度に精通しておりません。
本格的な運用を開始されているのであれば、国税庁のホームページなどをご一読の上、専門家の意見を取り入れていただくことを強くオススメします。

スポンサーリンク

請求書の作成方法

以下にて具体的な作成方法をお伝えいたします。

完成後にはこういった形でPDF出力することができます。

手順1|請求書の各項目の配置変換

まずは各項目の配置を変換します。
請求書そのものを自動化に適した形に変更することで、のちのちの設定をカンタンにするための下準備です。

こちらが変更前の配置です。

こちらが変更後の配置です。

詳細は後ほどご説明いたしますが、ここでのポイントは「取引量によって変動する項目を、エクセルの下の方にまとめる」ことです。赤枠で囲まれている箇所が下になるように配置変更しています。

手順2|事前設定されている関数範囲の変更

あらかじめ設定されている関数の範囲を変更します。

こちらで使用しているテンプレートでは、以下の黄色セルが該当します。
サンプルデータが入力されている計算範囲を拡大します。

初期設定では、以下の範囲に数式が設定されています。

下の行にデータが追加されることを想定して、こちらでは「9999行目まで」を計算範囲に設定しました。

手順3|ヘッダーの設定

複数枚数を印刷することもありますので、「ヘッダーとフッター」からページ番号を設定します。 以下のように入力することによって、複数枚の印刷をした場合でも対応できるようにしておきます。

&[ページ番号]& of &[総ページ数]

「ヘッダー」の設定は、タブ「挿入」の「ヘッダーとフッター」から進めることができます。

手順4|ページ設定でタイトル行の設定

複数枚の印刷に備えて、印刷時に表示される行の設定をします。

こちらの設定をすることによって、例えば2ページにわたる請求書を印刷した場合、2ページ目はこのような形で印刷されます。

タブ「ページレイアウト」から「ページ設定」を開きます。
「印刷タイトル」の「タイトル行」に表示させたい行を入力します。

こちらの例で使用しているExcelでは、「23行目」にそれぞれの項目が入力されていますので、その範囲を指定しています。

手順5|マクロの設定

こちらの内容を実行することで「請求書」のPDF変換ができます。
なお、選択されたテンプレートによっては、正しく動作をさせるためにプログラムの内容を書き変える必要が出てくることがありますのでご注意ください。

Sub convert_to_PDF()

'印刷範囲の設定
    '印刷範囲の変数
    Dim invoice_lastrow As Long
           invoice_lastrow = Worksheets("請求書").Cells(Rows.Count, 1).End(xlUp).Row
    
    '印刷範囲の指定
    With Worksheets("請求書").PageSetup
       .PrintArea = "A1:H" & invoice_lastrow
    End With
    
    
'PDF出力の設定
    'ファイル名の設定
    Dim file_name As String
           file_name = ThisWorkbook.Path & "\請求書" & ".pdf"

    'PDF出力
    Worksheets("請求書").ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=file_name, _
        OpenAfterPublish:=True

End Sub

それでは、順番にご説明します。

印刷範囲の設定

まずは変数「invoice_lastrow」の設定をします。
数値を扱うためデータ型を「Long」としています。

この変数「invoice_lastrow」には、シート「請求書」のA列を基準にして、Excelの最下行(Excelのバージョンによりますが、大体1048576行目です。)から開始して最初に入力データがあったセルを最下行と判定した値が代入されます。

なお、「Cells(Rows.Count, 1)」と記述されているところの「1」は、「1列目(列A)」を表しています。「1列目(列A)」の一番下に入力された値を見て最下行を判定するといった考え方です。
そのため、こちらでは「1列目(列A)」を基準列としていますが、取り扱う「請求書」の形式にあわせて列番号を指定してください。

    '印刷範囲の変数
    Dim invoice_lastrow As Long
           invoice_lastrow = Worksheets("請求書").Cells(Rows.Count, 1).End(xlUp).Row

つぎに取得した変数「invoice_lastrow」をつかって、印刷範囲の設定をします。
以下のように記述することによって「セル:A1」から「列Hの最下行」までを印刷範囲として指定することができます。

こちらの例で「”A1:H” & invoice_lastrow」と記述されているところが「列A~H」を表しています。
そのため、選択された請求書のテンプレートに合わせて列名を調整してください。

    '印刷範囲の指定
    With Worksheets("請求書").PageSetup
       .PrintArea = "A1:H" & invoice_lastrow
    End With

PDF出力の設定

まずは出力されるPDFのファイル名を設定します。
以下のように記述することによって「請求書.pdf」といった名前のファイルになります。

    'ファイル名の設定
    Dim file_name As String
           file_name = ThisWorkbook.Path & "\請求書" & ".pdf"

以下の記述をすることによってPDFが出力されます。
「Worksheets(“請求書”)」と記述されている部分で、ワークシート名を指定しています。
もし「請求書」といった名前のワークシートではない場合、出力対象にしたいワークシート名に書き変えてください。

    'PDF出力
    Worksheets("請求書").ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=file_name, _
        OpenAfterPublish:=True"

その他に記述されている内容については以下をご覧ください。
また、もっと詳細の設定をしたい場合は、以下の内容から選択いただきコードを書き足してください。

引数省略可否内容
Type×「xlTypePDF」または「xlTypeXPS」のいずれかを指定します。
「xlTypePDF」はアドビ社の開発したPDFのことです。もう一方の「xlTypeXPS」はマイクロソフト社が開発したファイル形式です。
FileName出力されるファイル名と出力場所を指定します。
省略した場合はエクセルファイルと同じ名前で、デスクトップに出力されます。
Quality「xlQualityStandard」もしくは「xlQualityMinimum」のいずれかを指定します。
「xlQualityStandard」は標準的な品質で、「xlQualityMinimum」は低品質で出力されます。
IncludeDocProperties「True」もしくは「False」のいずれかを指定します。
「True」の場合はドキュメントプロパティを含めますが、「False」の場合は省略されます。
なお、ドキュメントプロパティとは、ドキュメントに関する情報を含んでいる、作成者・タイトル・作成日などのメタデータの文字列です。
IgnorePrintAreas「True」もしくは「False」のいずれかを指定します。
「True」の場合は印刷範囲が無視されますが、「False」の場合は設定した印刷範囲が適用されます。
From出力の開始ページを指定する際に使用します。省略すると先頭のページから出力されます。
To出力の終了ページを指定する際に使用します。省略すると最後のページから出力されます。
OpenAfterPublish「True」もしくは「False」のいずれかを指定します。
「True」の場合は出力後にファイルがビュアーに表示されますが、「False」の場合は表示されません。
FixedFormatExtClassPtrFixedFormatExt クラスへのポインターです。

手順6|印刷のテスト

さいごに印刷テストをします。
こちらでお伝えしている内容でマクロ実行した結果、こういった形で出力されました。

スポンサーリンク

まとめ

請求書のテンプレートにひと手間加えることによって、より実務的に活用する方法のひとつをご紹介しました。
「そもそもマクロの編集方法がわからない」といった場合、まずはこちらの「【Excel VBA入門】「VBE」の使い方|エクセル マクロのエディタ
をご一読ください。

また、その他にもいろいろな機能を実装していきたいといったことでしたら、初心者向けからの必要な情報をまとめていますので、 こちらの「【Excel VBA】独学プログラミング|初心者が最短ルートで学ぶエクセル マクロの組み方」をご活用いただけると幸いです。

タイトルとURLをコピーしました