今日は、先日いただきましたリクエストを取り上げます。
『昔仕事で、「申込書」「名簿」「許可書」に名簿の名前をいっぺんにうちこんで同時にプリントアウトする、
という高度なことを先輩がやってまして、(中略)あれはどういったプログラムだったのでしょう?』
多分こういう質問だろうと僕は解釈しました。
つまり、「別シートにある名簿から名前を取り込んで、その都度、印刷しては、次の名前を取り込む、
という繰り返しをプログラムで行う方法を教えてほしい」と。
解釈が違っていたら、また取り上げますので、ご連絡ください・・・
さて、以下のような発注書があるとします。
注目してほしいのは、A4(A列4行目)の数字です。この数字は、顧客Noなのです。
この数字に対応した顧客名がA6に読み込まれます。
実は、別シートに顧客名簿があるのです。ご覧いただきましょう。
さて、A6には、関数を設定してあります。
A4の値に対応した顧客名を名簿から参照する関数です。そうです、VLOOKUP関数ですね。
さて、さっそくコードを書いてみましょう。
ALT + F11 で、VisualBasicEditorを起動します。
「挿入」→「標準モジュール」をクリックします。
そこに、次のようにコードを記述してください。
一応、画像も掲載しておきます。
名簿の顧客が増えても全員印刷できるように、名簿の最終行は、プログラムで判断しています。
また、この段階では、実際に印刷するわけではなく、確認のために印刷プレビューするコードになっていますので、
ご了承ください。
それでは、実行してみましょう。
Excelに切り替えて、Excel2003までは、「ツール」→「マクロ」→「マクロ」とクリックします。
Excel2007は、Altキーを押しながらF8キーを押してください。
実行ボタンをクリックします。
プレビュー画面が表示されますね。
この画面を閉じると、即座に次の顧客名でプレビューされます。
うまくいってますね。
実際に連続印刷する場合は、
ActiveSheet.PrintPreview
を、以下のように変更します。
ActiveSheet.PrintOut
ただし、顧客の人数が多い場合には、若干注意が必要です。
というのも、プリンタによっては、対応できずにエラーになることがあるからです。
この場合、対応するコードを追加したほうが安全です。
このコードについては、改めてご紹介しますね。
VBAって奥が深いですね。
奥が深いと言えば、エクセルって色々な機能があって、使い方によってはまるで手品(マジック)のようになるんですよね。
VBAをからめると、さらにドッキリ度がアップします。親子のやり取りを通じて、そんなエクセルの面白さが満載の本が、
子どもの“プログラミング的思考"をグングン伸ばす本
この本、おすすめですよ(^^)
だい
『昔仕事で、「申込書」「名簿」「許可書」に名簿の名前をいっぺんにうちこんで同時にプリントアウトする、
という高度なことを先輩がやってまして、(中略)あれはどういったプログラムだったのでしょう?』
多分こういう質問だろうと僕は解釈しました。
つまり、「別シートにある名簿から名前を取り込んで、その都度、印刷しては、次の名前を取り込む、
という繰り返しをプログラムで行う方法を教えてほしい」と。
解釈が違っていたら、また取り上げますので、ご連絡ください・・・
さて、以下のような発注書があるとします。
注目してほしいのは、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をからめると、さらにドッキリ度がアップします。親子のやり取りを通じて、そんなエクセルの面白さが満載の本が、
子どもの“プログラミング的思考"をグングン伸ばす本
この本、おすすめですよ(^^)
だい
今日の記事も読ませて頂きました。
興味ある記事です。
招待状、とか宛名に利用できますね。
次の記事を待ってます。
また、リクエストをお待ちしております。
エクセルは、おりこうですよね。
家に帰ってから試してみたのですがどうも頭の固い僕には解らない所があります。
=vlookup(A4,名簿!A2:C11,2,0)&” 御中”
↑↑↑
C11,2,0)
この辺の解説意味をご教授ください。
よろしくおねがいします。
一つは、連続印刷が作動しません。
実行を行い、1枚だけはプレビューが表示され、その後印刷プレビューを閉じるボタンを押すと「コードの実行が中断されました。」と表示されませす。
対処方法はありますか。
データを持ってきてるシートにIFの関数を入れて仕分け可能になっているのですが、その値が特定の行だけ連続印刷することは可能でしょうか?
よろしくお願いします。
連続印刷はうまくいったのですが、印刷ではなくPdf出力にする方法を教えていただけないでしょうか。
宜しくお願いします。
ありがとうございます。
別シートに顧客名簿のD2からD11に2以上の枚数を指定して、自動印刷する場合の方法を教えてください。
お願い致します。
別シートに顧客名簿
D2=2枚、D3=3枚、D4=1枚、D5=5枚、
からD11まで、枚数は色々あり、行数ももっとあります、
また枚数もその都度変更します。
自動印刷印刷可能なマクロを教えてください。