エクセルで差し込み印刷

説明

エクセルのみで完結する差し込み印刷のやり方をエクセルマクロぜんぜんわかりませんという方に向け丁寧に説明していきます。

拡大・縮小なしでA4・1ページ内に収まるようなフォームに対して使えるマクロになりますのでご了承ください。

差し込み印刷って?

このようなデータ一覧から

このような決まったフォームに

必要なデータだけを書き換えて次々に印刷するようなものを差し込み印刷といいます。

ワードの便利機能なのですが、それをエクセルのみで行います。

※使用の際はすべて自己責任にてご使用ください。

広告

目次

1・必要なシート

2・エクセルファイルのマクロ有効化

3・開発タブの表示

4・マクロ実行ボタンの設置

5・VBAエディタ起動

6・プログラムの設置

7・実行確認

8・プログラムの説明

9・プログラムの再開

こちらの手順で説明していきます。

必要に応じて各項目へ飛んでいただいて大丈夫です。

ソースプログラムは中ほどにあります。

ソースプログラム

マクロ有効化手前までの状態のものをダウンロードできる状態にしてありますので、必要ならダウンロードしてください。

エクセルで差し込み印刷テンプレダウンロード

続きましてこちらはマクロを有効化した状態のものになりますので、セキュリティ上何も問題ないという方はダウンロードしてください。

動作に関しては保証できません。使用に関して発生したいかなる損害に関してもすべて自己責任にてご使用ねがいます。

エクセルで差し込み印刷マクロテンプレダウンロード

使用方法


1・必要なシート

まずは元データのシートと

そのデータを流し込むフォームとなるシートとを

用意してください。

説明の為に見た目はだいぶ適当に作っております。

元データとなるシートはセルの結合などはせずに1行目に項目名をいれてその後は規則正しくデータが並んでいるというようなカタチにしてください。

シート名は「データ」と「請求書」でいきます。

↑データ↑

↑請求書↑


2・エクセルファイルのマクロ有効化


次にこちらのファイルをエクセルマクロつきファイルで保存していきます。

名前を付けて保存からファイルの種類を選択(名前は仮に請求書マクロとしておきます)

ファイルの種類をマクロ有効ブックにして保存します。

こんな感じですね。

!ビックリマークがついている方がマクロ有効エクセルファイルになります。

前のファイルはもう使わないので消しても大丈夫です。

マクロブックを開く時に「コンテンツの有効化」を求められる場合がありますが、自分で作っている問題のないマクロファイルだったらそのまま有効化して大丈夫です。


3・開発タブの表示


次はプログラムを作る為に必要な開発タブを設置していきます。

ファイルメニューから

オプションを選択

リボンのユーザー設定を選択

右側の開発のトコロにチェックをしてOKすれば完了です。

開発タブが表示されました。

広告


4・マクロ実行ボタンの設置


実行ボタンを設置していきます。

1・開発タブに合わせて

2・挿入から

3・左上のボタンのような部分をクリック

カーソルが十字に変わるので適当な場所でドラッグ

出てきた画面はそのままOK

実行ボタンが設置されます。

そのままの状態でボタンの編集ができます。

テキストの部分にカーソルを合わせてクリックすればテキストも編集できます。

ボタンの編集状態を解除するには何もないセルをクリック

ボタンの上で右クリックすれば再び編集状態になります。

とりあえず印刷ボタンとして右上に設置しておきました。


5・VBAエディタ起動


プログラムを編集できる状態にします。

Visual Basicをクリック

Microsoft Visual Basic for Applicationsというプログラムを書くためのエディターが立ち上がります。

挿入から標準モジュールをクリック

この白い部分にプログラムを書いていきます。


6・プログラムの設置


それではようやくプログラムを貼り付けていきます。

下のプログラムコピーボタンを押してプログラムをコピー

Option Explicit Sub insatu() Dim gyou As Integer '2行目から4行目という意味 For gyou = 2 To 4 '請求書シートのa5セルの内容をデータシートの1列目の値にするというプログラム Worksheets("請求書").Range("a5").Value = Worksheets("データ").Cells(gyou, 1).Value '以下同じようにプログラムをコピーしてセルの場所とデータの列の位置だけ書き換えていく Worksheets("請求書").Range("a7").Value = Worksheets("データ").Cells(gyou, 2).Value 'ここから印刷部分、先頭の'を外せば実行される '初期状態は印刷プレビュー '印刷プレビュー Worksheets("請求書").PrintPreview '印刷 'Worksheets("請求書").Printout Next End Sub

VBAエディターに戻って右クリック→貼りつけをしましょう。

こんな感じになれば成功です。

上書き保存して

VBAエディタの×ボタンでVBAエディタだけ閉じる事ができます。

最後にボタンに今作ったマクロを登録していきます。

ボタンの上で右クリックしてマクロの登録をクリック

今作った「insatu」というマクロを選べるようになるので選択してOK

何もないセルを選択してボタンの編集状態を解除して完了です。


7・実行確認


とりあえず実行確認してみます。

ボタンをおしてみましょう。

~成功した時~

成功した時は印刷プレビューが3回ほど表示されます。

