【エクセルVBA】請求書のPDFを自動作成

VBA

※本サイトはアフィリエイト広告を利用しています。

先日初めてお会いした方に、VBAの説明をしました。
「エクセルで毎日やってる作業を自動化できるんです」
突然そんなこと言われても、どう便利なのかわかりづらいと思ったので、

「売上管理の一覧表から請求書を自動で作成できるんですよ」

と説明。
結構これって会社で働いてる人なら使えるんじゃないかなって思います。
というわけで今回は、請求書を自動作成できるコードをご紹介します。

コードの解説の前に、完成イメージとしてはこんなかんじになります。

請求書の自動作成 ~ショートVer~

ボタンをクリックするだけで、あっという間に請求書のPDFが作成されます。(動画では説明のためにゆっくり実行していますが、実際はボタンを押したら一瞬で作成が終わります)

それではコードの解説です!

Sub CreateSomePDF()

Dim LastRowNum As Long
Dim i As Long, j As Long
Dim fileName As String
Dim OrderDate As Long, ZipCode As Long, Address1 As Long, Address2 As Long
Dim Name1 As Long, Name2 As Long, Product1 As Long, Quantity1 As Long, Product2 As Long
Dim Quantity2 As Long, Product3 As Long, Quantity3 As Long, Price As Long

   'フォルダが存在するかチェック
       Dim FSO As Object
       Set FSO = CreateObject("Scripting.FileSystemObject")
       If FSO.FolderExists(ThisWorkbook.Path & "\請求書") Then
           '何もしない
       Else
           MsgBox "請求書フォルダがありません。このエクセルがあるフォルダ内に作成してください"
           Exit Sub
       End If
       Set FSO = Nothing
   
   
   '列番号を設定
       OrderDate = 1
       ZipCode = 3
       Address1 = 4
       Address2 = 5
       Name1 = 6
       Name2 = 7
       Product1 = 9
       Quantity1 = 10
       Product2 = 11
       Quantity2 = 12
       Product3 = 13
       Quantity3 = 14
       Price = 15
   
   
   With Sheets("注文内容一括管理シート")
       '最終行を取得
       LastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row
                      
       For i = 3 To LastRowNum
           '請求書のデータを初期化
           Sheets("請求書").Range("B4") = ""
           Sheets("請求書").Range("B5") = ""
           Sheets("請求書").Range("B6") = ""
           Sheets("請求書").Range("H4") = ""
           For j = 0 To 10
               Sheets("請求書").Cells(14 + j, 2) = ""
               Sheets("請求書").Cells(14 + j, 4) = ""
               Sheets("請求書").Cells(14 + j, 5) = ""
           Next j
           Sheets("請求書").Range("F33") = ""
       
           '出力にレ点が入っていれば出力
           If Len(.Cells(i, 18)) > 0 Then
               j = 0
               '住所とかをコピペ
               Sheets("請求書").Range("B4") = .Cells(i, ZipCode)
               Sheets("請求書").Range("B5") = .Cells(i, Address1) & .Cells(i, Address2)
               Sheets("請求書").Range("B6") = .Cells(i, Name1) & .Cells(i, Name2) & " 様"
               Sheets("請求書").Range("H4") = .Cells(i, OrderDate)
               
               '商品等をコピペ
               If Len(.Cells(i, Product1)) > 0 Then
                   Sheets("請求書").Cells(14, 2) = .Cells(i, Product1)
                   Sheets("請求書").Cells(14, 4) = .Cells(i, Quantity1)
                   Sheets("請求書").Cells(14, 5) = "個"
                   j = j + 1
               End If
               If Len(.Cells(i, Product2)) > 0 Then
                   Sheets("請求書").Cells(14 + j, 2) = .Cells(i, Product2)
                   Sheets("請求書").Cells(14 + j, 4) = .Cells(i, Quantity2)
                   Sheets("請求書").Cells(14 + j, 5) = "個"
                   j = j + 1
               End If
               If Len(.Cells(i, Product3)) > 0 Then
                   Sheets("請求書").Cells(14 + j, 2) = .Cells(i, Product3)
                   Sheets("請求書").Cells(14 + j, 4) = .Cells(i, Quantity3)
                   Sheets("請求書").Cells(14 + j, 5) = "個"
                   j = j + 1
               End If
               Sheets("請求書").Range("F33") = .Cells(i, Price)
              
              '同じフォルダ内のPDFというフォルダに保存 送付状
               fileName = ThisWorkbook.Path & "\請求書\" & .Cells(i, Name1) & .Cells(i, Name2) & " 様" & ".pdf"
               Sheets("請求書").ExportAsFixedFormat Type:=xlTypePDF, fileName:=fileName
           
           End If
           
       Next i
           
   End With

End Sub

コードはこんな感じです。
・作成した請求書を入れるフォルダがあるかチェック
・請求書のシートをPDF化して保存
の2点が難しいくらいで、あとは単純にコピペをしているだけになります。

あと、列番号を変数として設定しています。
というのも、もともとの転記元の表というものは後から変わる可能性があります。列を増やしたくなったり、逆に減らしたくなったりなど。
その時に、変数にしておけば変更が簡単なのです(^^)

【エクセルVBA】請求書の自動作成

コードの説明は上記の動画にて。
1行ずつ解説しているのでどういう動きになっているかわかりやすいと思います。

手でいちいち名前とか住所とか商品名とか金額とかコピペしてる皆さん!
面倒な繰り返し作業はコンピューターに任せて、残業しないで早く帰りましょう。
もしくは、あなただからこそできる仕事に時間を使ってください。

この記事がどなたかの参考になれば嬉しいです。

お問い合わせ、お仕事のご依頼などがありましたら下記のお問い合わせフォームからご連絡お願いします。
お問い合わせフォーム

お問い合わせ、お仕事のご依頼などがありましたら下記のお問い合わせフォームからご連絡ください。
お問い合わせフォーム
VBAの作成であれば50,000円ほどから、自分で使うVBAの書き方で詰まっている方のお手伝いであれば10,000円ほどから承ります。

VBA
スポンサーリンク
スポンサーリンク
りこをフォローする
エクセルVBAの寺子屋

コメント

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