パソコンカレッジ スタッフのひとりごと

パソコンスクールのスタッフが、
初心者から上級者まで役立つ情報をお伝えします。

宛名を変えて自動的に連続印刷する方法(Excel2000以降)

2017-05-15 10:45:37 | ExcelVBA
今日は、先日いただきましたリクエストを取り上げます。

『昔仕事で、「申込書」「名簿」「許可書」に名簿の名前をいっぺんにうちこんで同時にプリントアウトする、
という高度なことを先輩がやってまして、(中略)あれはどういったプログラムだったのでしょう?』

多分こういう質問だろうと僕は解釈しました。
つまり、「別シートにある名簿から名前を取り込んで、その都度、印刷しては、次の名前を取り込む、
という繰り返しをプログラムで行う方法を教えてほしい」と。

解釈が違っていたら、また取り上げますので、ご連絡ください・・・


さて、以下のような発注書があるとします。







注目してほしいのは、A4(A列4行目)の数字です。この数字は、顧客Noなのです。
この数字に対応した顧客名がA6に読み込まれます。





実は、別シートに顧客名簿があるのです。ご覧いただきましょう。






さて、A6には、関数を設定してあります。
A4の値に対応した顧客名を名簿から参照する関数です。そうです、VLOOKUP関数ですね。






さて、さっそくコードを書いてみましょう。


ALT + F11 で、VisualBasicEditorを起動します。

「挿入」→「標準モジュール」をクリックします。

そこに、次のようにコードを記述してください。


Sub 連続印刷()
    Dim i As Integer
    Dim LastRow As Integer
    
    Worksheets("発注書").Select
    
    With Worksheets("名簿")
        LastRow = .Range("A65536").End(xlUp).Row
        For i = 2 To LastRow
            Range("A4").Value = .Range("A" & i).Value
            ActiveSheet.PrintPreview
        Next
    End With
End Sub



一応、画像も掲載しておきます。





名簿の顧客が増えても全員印刷できるように、名簿の最終行は、プログラムで判断しています。
また、この段階では、実際に印刷するわけではなく、確認のために印刷プレビューするコードになっていますので、
ご了承ください。


それでは、実行してみましょう。

Excelに切り替えて、Excel2003までは、「ツール」→「マクロ」→「マクロ」とクリックします。
Excel2007は、Altキーを押しながらF8キーを押してください。
実行ボタンをクリックします。






プレビュー画面が表示されますね。
この画面を閉じると、即座に次の顧客名でプレビューされます。
うまくいってますね。






実際に連続印刷する場合は、
ActiveSheet.PrintPreview
を、以下のように変更します。
ActiveSheet.PrintOut

ただし、顧客の人数が多い場合には、若干注意が必要です。
というのも、プリンタによっては、対応できずにエラーになることがあるからです。

この場合、対応するコードを追加したほうが安全です。
このコードについては、改めてご紹介しますね。



VBAって奥が深いですね。

奥が深いと言えば、エクセルって色々な機能があって、使い方によってはまるで手品(マジック)のようになるんですよね。

VBAをからめると、さらにドッキリ度がアップします。親子のやり取りを通じて、そんなエクセルの面白さが満載の本が、

子どもの“プログラミング的思考"をグングン伸ばす本

この本、おすすめですよ(^^)


だい

コメント (8)    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 複数のコントロールのイベン... | トップ | 入力確定前の文字が上にずれ... »
最新の画像もっと見る

8 コメント

コメント日が  古い順  |   新しい順
こんにちは (けん)
2009-10-19 14:13:40
こんにちは お天気が好いですね」。
今日の記事も読ませて頂きました。
興味ある記事です。
招待状、とか宛名に利用できますね。
次の記事を待ってます。
返信する
けんさんへ (だい)
2009-10-21 20:57:24
いつもコメントありがとうございます。
また、リクエストをお待ちしております。
エクセルは、おりこうですよね。
返信する
おせわさまです。 (けん)
2009-10-22 08:57:33
おはようございます。
家に帰ってから試してみたのですがどうも頭の固い僕には解らない所があります。

=vlookup(A4,名簿!A2:C11,2,0)&” 御中”
           ↑↑↑
C11,2,0)
この辺の解説意味をご教授ください。
よろしくおねがいします。
返信する
教えてください (やす)
2018-05-08 16:02:35
上記の書式に合わせて作成したのですが、2点うまくいきませんので、教えてください。
一つは、連続印刷が作動しません。
実行を行い、1枚だけはプレビューが表示され、その後印刷プレビューを閉じるボタンを押すと「コードの実行が中断されました。」と表示されませす。
対処方法はありますか。
返信する
質問 (大地)
2019-02-17 14:00:27
上記のマクロとても参考になりました。
データを持ってきてるシートにIFの関数を入れて仕分け可能になっているのですが、その値が特定の行だけ連続印刷することは可能でしょうか?
よろしくお願いします。
返信する
教えてください (mabo)
2019-06-25 16:36:50
上記マクロ参考になりました。ありがとうございます。
連続印刷はうまくいったのですが、印刷ではなくPdf出力にする方法を教えていただけないでしょうか。
宜しくお願いします。
返信する
教えてください。 (もりシゲ)
2020-05-07 13:17:32
上記マクロ参考になりました。
ありがとうございます。
別シートに顧客名簿のD2からD11に2以上の枚数を指定して、自動印刷する場合の方法を教えてください。
お願い致します。
返信する
教えてください。(説明不足) (もりシゲ)
2020-05-08 08:20:19
説明不足なので、再度お願いします。
別シートに顧客名簿
D2=2枚、D3=3枚、D4=1枚、D5=5枚、
からD11まで、枚数は色々あり、行数ももっとあります、
また枚数もその都度変更します。
自動印刷印刷可能なマクロを教えてください。
返信する

コメントを投稿

ExcelVBA」カテゴリの最新記事