• 公開日:

エクセルの差し込み印刷を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を開く

開発タブ、②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関数でデータを抽出して差し込み印刷する方法をご紹介します。

エクセルでマクロを使わずに連続印刷する方法