- 公開日:
エクセルの差し込み印刷をVLOOKUPを使って連続印刷する
この記事では、エクセルの差し込み印刷をVLOOKUPを使って連続印刷する方法をご紹介します。
エクセルを使って請求書や納品書を作成する場合、入力値を手動で入れ替えるのはミスの原因にもなるため、ボタン1つでデータ群から値を抽出して連続印刷する方法をご紹介します。
以下では、差し込み印刷をVLOOKUPを使って連続印刷するVBAコードとVBAを使わない方法も合わせてご紹介しています。
開発タブを表示させる
今回はVBAを使ってVLOOKUP関数の差し込み印刷をするので、「開発」タブを使用します。
画面上部に赤矢印で示した「開発タブ」が表示されていることを確認してください。
表示されていない場合は、以下の記事で表示する方法をご紹介しています。
エクセルの差し込み印刷をVLOOKUPを使って連続印刷する
VLOOKUP関数を使って差し込み印刷をすると、上記の画像の左側のシート(例:請求書)の色付けされたセルに、別シート(例:一覧)にあるデータ群からデータを抽出して自動で連続印刷することができます。
上記の写真は、今回紹介するコードを使って実際に連続印刷したものです。
VBAを使うことで、ボタン1つでデータの連続印刷をすることができるので便利です。
以下では、エクセルの差し込み印刷をVLOOKUPを使って連続印刷する方法をご紹介します。
上記の画像は、差し込み印刷をする請求書のフォーマットです。
色が付いたセルにVLOOKUP関数でデータを抽出します。
赤字で書いてある数式は、あらかじめ入力している数式なのでVBAコードとは別に入力しておく必要があります。
K12セルに入力している「=IFERROR(H12*I12, 0)」は、データ群に抽出する値がない場合にエラーが表示されていると計算ができないため、IFERROR関数でエラーの場合は「0」を返すように指定しています。
IFERROR関数は、引数の値がエラーの場合に、エラーの替わりに文字列や空白を指定することができます。書式は「IFERROR(値,エラーの場合の値)」です。
詳しい説明などは、以下の記事でご紹介しています。
ExcelのIFERROR関数の使い方|エラーの場合に指定した値を返す
①開発タブ、②Visual Basicの順に選択します。
「Microsoft Visual Basic for Applications」が開きました。
①挿入タブ、②標準モジュールの順に選択します。
「標準モジュール」が開きました。
以下のコードをコピーしてモジュールに貼り付けてください。
Sub VLOOKUP関数の差し込み印刷()
Dim masterSheet As Worksheet
Dim invoiceSheet As Worksheet
Dim formula As String
Dim i As Integer
Dim j As Integer
Dim rng As Range
Dim ranges As Variant
Dim colIndexes As Variant
' マスタシートと請求書シートを設定
Set masterSheet = ThisWorkbook.Sheets("一覧")
Set invoiceSheet = ThisWorkbook.Sheets("請求書")
' VLOOKUP設定用の範囲とカラムインデックス
ranges = Array("A3", "K2", "K3", "A12", "H12", "I12", "A13", "H13", "I13", "A14", "H14", "I14")
colIndexes = Array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
' ループでA2からA4までのセルをB1に設定し、VLOOKUP関数を設定
For i = 2 To 4
invoiceSheet.Range("B1").Value = masterSheet.Cells(i, 1).Value
For j = LBound(ranges) To UBound(ranges)
Set rng = invoiceSheet.Range(ranges(j))
If j >= 3 Then '条件付きのVLOOKUP関数の設定
formula = "=IF(LEN(VLOOKUP($B$1, 一覧!$A:$M, " & colIndexes(j) & ", FALSE)) > 0, VLOOKUP($B$1, 一覧!$A:$M, " & colIndexes(j) & ", FALSE), """")"
Else '単純なVLOOKUP関数の設定
formula = "=VLOOKUP($B$1," & masterSheet.Name & "!$A:$M," & colIndexes(j) & ",FALSE)"
End If
rng.formula = formula
Next j
' プリントアウト(直接印刷)
With invoiceSheet.PageSetup
.FitToPagesWide = 1 ' ページ幅を1ページに設定
.FitToPagesTall = 1 ' ページ高さを1ページに設定
End With
invoiceSheet.PrintOut
Next i
End Sub
データが入力されているシート(例:一覧)とフォーマットのシート名(例:請求書)を指定します。
ranges
配列で指定されたセル範囲内で検索をして、指定した colIndexes
配列の列(例:一覧シートのB列からM列)から結果を取得します。
ループ変数i
を使用して、マスターシートのA2セルからA4セルの値を請求書シートのB1セルに設定します。
B1セルをVLOOKUP関数の「検索値」としてVLOOKUP関数で必要なデータを抽出します。
また、上記のコードはプレビューを表示することなく自動で連続印刷します。一度プレビューで確認したい場合は、最後の「 invoiceSheet.PrintOut」を「invoiceSheet.PrintPreview」に変更してください。
作成したマクロを保存します。
①ファイルタブ、②上書き保存の順に選択します。
「名前を付けて保存」ダイアログボックスが表示されました。
①保存先(例:デスクトップ)を選択し、②ファイル名(例:VLOOKUP関数の差し込み印刷)を入力します。③ファイルの種類でExcelマクロ有効ブックを選択し、④保存ボタンを押します。
Excelシートに戻ります。
①開発タブ、②マクロの順に選択します。
「マクロ」ダイアログボックスが表示されました。
①作成したマクロ(例:VLOOKUP関数の差し込み印刷)を選択し、②実行ボタンを押します。
「一覧」シートのデータをVLOOKUP関数で「請求書」シートに抽出することができました。
マクロを実行すると自動でデータが入れ替わって連続印刷するので、表示されているデータは「一覧」シートの最終行のデータです。
データを差し込んで印刷することができました。
VBA以外で差し込み印刷をVLOOKUPを使って連続印刷する
VBAに慣れていない場合、必要な箇所を入れ替えているうちにエラーが表示されて、かえってややこしくなることがあります。
VBAを使用したくない場合は、数式を直接入力して差し込み印刷をVLOOKUPを使って連続印刷する方法があります。
以下の記事「エクセルでマクロを使わずに連続印刷する方法」セクションでは、住所録からVLOOKUP関数でデータを抽出して差し込み印刷する方法をご紹介します。