ExcelからExcelへ差し込み自動印刷するマクロExcelを作ってみた

Excel
スポンサーリンク

こないだ、久々にhuluで映画を観ました。
「ピッチ・パーフェクト」。
ミュージカル映画って結構すきなんです。
バーレスクとかシカゴとかヘアスプレーとか。ナインはストーリーがよくわかんなかったけど、歌の部分はよかったなあ。
ララランド観たいなあ。

ピッチパーフェクトはアメリカの大学のアカペラサークルを舞台にしたお話なんですが、昔の曲から新しい曲までたくさんでてきてとっても楽しい。
そして当たり前だけどみんな歌がうまくて、聞いてて楽しい!
今年の7月にシリーズ3作目がアメリカで公開されたんだとか。
まずは2だな。2を絶対に観よう。

主演のアナ・ケンドリックはどっかで見たことあるなあと思っていたら、トワイライトサーガシリーズに出ていたのね!
トワイライトサーガシリーズは映画も観たんだけど、原作のトワイライトにすごくはまって読んでました。
もう結構昔だなあ。懐かしい。

スポンサーリンク

ExcelからExcelへ差し込み印刷できるマクロを作ってみた

Wordは差し込み印刷機能ってあるけど、ExcelからExcelへの差し込み印刷ってできないんですね。
なんでいきなりこんなこと書いてるのかというと、仕事でちょっと前に作ったから。
Excelで作った表に、スタッフ名を入れて自動印刷できるようにしたかったんです。
いままでは表だけ印刷してそこにハンコで名前を入れたり手書きで名前を書いたりしていたようなんですが、面倒だっていうことになって…。

難しいことになると全然できないわたしですが、なんとかかんとか見様見真似で。
インプットしたのでアウトプットしようと思い、記事にしてみました。
今回は例として出勤簿を印刷する形で作ってみましたが(出勤簿手書きってあんまりないですよね…)、スタッフごとの記録シートとか、商品ごとのシートなんかで使えるのかなあと思います。

↓こんなかんじ

  1. 1つのExcelブックの中に「スタッフマスタ(印字するスタッフのリスト)」と「印刷シート(実際に印刷するテンプレート)」の2枚のシートを作る(実際は同一シートの中でも作れますが)
  2. 「スタッフマスタ」のリストをVLOOKUP関数で「印刷シート」に表示させる
  3. 印刷用マクロを作成
  4. ボタンを作ってマクロを実行→「印刷シート」を「スタッフマスタ」のリストにある全員分自動的に印刷する

1.リストと印刷用テンプレートを作成する

上でも書いているように実際は同一シートの中でも作れますが、今回は元からあったシートが結構なボリュームで作ってあったので、操作しやすくするために別シートにすることにしました。

スタッフマスタ=印字したいスタッフ名のリスト
印刷シート=スタッフ名を入れて実際に印刷するシート です。

スタッフマスタで必要なのは、A列とB列だけ
A列には通し番号を、B列には印字したいスタッフ名を入力しておきます。
通し番号の順に印刷されるので、そのまま配ったりするのであればこの点を考慮してリストを作っておくと便利です。

印刷シートには、氏名と通し番号を表示させるスペースがあればあとはなんでもOKです。

2.VLOOKUP関数を使ってスタッフ名を印刷シートに表示させる

(あっなんかシート名:Sheet1とか書いてますね。間違いです。シート名は印刷シートです。)
今回作ったシートでは、J4セルに通し番号を、A4セルにスタッフ名を表示させています。
J4セルに入力した通し番号を、A4セルに入れたVLOOKUP関数で読んでスタッフ名を返す仕組みです。

A4セルに入っている関数式↓
=VLOOKUP(J4,スタッフマスタ!A:B,2)

今回は説明用にJ4セルの文字を見えるようにしていますが、わたしはこのセルの文字色を白にして使っています。
なんとなく見栄えの問題なんですが。

3.印刷用マクロを作成

これの元になったマクロは、ネットでどなたかが無料UPしてたのをいただいてきました。
ちょっとまえのことなのでどのブログからだったかすでにわからず…。
見つけたらリンクさせていただきたいと思います。

↓↓↓ここから↓↓↓

Sub 印刷()
Dim LastRow As Long
Dim i As Long
Dim myNo As Long

If vbNo = MsgBox(“印刷を開始していいですか?”, vbYesNo) Then Exit Sub

With Worksheets(“スタッフマスタ”)
LastRow = .Cells(.Rows.Count, “A”).End(xlUp).Row

For i = 1 To LastRow

myNo = .Range(“A” & i).Value

With Worksheets(“印刷シート”)
.Range(“J4”).Value = myNo
.PrintOut Copies:=1, Collate:=True
End With
Next i
End With

MsgBox “印刷が終わりました”

End Sub

↑↑↑ここまで↑↑↑

