Sub TEST1()
'請求書の入力項目をクリア
Sheets("請求書").Range("A2,A10:E12").ClearContents
'取引先を入力
Sheets("請求書").Range("A2") = Sheets("DB").Range("A2")
Dim A, B, C
With Sheets("DB").Range("A1").CurrentRegion.Offset(1, 0)
A = .Resize(.Rows.Count - 1).Columns(2) '品目
B = .Resize(.Rows.Count - 1).Columns(3) '単価
C = .Resize(.Rows.Count - 1).Columns(4) '数量
End With
Sheets("請求書").Range("A10").Resize(UBound(A, 1)) = A '品目
Sheets("請求書").Range("D10").Resize(UBound(B, 1)) = B '単価
Sheets("請求書").Range("E10").Resize(UBound(C, 1)) = C '数量
End Sub
では、手順をみていきます。
請求書フォームとデータベースは、あらかじめ作成しておきます。
請求書フォームとデータベースを作成
請求書フォームを作成しておきます。
データベースを用意します。
では、VBAコードを実行してみます。
請求書の入力欄をクリアします。
請求書の入力欄をクリア
データベースから取引先を転記します。
取引先を入力
次は、品目や単価、数量を請求書に入力していきます。
品目や単価、数量を入力
まずは、品目や単価、数量を配列に格納します。
配列に入力した品目や単価、数量を、請求書に入力をします。
という感じで、請求書に値を入力します。
これで、データベースから請求書に値を転記して、請求書を作成できます。
請求書を作成できた
データベースから請求書に値を転記して、請求書を作成できました。
新規シートに作成する
新規シートに請求書を作成してみます。
新規シートに請求書を作成したい
新規シートに請求書を作成するVBAコードになります。
VBAコード
手順は、次のようになります。
請求書を作成
請求書を新規シートにコピー
シート名を変更
という感じです。
Sub TEST2()
'請求書の入力欄をクリア
Sheets("請求書").Range("A2,A10:E12").ClearContents
'取引先を入力
Sheets("請求書").Range("A2") = Sheets("DB").Range("A2")
Dim A, B, C
With Sheets("DB").Range("A1").CurrentRegion.Offset(1, 0)
A = .Resize(.Rows.Count - 1).Columns(2) '品目
B = .Resize(.Rows.Count - 1).Columns(3) '単価
C = .Resize(.Rows.Count - 1).Columns(4) '数量
End With
Sheets("請求書").Range("A10").Resize(UBound(A, 1)) = A '品目
Sheets("請求書").Range("D10").Resize(UBound(B, 1)) = B '単価
Sheets("請求書").Range("E10").Resize(UBound(C, 1)) = C '数量'最終シートに、コピー
Sheets("請求書").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Range("A2") 'シート名を変更
End Sub
最初のVBAコードは同じで、最後の方を変更しています。
データベースから請求書に値を転記して、請求書を作成します。
請求書を作成
データベースから請求書に値を転記して、請求書を作成しました。
新規シートに請求書をコピー
新規シートに請求書のシートをコピーします。
新規シートに請求書のシートをコピーしました。
新規シートのシート名を変更します。
新規シートのシート名を変更しました。
新規シートに請求書を作成できた
新規シートに請求書を作成できます。
新規シートに請求書を作成できました。
新規ブックに作成する
次は、新規ブックに請求書を作成してみます。
新規ブックに請求書を作成したい
やりたい内容は、新規ブックに請求書を作成したい、ということになります。
こんな感じで、別ブックに請求書を作成したいです。
では、別ブックに請求書を作成するVBAコードをみてみます。
VBAコード
手順としては、次のようになります。
請求書を作成
新規ブックにコピー
名前を付けて保存
新規ブックを閉じる
という感じになります。
Sub TEST3()
'請求書の入力欄をクリア
Sheets("請求書").Range("A2,A10:E12").ClearContents
'取引先を入力
Sheets("請求書").Range("A2") = Sheets("DB").Range("A2")
Dim A, B, C
With Sheets("DB").Range("A1").CurrentRegion.Offset(1, 0)
A = .Resize(.Rows.Count - 1).Columns(2) '品目
B = .Resize(.Rows.Count - 1).Columns(3) '単価
C = .Resize(.Rows.Count - 1).Columns(4) '数量
End With
Sheets("請求書").Range("A10").Resize(UBound(A, 1)) = A '品目
Sheets("請求書").Range("D10").Resize(UBound(B, 1)) = B '単価
Sheets("請求書").Range("E10").Resize(UBound(C, 1)) = C '数量'新規ブックにコピー
Sheets("請求書").Copy
'名前を付けて保存
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Range("A2") & ".xlsx"
ActiveWorkbook.Close False '新規ブックを閉じる
End Sub
Sub TEST4()
'請求書の入力欄をクリア
Sheets("請求書").Range("A2,A10:E12").ClearContents
'取引先を入力
Sheets("請求書").Range("A2") = Sheets("DB").Range("A2")
Dim A, B, C
With Sheets("DB").Range("A1").CurrentRegion.Offset(1, 0)
A = .Resize(.Rows.Count - 1).Columns(2) '品目
B = .Resize(.Rows.Count - 1).Columns(3) '単価
C = .Resize(.Rows.Count - 1).Columns(4) '数量
End With
Sheets("請求書").Range("A10").Resize(UBound(A, 1)) = A '品目
Sheets("請求書").Range("D10").Resize(UBound(B, 1)) = B '単価
Sheets("請求書").Range("E10").Resize(UBound(C, 1)) = C '数量'PDFで保存
With Sheets("請求書")
.ExportAsFixedFormat 0, ThisWorkbook.Path & "\" & .Range("A2") & ".pdf"
End With
End Sub
では、VBAコードを実行してみます。
まずは、データベースから値を転記して、請求書を作成します。
請求書を作成
作成した請求書をPDFにエクスポートします。
請求書をPDFにエクスポート
「.ExportAsFixedFormat」を使って、PDFにエクスポートするという感じです。
実行すると、PDFを作成することができます。
PDFを開いて中身を確認してみます。
請求書のPDFを作成できた
請求書をPDFで保存できていることがわかります。
取引先ごとに複数の請求書を作成する
次は、「取引先ごと」に、複数の請求書を作成してみます。
複数シートにすべての請求書を作成する
取引先ごとに、「複数シート」にすべての請求書を作成してみます。
取引先ごとに複数シートに請求書を作成したい
複数の取引先を、データベースに登録しました。
次のように、取引先ごとに、別シートに請求書を作成してみます。
では、VBAコードをみてみます。
VBAコード
取引先ごとに、別シートに請求書を作成する手順は、次のようになります。
取引先をループしていく
取引先の請求書を作成
別シートにコピー
という感じで取引先をループして、別シートに請求書を作成していきます。
Sub TEST5()
Dim D
'取引先の配列を作成
D = Array("AAA", "BBB", "CCC")
For i = 0 To 2
'取引先でフィルタ
Sheets("DB").Range("A1").AutoFilter 1, D(i)
'フィルタ結果を、別セルにコピー
Sheets("DB").Range("A1").CurrentRegion.Copy Sheets("DB").Range("F1")
Sheets("DB").Range("A1").AutoFilter 'オートフィルタを解除'請求書の入力欄をクリア
Sheets("請求書").Range("A2,A10:E12").ClearContents
'取引先を入力
Sheets("請求書").Range("A2") = Sheets("DB").Range("F2")
Dim A, B, C
With Sheets("DB").Range("F1").CurrentRegion.Offset(1, 0)
A = .Resize(.Rows.Count - 1).Columns(2) '品目
B = .Resize(.Rows.Count - 1).Columns(3) '単価
C = .Resize(.Rows.Count - 1).Columns(4) '数量
End With
Sheets("請求書").Range("A10").Resize(UBound(A, 1)) = A '品目
Sheets("請求書").Range("D10").Resize(UBound(B, 1)) = B '単価
Sheets("請求書").Range("E10").Resize(UBound(C, 1)) = C '数量'最終シートにコピー
Sheets("請求書").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Range("A2") 'シート名を変更'コピーした値をクリア
Sheets("DB").Range("F1").CurrentRegion.Clear
Next
End Sub
Sub TEST6()
With Sheets("DB")
'取引先の値を、別セルにコピー
.Range("A1").CurrentRegion.Resize(, 1).Copy .Range("F1")
'重複を削除
.Range("F1").CurrentRegion.RemoveDuplicates 1, xlYes
End With
Dim D
With Sheets("DB").Range("F1").CurrentRegion
D = .Resize(.Rows.Count - 1).Offset(1, 0) '取引先の配列を作成
.Clear 'セルに入力した取引先をクリア
End With
For i = 1 To 3
'取引先でフィルタ
Sheets("DB").Range("A1").AutoFilter 1, D(i, 1)
'フィルタ結果を、別セルにコピー
Sheets("DB").Range("A1").CurrentRegion.Copy Sheets("DB").Range("F1")
Sheets("DB").Range("A1").AutoFilter 'オートフィルタを解除'請求書の入力欄をクリア
Sheets("請求書").Range("A2,A10:E12").ClearContents
'取引先を入力
Sheets("請求書").Range("A2") = Sheets("DB").Range("F2")
Dim A, B, C
With Sheets("DB").Range("F1").CurrentRegion.Offset(1, 0)
A = .Resize(.Rows.Count - 1).Columns(2) '品目
B = .Resize(.Rows.Count - 1).Columns(3) '単価
C = .Resize(.Rows.Count - 1).Columns(4) '数量
End With
Sheets("請求書").Range("A10").Resize(UBound(A, 1)) = A '品目
Sheets("請求書").Range("D10").Resize(UBound(B, 1)) = B '単価
Sheets("請求書").Range("E10").Resize(UBound(C, 1)) = C '数量
Sheets("請求書").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Range("A2")
'コピーした値をクリア
Sheets("DB").Range("F1").CurrentRegion.Clear
Next
End Sub
では、VBAコードを実行してみます。
まずは、取引先リストを作成していきます。
取引先リストを作成
取引先の値を別セルにコピーをします。
コピーした値から重複する値を削除します。
取引先のリストを配列に格納します。
コピーした値はクリアしておきます。
次は、配列をループして取引先ごとに請求書を作成していきます。
配列をループして取引先ごとに請求書を作成
配列をループして、取引先ごとに請求書を作成していきます。
1つ目の取引先の請求書を、別シートに作成します。
2つ目の取引先の請求書を、別シートに作成します。
3つ目の取引先の請求書を、別シートに作成します。
これで、取引先リストを使って、複数シートに請求書を作成できます。
取引先リストを作成して、請求書を作成できた
取引先リストを使って、複数シートに請求書を作成できました。
複数の請求書を複数ブックに作成
次は、取引先リストを作成して、「複数ブック」に請求書を作成してみます。
取引先ごとに、複数ブックに請求書を作成したい
複数ブックに、請求書を作成してみます。
結果からみると、こんな感じで、複数ブックに請求書を作成できます。
では、VBAコードをみてみます。
VBAコード
取引先リストを作成して、複数ブックに請求書を作成する手順は、次のようになります。
取引先の値を別セルにコピー
取引先の値から重複を削除
重複を削除した値を配列に格納
取引先リストをループ
取引先ごとに新規ブックに請求書を作成
新規ブックを名前を付けて保存
という感じです。
Sub TEST7()
With Sheets("DB")
'取引先の値を、別セルにコピー
.Range("A1").CurrentRegion.Resize(, 1).Copy .Range("F1")
'重複を削除
.Range("F1").CurrentRegion.RemoveDuplicates 1, xlYes
End With
Dim D
With Sheets("DB").Range("F1").CurrentRegion
D = .Resize(.Rows.Count - 1).Offset(1, 0) '取引先の配列を作成
.Clear 'セルに入力した取引先をクリア
End With
For i = 1 To 3
'取引先でフィルタ
Sheets("DB").Range("A1").AutoFilter 1, D(i, 1)
'フィルタ結果を、別セルにコピー
Sheets("DB").Range("A1").CurrentRegion.Copy Sheets("DB").Range("F1")
Sheets("DB").Range("A1").AutoFilter 'オートフィルタを解除'請求書の入力欄をクリア
Sheets("請求書").Range("A2,A10:E12").ClearContents
'取引先を入力
Sheets("請求書").Range("A2") = Sheets("DB").Range("F2")
Dim A, B, C
With Sheets("DB").Range("F1").CurrentRegion.Offset(1, 0)
A = .Resize(.Rows.Count - 1).Columns(2) '品目
B = .Resize(.Rows.Count - 1).Columns(3) '単価
C = .Resize(.Rows.Count - 1).Columns(4) '数量
End With
Sheets("請求書").Range("A10").Resize(UBound(A, 1)) = A '品目
Sheets("請求書").Range("D10").Resize(UBound(B, 1)) = B '単価
Sheets("請求書").Range("E10").Resize(UBound(C, 1)) = C '数量'新規ブックにコピーする
Sheets("請求書").Copy
'名前を付けて保存
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & Range("A2") & ".xlsx"
ActiveWorkbook.Close False '新規ブックを閉じる'コピーした値をクリア
Sheets("DB").Range("F1").CurrentRegion.Clear
Next
End Sub
では、VBAコードを実行してみます。
まずは、取引先データから重複を作成して、取引先のリストを作成します。
取引先リストを作成
次に、新規ブックに1つ目の取引先の請求書を作成していきます。
新規ブックに1つ目の取引先の請求書を作成
1つ目の取引先の請求書を作成します。
新規ブックに請求書をコピーします。
新規ブックを名前を付けて保存します。
別ブックに名前を付けて保存できます。
新規ブックは閉じます。
これで、1つ目の取引先で、新規ブックに請求書を作成できます。
同じように、2つ目と3つ目の取引先の請求書を作成していきます。
2つ目と3つ目の取引先の請求書を作成
2つ目の取引先の請求書を作成できます。
3つ目の取引先の請求書を作成できます。
これで、取引先ごとに複数ブックに請求書を作成できます。
取引先ごとに複数ブックに請求書を作成できた
複数ブックに請求書を作成できます。
中身を確認してみます。
取引先ごとに複数ブックに請求書を作成できています。
複数の請求書をPDFで作成する
次は、取引先ごとに、複数の請求書をPDFで保存してみます。
まずは、結果からみてみます。
取引先ごとにPDFで請求書を作成したい
やりたい内容は、取引先ごとに、複数PDFに保存したいということになります。
取引先ごとに、複数PDFに保存することができます。
取引先ごとに、請求書をPDFで保存する手順は、次のようになります。
取引先の値を別セルにコピー
取引先の値から重複を削除
重複を削除した値を配列に格納
取引先リストをループ
取引先ごとにPDFを作成
という感じです。
Sub TEST8()
With Sheets("DB")
'取引先の値を、別セルにコピー
.Range("A1").CurrentRegion.Resize(, 1).Copy .Range("F1")
'重複を削除
.Range("F1").CurrentRegion.RemoveDuplicates 1, xlYes
End With
Dim D
With Sheets("DB").Range("F1").CurrentRegion
D = .Resize(.Rows.Count - 1).Offset(1, 0) '取引先の配列を作成
.Clear 'セルに入力した取引先をクリア
End With
For i = 1 To 3
'取引先でフィルタ
Sheets("DB").Range("A1").AutoFilter 1, D(i, 1)
'フィルタ結果を、別セルにコピー
Sheets("DB").Range("A1").CurrentRegion.Copy Sheets("DB").Range("F1")
Sheets("DB").Range("A1").AutoFilter 'オートフィルタを解除'請求書の入力欄をクリア
Sheets("請求書").Range("A2,A10:E12").ClearContents
'取引先を入力
Sheets("請求書").Range("A2") = Sheets("DB").Range("F2")
Dim A, B, C
With Sheets("DB").Range("F1").CurrentRegion.Offset(1, 0)
A = .Resize(.Rows.Count - 1).Columns(2) '品目
B = .Resize(.Rows.Count - 1).Columns(3) '単価
C = .Resize(.Rows.Count - 1).Columns(4) '数量
End With
Sheets("請求書").Range("A10").Resize(UBound(A, 1)) = A '品目
Sheets("請求書").Range("D10").Resize(UBound(B, 1)) = B '単価
Sheets("請求書").Range("E10").Resize(UBound(C, 1)) = C '数量'PDFで保存
With Sheets("請求書")
.ExportAsFixedFormat 0, ThisWorkbook.Path & "\" & .Range("A2") & ".pdf"
End With
'コピーした値をクリア
Sheets("DB").Range("F1").CurrentRegion.Clear
Next
End Sub