~エラーの時~

エラーの原因はいくつかあると思いますが、おそらくもっとも可能性が高そうなのが、

こちらのエラーかもしれません。

これは目的のシート(今回はデータシートと請求書シート)の名前が間違えていたり、そもそもシートそのものがない時などに発生します。

※エラーを起こすために請求書シートを領収書シートに変えてみました。

この時は終了という方をクリックしてください。

終了をクリックするとプログラムは止まりますので、シート名を修正するなどして再度上書き保存、実行してください。

もしデバッグというものを押してしまった時は、

こんな状態になるかと思われます。

これはプログラム実行途中の状態で無理やり止めているような状態になりますので、上の四角いボタンでプログラムを一度止めてから修正をしてください。


8・プログラムの説明


それではプログラムの説明です。

プログラムは説明の為に少し未完成にしてあります。

~何行目まで印刷するか~


For gyou = 2 To 4

前半のこちらは2行目から4行目まで印刷しますという事を表しております。

ここの部分ですね。

1行目は項目になりますので2行目からスタートしているワケですね。

この4の部分をデータの行数に応じて増やしたりすればその分印刷してくれます。

今回のデータは6行目まであるので4を6に変えれば6行目まで印刷してくれるという事です。

入力はすべて半角英数で行ってください。

~それぞれの列のデータをどのセルに移すか~

先に請求書フォームから書き換えるデータのセル位置を確認してみます。

今回書き換えるのはA5セル:会社名、A7セル:住所、D9セル:金額の3か所ですね。

セルの結合など行った場合はセルの番号に気を付けてください。

あとこの請求書フォームの消費税などのように自前で計算できるところはそのまま計算式を入れてしまってかまいません。

ではプログラムを見てみます。


'請求書シートのa5セルの内容をデータシートの1列目の値にするというプログラム
Worksheets("請求書").Range("a5").Value = Worksheets("データ").Cells(gyou, 1).Value

'以下同じようにプログラムをコピーしてセルの場所とデータの列の位置だけ書き換えていく
Worksheets("請求書").Range("a7").Value = Worksheets("データ").Cells(gyou, 2).Value

ちょっと難しくなってきましたがコメントにもありますようにコピペしてセルの場所とデータの列の位置を書き換えるだけです!

データの列の位置は・・・、

このようになります。

A列、B列、C列ではなく数字で順番に1,2,3・・・と数えていくのがポイントです。

プログラムの修正場所は

こちらですね。

以上を踏まえてさきほどのプログラムに必要な部分を加えると


'請求書シートのa5セルの内容をデータシートの1列目の値にするというプログラム
Worksheets("請求書").Range("a5").Value = Worksheets("データ").Cells(gyou, 1).Value

'以下同じようにプログラムをコピーしてセルの場所とデータの列の位置だけ書き換えていく
Worksheets("請求書").Range("a7").Value = Worksheets("データ").Cells(gyou, 2).Value
Worksheets("請求書").Range("d9").Value = Worksheets("データ").Cells(gyou, 3).Value

このようになりますね!

D9セルの部分を一行加えました。

~印刷プレビューと印刷~

最後に印刷ですね。


'ここから印刷部分、先頭の'を外せば実行される
'初期状態は印刷プレビュー
'印刷プレビュー
Worksheets("請求書").PrintPreview

'印刷
'Worksheets("請求書").Printout

先頭の'を消すだけでその行のプログラムが実行されます。

初期状態でいきなり印刷されるとこまると思いますので印刷プレビューが表示されるようにしております。

ですのでこのプログラムを


'ここから印刷部分、先頭の'を外せば実行される
'初期状態は印刷プレビュー
'印刷プレビュー
'Worksheets("請求書").PrintPreview

'印刷
Worksheets("請求書").Printout

このようになおせばプレビューなしで一気に印刷だけしてくれます。

コメント前の'は外さないでください、エラーになります。

ではすべて修正した完成プログラムになります。

いやおうなしに印刷されるのでご注意ください。

Option Explicit

Sub insatu()
    Dim gyou As Integer
    
    '2行目から4行目という意味
    For gyou = 2 To 6

        '請求書シートのa5セルの内容をデータシートの1列目の値にするというプログラム
        Worksheets("請求書").Range("a5").Value = Worksheets("データ").Cells(gyou, 1).Value

        '以下同じようにプログラムをコピーしてセルの場所とデータの列の位置だけ書き換えていく
        Worksheets("請求書").Range("a7").Value = Worksheets("データ").Cells(gyou, 2).Value
        Worksheets("請求書").Range("d9").Value = Worksheets("データ").Cells(gyou, 3).Value
        

        'ここから印刷部分、先頭の'を外せば実行される
        '初期状態は印刷プレビュー
        '印刷プレビュー
        'Worksheets("請求書").PrintPreview

        '印刷
        Worksheets("請求書").Printout

    Next
    
End Sub

9・プログラムの再開


プログラムを再開するには

開発タブからVisual Basicをクリック

左側のModule1の左側をクリックして、出てきた標準モジュールをダブルクリック

プログラムが表示されます。

おしまい