必要に応じてシート名の部分と、通し番号を入れているJ4セルの部分を変更します。

4.ボタンを作ってマクロを実行

スタッフマスタシートにマクロの実行ボタンを作成します。
これは実際にこのシートを使う方がマクロをあまり触れない方になっても大丈夫なようにつけるだけなので、別になくてもOK。
スタッフマスタシートに簡単なメンテ方法がいろいろ書いてあるのもこのためです(このシートは結構忠実に再現した)。

Excel差し込みマクロのダウンロードはここから

マクロの実行テストは、通常使うプリンターをPDF仕様にしておくのがおすすめです。
紙とインクがもったいないので。

まとめ

複雑なマクロを一から自分で組める人ってすごいなあ…って本当に思います。
いまの職場でも、60くらいの人が複雑なマクロ作ってたりするもんなあ。
二重に感心。
わたしも頑張らなくちゃなあと、その姿を見るたびに思います。
そんなこんなな今日この頃。



スポンサーリンク
Excel
スポンサーリンク
もこログ

コメント

  1. マサ50 より:

    VBA全くの初心者です、雛形のEXCEL表に行データを埋込ながら印刷しようとしております。
    当HPがされらしきと・・ ここではVLOOKUPで行データを雛形にうめこんでおられますが
    雛形に直セルを指定し埋め込む事は出来ないでしょうか?

    • mokomokomomoko より:

      マサ50さま
      コメントありがとうございます。
      申し訳ないのですが、わたしもVBAがバリバリに使えるわけではなく勉強中なので、おっしゃるイメージがうまくつかめなくて…。
      もしよければ、差支えない範囲で具体的な例をいただければ、少しはお力になれることがあるかもしれません。
      お時間ある時にでもコメントいただければと思います^^

  2. こた より:

     初めてコメントさせていただきます。
     「エクセル 差し込み印刷」で検索し、貴サイトにおじゃまするものです。

     まさに私がやりたいことそのままでした。
     私も同様に人数分の用紙を印刷し、ボールペンでナンバーを、氏名をゴム印で押していました。
     それがボタン一発できれいに印字でき、しかも変動があっても楽に、間違いなく反映できるようになりました。
     有益な情報をアップしていただき、本当にありがとうございました。

    • mokomokomomoko より:

      こたさま
      コメントありがとうございます。
      うちの会社の担当者とまったく同じです!(笑)
      1枚ずつ書き込んで、ハンコを押して…はやっぱり面倒ですよね^^;
      お役に立ったとのこと、とっても嬉しいです!!
      お仕事がんばってくださいね^^

  3. ゆき より:

    初めまして。ExcelからExcelへの差し込み印刷の方法を探していて、こちらのページにたどり着きました。
    まさにやりたいことがそのまま掲載されていて、早速自分でも試してみたのですが
    お恥ずかしいながら、リストの番号が進んで行かず、同じ名前のまま100枚くらい(リストの行数分)印刷されてしまいました。
    どこを間違えてしまったのか分からず途方に暮れています…

    For i = 1 To LastRow

    myNo = .Range(“A” & i).Value

    このあたりがリストの番号を進める部分なのかな?と思っていますが
    もし対処法などご存知でしたら、ぜひご教示いただけたら嬉しいです。

    • mokomokomomoko より:

      ゆきさま
      コメントありがとうございます。また、お返事が遅くなってしまって申し訳ありませんでした。
      コメントをいただいて、わたしも100くらいまでリストを作ってテスト(出力はPDFですが)してみたのですが、
      わたしが試した限りでは
      >リストの番号が進んで行かず、同じ名前のまま100枚くらい(リストの行数分)印刷
      という状況にはなりませんでした。すみません…。

      マクロのつくりとしては、A1セルから下に番号の続く限り、番号横にあるB列の文字を読んで出力していきます。
      確かに挙げていただいた部分でリストの番号を読み込んでいるのですが…。
      とりあえずさっと考えられる可能性を挙げてみました。(このあたりはすでにチェックしていただいているかもなのですが…汗)
      念のため確認してみてください。
      ※名前つけるのが面倒ですが、印刷ミスで紙の無駄を省くためにテスト印刷はPDFがおすすめです。

      With Worksheets(“スタッフマスタ”) ←シート名は「スタッフマスタ」から変更していませんか?
      LastRow = .Cells(.Rows.Count, “A”).End(xlUp).Row ←リストの番号部分はA1セルから始まっていますか?

      For i = 1 To LastRow

      myNo = .Range(“A” & i).Value

      With Worksheets(“印刷シート”) ←印刷されるシート名は「印刷シート」から変更していませんか?
      .Range(“J4”).Value = myNo ←「印刷シート」J4 セルに何か数字以外のものは入っていませんか?
      .PrintOut Copies:=1, Collate:=True
      End With

タイトルとURLをコピーしました