EXCEL VBA 業務をスピードアップ!Excel VBAで請求書を自動作成する方法(新しいブックへの転記)
業務をスピードアップ!Excel VBAで請求書を自動作成する方法(新しいブックへの転記)
今回説明するのは、ビジネス業務を自動化するためのツールとして、VBAは極めて強力で効果的な手段です。特に、ルーティンな作業を効率化する場合にそのパワーを最大限に活用することができます。その一例として、複数の請求書を一度に自動生成するVBAプログラムを紹介します。このプログラムは、「請求書一覧」シートにあるデータを元にして、それぞれの行から請求書を作成し、新しいブックに保存します。その結果、請求書作成という面倒な作業をほんの数秒で完了させることが可能になります。以下に、その具体的なコードを示します。このコードを適用することで、あなたの業務も一歩効率化されることでしょう。具体的な説明は下記を参照して下さい。
●【EXCEL VBA請求書の作成・一覧表から請求書発行・作成「印刷・PDF・ワークシート別・差し込み印刷」については、下記を参照して下さい】
EXCEL VBA 請求書の作成・一覧表からの請求書発行・作成「印刷・PDF・ワークシート別・差し込み印刷」(テクニック)
Excel VBAを活用した自動化のすすめ!請求書発行が楽になる!請求書データを別ブックに作成
今回のサンプルプログラムは、事務作業を効率的にして部分的に業務を自動化するものです。具体的には、ワークシートの「請求書一覧」から必要な情報を読み込み、「請求書」シートを作成し、それを新しいExcelブック「請求書」として保存する処理を行う。サンプルプログラムです。
【下記のVBAコードの内容を詳細に説明】
・請求書を発行するブックには、ワークシートに「請求書一覧」と「請求書」があります。
・ワークシート「請求書一覧」には、請求書を発行するためのデータが一覧データとして登録されています。
・ワークシート「請求書」には、請求書のひな形が登録されています。
・ワークシート「請求書一覧」・「O列」の印刷対象が「空白」の場合は請求書発行対象となります。
・請求書の発行対象は、請求書データがワークシート「請求書」に転記します。
・ワークシート「請求書」に転記されたデータを新しいブックへの転記します。
・新しいブックへの転記されたブックは、保存して閉じます。
【プログラムの流れ】
① 「請求書一覧」「請求書」シートを定義
② ユーザーに請求書の発行確認を求める
③ 「請求書一覧」シートの最終行を取得
④ 現在のブックのパスを取得
⑤ 「請求書一覧」シートの2行目から最終行までのデータを「請求書」シートに書き込む
⑥ 新しいブックを作成し、「請求書」シートを新しいブックにコピー
⑦ 不要なシートを削除
⑧ 新しいブックを保存し、閉じる
⑨ 請求書の発行が終わった行に”済”を書き込む
【プログラム実行条件・注意事項】
① 「請求書一覧」「請求書」という名前のシートが存在すること
② 「請求書一覧」シートには適切なデータが入力されていること
③ 保存先のディレクトリに書き込み権限があること
④ 同名のファイルが存在する場合、上書きされてしまう可能性があること
★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● Invoice02Book(サンプルプログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
' ' Sub CreateInvoices() Dim wsList As Worksheet Dim wsInvoice As Worksheet Dim lastRow As Long Dim newWorkbook As Workbook Dim currentWorkbookPath As String Dim J, I As Long Dim userResponse As Integer ' 「請求書一覧」シートと「請求書」シートを設定します Set wsList = ThisWorkbook.Sheets("請求書一覧") Set wsInvoice = ThisWorkbook.Sheets("請求書") ' ユーザーによる確認を求めます userResponse = MsgBox("請求書を発行しますか?", vbYesNo + vbQuestion, "請求書発行確認") If userResponse = vbNo Then Exit Sub ' 「請求書一覧」シートの最終行を取得します lastRow = wsList.Cells(wsList.Rows.Count, "A").End(xlUp).Row ' 現在のブックのパスを取得します currentWorkbookPath = ThisWorkbook.Path ' 各行の請求書データを取得し、「請求書」シートに書き込み、新しいブックとして保存します For I = 2 To lastRow ' ヘッダ行をスキップするため2からスタートします If wsList.Cells(I, "O") = "" Then wsInvoice.Range("請求NO") = wsList.Cells(I, "A") '請求NO wsInvoice.Range("請求先") = wsList.Cells(I, "B") '請求先 wsInvoice.Range("件名") = wsList.Cells(I, "C") '件名 wsInvoice.Range("請求担当") = wsList.Cells(I, "D") '請求担当 wsInvoice.Range("項目①") = wsList.Cells(I, "E") '項目① wsInvoice.Range("数量①") = wsList.Cells(I, "F") '数量① wsInvoice.Range("単価①") = wsList.Cells(I, "G") '単価① wsInvoice.Range("項目②") = wsList.Cells(I, "H") '項目② wsInvoice.Range("数量②") = wsList.Cells(I, "I") '数量② wsInvoice.Range("単価②") = wsList.Cells(I, "J") '単価② wsInvoice.Range("項目③") = wsList.Cells(I, "K") '項目③ wsInvoice.Range("数量③") = wsList.Cells(I, "L") '数量③ wsInvoice.Range("単価③") = wsList.Cells(I, "M") '単価③ wsInvoice.Range("備考") = wsList.Cells(I, "N") '備考 ' 新しいブックを作成します Set newWorkbook = Workbooks.Add ' 「請求書」シートの内容を新しいブックにコピーします wsInvoice.Copy Before:=newWorkbook.Sheets(1) ' 余計なシートを削除します Application.DisplayAlerts = False For J = newWorkbook.Sheets.Count To 2 Step -1 newWorkbook.Sheets(J).Delete Next J Application.DisplayAlerts = True ' 新しいブックを保存します newWorkbook.SaveAs Filename:=currentWorkbookPath & "\" & wsList.Range("A" & I) & "_" & wsList.Range("B" & I) & ".xlsx" ' 新しいブックを閉じます newWorkbook.Close SaveChanges:=False wsList.Cells(I, "O") = "済" '請求書発行済み End If Next I End Sub ' ' |
(画面クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。