あああ

【誰でも簡単VBA】Excelで請求書自動作成システムを自分で作ろう!初心者向けチュートリアル

企業で請求書などを作成していると、同じ作業の繰り返しで、作業者によって、保存先などが異なるなど多々発生します。また、大手などでは管理システムなどもありますが、使い勝手が悪いということがよくあります。今回は、Excel VBAを使用して、簡単に請求書作成・管理システムを作る方法を紹介します。

・手作業で請求書を作るのが大変
・複数の請求書を管理するのが難しい
・同じことをずっと繰り返しているな~~。。。

こんな疑問を解決します。

ブログの対象者
 ・初心者のエクセルユーザー
 ・請求書作成に興味があるビジネスオーナーやフリーランサー
 ・事務作業で同じことを繰り返している人

今回は同じようにプログラムを作成すれば簡単なシステムを作ることができるようになります
実際にプログラムを動かすとこんな感じのシステムが作ることができます。VBAなのでPC持っていれば誰でもできます。

🚀 0円で現役エンジニアから学べる【Techスクールオンライン】のお申込みをお勧めします。 このオンラインスクールでは、現役のエンジニアから直接学ぶことができ、プログラミングの基礎から高度なスキルまでを習得できます。しかも、今なら 0円 で受講できるチャンスです。 エンジニア転職を考えている方やプログラミングに興味がある方、新しいスキルを習得したい方に特におすすめです。

請求書作成システムを自分で作ることのメリット

  • 効率的な請求書作成: 自動化されたシステムを使用することで、手作業での入力や計算を省略できます。
  • 一貫性の確保: テンプレートを使用することで、一貫性のある請求書を簡単に作成できます。
  • データ管理の改善: 請求書データを集中管理することで、請求書の履歴や支払い状況を追跡しやすくなります。

企業では資料がしっかり管理されていないものの、システムを作成するには費用がかかり、対応しないなどよくあるので、今回は簡単に自分で作る方法を紹介します。

必要な準備

Excelで請求書作成システムを自分で作成する前に、以下の準備が必要です。

3.1. Excelの基本知識

  • Excelの基本的な操作方法やセルの入力、関数の使用方法などについての理解が必要です。セルの参照方法やセル範囲の操作など、基本的なExcelの機能に慣れておくと作業がスムーズに進みます。

3.2. VBAの基礎知識

  • VBA(Visual Basic for Applications)は、Excelのマクロ言語です。VBAを使用して自動化機能を実装するために、VBAの基礎知識が必要です。VBAの概念、変数の宣言、条件分岐、ループ構造、関数やサブルーチンの作成などを学んでおくと良いでしょう。

3.3. サンプルファイルのダウンロードまたは提供

  • 請求書作成システムを自分で作成する際には、サンプルファイルがあると作業がスムーズに進みます。サンプルファイルには、台帳シートや請求書フォーマットのシートなど、必要なシートや基本的な設定が含まれています。サンプルファイルをダウンロードするか、もしくはブログ記事の中で提供される場合もあります。

こちらについては、この後実際のコードを紹介します。

プログラムの作成手順

では実際にプログラムを作成していきましょう。

請求書作成システムを自分で作成するためには、以下の手順に従ってプログラムを作成します。これにより、Excelで請求書の自動化が実現されます。

  1. シートの設計
    • 台帳シートの設計: C列に作成日、D列に件名、E列に支払期限、F列に振込先、G列に会社名、H列に郵便番号、I列に住所、J列に電話番号、K列に担当者、L列にリンクを表示する台帳シートを作成します。
    • 請求書フォーマットのシートの設計: G1にNo、G3に日付、B6に件名、B7に支払期限、B8に振込先、B5に会社名、F6に郵便番号、F7に住所、F9に電話番号、F10に担当者を表示する請求書フォーマットのシートを作成します。

請求書台帳を下記のように作ってください。ボタンはまだ不要です。

請求書フォーマットを下記のように作ってください。

