先日初めてお会いした方に、VBAの説明をしました。
「エクセルで毎日やってる作業を自動化できるんです」
突然そんなこと言われても、どう便利なのかわかりづらいと思ったので、
「売上管理の一覧表から請求書を自動で作成できるんですよ」
と説明。
結構これって会社で働いてる人なら使えるんじゃないかなって思います。
というわけで今回は、請求書を自動作成できるコードをご紹介します。
コードの解説の前に、完成イメージとしてはこんなかんじになります。
ボタンをクリックするだけで、あっという間に請求書の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点が難しいくらいで、あとは単純にコピペをしているだけになります。
あと、列番号を変数として設定しています。
というのも、もともとの転記元の表というものは後から変わる可能性があります。列を増やしたくなったり、逆に減らしたくなったりなど。
その時に、変数にしておけば変更が簡単なのです(^^)
コードの説明は上記の動画にて。
1行ずつ解説しているのでどういう動きになっているかわかりやすいと思います。
手でいちいち名前とか住所とか商品名とか金額とかコピペしてる皆さん!
面倒な繰り返し作業はコンピューターに任せて、残業しないで早く帰りましょう。
もしくは、あなただからこそできる仕事に時間を使ってください。
この記事がどなたかの参考になれば嬉しいです。
お問い合わせ、お仕事のご依頼などがありましたら下記のお問い合わせフォームからご連絡お願いします。
お問い合わせフォーム
コメント