これでsheet の準備は完了です。今回のプログラムの流れは、下記です。
①台帳に項目を記載
②フォーマットのシートをコピーして、新規で作成。
③新規のシートに、台帳に記載した内容をすべて記入。シートの名前を変更。
④請求書作成の概略が完了。
⑤内訳を手入力する。←ここは毎回変わるはずなので人力で対応
⑥作成完了したら、PDF作成のボタンを押す
⑦ボタンを押すと、PDFファイルが自動で、年度の月のフォルダに自動で保存される。もしフォルダがない場合は、新規で自動で作成されPDFファイルが保存される。
⑧PDFファイルのリンクを台帳に表示する。

こんな流れになっています。ではやってみましょう。

実際のプログラムコード

プログラムコードはこんな感じで、請求書を作成する関数、PDFファイルを作成する関数、フォルダ内に指定のフォルダがあるかを確認する関数で作成されています。
これらを標準モジュールにすべてコピーして貼り付ければできます。

Sub CreateInvoice()
    Dim ledgerSheet As Worksheet
    Dim invoiceSheet As Worksheet
    Dim lastRow As Long
    Dim invoiceNo As String
    Dim invoiceDate As String
    Dim subject As String
    Dim dueDate As String
    Dim payee As String
    Dim companyName As String
    Dim postalCode As String
    Dim address As String
    Dim phoneNumber As String
    Dim contactPerson As String
    Dim lastCell As String
    
    ' 台帳シートを設定
    Set ledgerSheet = ThisWorkbook.Sheets("台帳")
    
    ' 台帳シートの最後の行番号を取得
    lastRow = ledgerSheet.Cells(Rows.Count, 3).End(xlUp).Row
    lastCell = ledgerSheet.Range("B" & lastRow).Value
    
    ' 請求書フォーマットのシートをコピーして作成
    ThisWorkbook.Sheets("請求書フォーマット").Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    Set invoiceSheet = ActiveSheet
    
    ' 請求書のシート名をNoに変更
    invoiceNo = "No" & lastCell
    invoiceSheet.Name = invoiceNo
    
    ' 台帳シートから必要な情報を取得
    invoiceDate = ledgerSheet.Range("C" & lastRow).Value
    subject = ledgerSheet.Range("D" & lastRow).Value
    dueDate = ledgerSheet.Range("E" & lastRow).Value
    payee = ledgerSheet.Range("F" & lastRow).Value
    companyName = ledgerSheet.Range("G" & lastRow).Value
    postalCode = ledgerSheet.Range("H" & lastRow).Value
    address = ledgerSheet.Range("I" & lastRow).Value
    phoneNumber = ledgerSheet.Range("J" & lastRow).Value
    contactPerson = ledgerSheet.Range("K" & lastRow).Value
    
    ' 請求書に情報を入力
    invoiceSheet.Range("G1").Value = invoiceNo
    invoiceSheet.Range("G3").Value = invoiceDate
    invoiceSheet.Range("B6").Value = subject
    invoiceSheet.Range("B7").Value = dueDate
    invoiceSheet.Range("B8").Value = payee
    invoiceSheet.Range("B2").Value = companyName
    invoiceSheet.Range("F6").Value = postalCode
    invoiceSheet.Range("F7").Value = address
    invoiceSheet.Range("F9").Value = phoneNumber
    invoiceSheet.Range("F10").Value = contactPerson
    
    ' 台帳シートの作成日に請求書の作成日を設定
 '   ledgerSheet.Range("C" & lastRow + 1).Value = Date
    
    ' メッセージを表示
    MsgBox "請求書が作成されました。"
End Sub
Sub SaveInvoiceAsPDF()
    Dim invoiceSheet As Worksheet
    Dim invoiceDate As Date
    Dim yearFolder As String
    Dim monthFolder As String
    Dim savePath As String
    Dim pdfFileName As String
    Dim ledgerSheet As Worksheet
    Dim lastRow As Long
    
    ' 請求書のシートを設定
    Set invoiceSheet = ThisWorkbook.ActiveSheet
    
    ' 請求書の作成日を取得
    invoiceDate = invoiceSheet.Range("G3").Value
    
    ' 保存先のパスを作成
    yearFolder = Format(invoiceDate, "yyyy")
    monthFolder = Format(invoiceDate, "mm")
    savePath = ThisWorkbook.Path & "\" & yearFolder & "\" & monthFolder
    
    ' 保存先のフォルダが存在しない場合は作成
    If Not FolderExists(savePath) Then
        On Error Resume Next
        MkDir savePath
        On Error GoTo 0
    End If
    ' PDFファイル名を作成
    pdfFileName = savePath & "\" & invoiceSheet.Name & ".pdf"
    
    ' 上書き確認のメッセージを表示
    If MsgBox("Excelファイルを上書き保存しますか?", vbQuestion + vbYesNo) = vbYes Then
        ' PDFファイルとして保存
        invoiceSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfFileName, Quality:=xlQualityStandard
        MsgBox "PDFファイルが保存されました。"
        
        ' 台帳シートにPDFファイルのリンクを記録
        Set ledgerSheet = ThisWorkbook.Sheets("台帳")
        lastRow = ledgerSheet.Cells(Rows.Count, 3).End(xlUp).Row
  '      ledgerSheet.Range("L" & lastRow).Value = "●"
        ledgerSheet.Hyperlinks.Add Anchor:=ledgerSheet.Range("L" & lastRow), address:=pdfFileName, TextToDisplay:="●"
        Sheets("台帳").Select
    End If
End Sub
Function FolderExists(folderPath As String) As Boolean
    Dim folder As Object
    On Error Resume Next
    Set folder = CreateObject("Scripting.FileSystemObject").GetFolder(folderPath)
    On Error GoTo 0
    FolderExists = Not folder Is Nothing
End Function

実行するとこんな感じです。最初は表に各項目を記入します。ボタンをCreateInvoice()の関数として登録しています。

次にボタン(CreateInvoice())を押します。新しいシートが作成され、請求書が記載されます。ポップアップで請求書が作成されましたと出ます。Sheet名称は最初の台帳のNoの項目が記載されるようにしています。

この黄色の塗りつぶしの項目を記入します。例えば試験費・ジグ費用など適当に入れます。

こんな感じで入力しました。550,000円になります。これで、PDF作成ボタン(SaveInvoiceAsPDF())を押すと、Excelファイルを上書き保存しますか?と出します。(意味と言葉違いますが、意味はPDFファイルを保存しますか?)です。

もちろん、はいをおします。

すると、PDFファイルが保存されましたと表示されます。これでフォルダに保存されます。OKを押すと、最初の台帳に戻ります。ここで注目が、台帳にリンクができています。PDFファイルの保存先のリンクを表示することができます。

リンクをクリックすると、こんな感じでPDFを開くことができます。ファイルはフォルダに勝手に保存されます。

こんな感じで簡単に管理システムを作成することができました。誰でも簡単にPDFファイルで管理できるので、非常に便利です。Groupで使えば、このように一元管理することができます。

まとめ

以上の手順に従ってプログラムを作成することで、Excelで請求書作成システムを自動化することができます。初めてVBAを使用する場合でも、Excelの基本知識とVBAの基礎知識を活用しながら進めることができます。自分で作成することで、自分好みに簡単にカスタマイズすることができるのでお勧めです。

🚀 0円で現役エンジニアから学べる【Techスクールオンライン】のお申込みをお勧めします。 このオンラインスクールでは、現役のエンジニアから直接学ぶことができ、プログラミングの基礎から高度なスキルまでを習得できます。しかも、今なら 0円 で受講できるチャンス。
私がツナグバに登録してから、求人情報が豊富に届き、自分に合った仕事を見つけることができました。特に、第二新卒向けの求人情報が多いので、自分のスキルや経験を活かしながら新たなキャリアに挑戦することができました。転職活動は不安も多いですが、ツナグバのサポートがあれば、成功への道が明るく感じました。