• ベストアンサー

エクセルで差し込み印刷をしたい。

エクセルで差し込み印刷のようなことをしたいと思います。 が、少々違うのはラベルのように印刷用の1シートに20人分のデータをまとめて印刷したいです。 データ用のシートにNO、性別、年齢を受験者情報として、数十人分入力します。 それを一覧表の形式にした印刷用シートに出力し、人数÷20ページとして印刷したいです。 また上部に印刷ページ数も出したいと思います。 うまいマクロ、VBAを教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.5

別の切り口で回答します 印刷ページ数を示すS1の値を用いて、INDEX関数で、データ用シートのデータを引っ張ってこれる様にします。 マクロはこれだけです。 Sub test() Dim i As Long '10は一例です For i = 1 To 10 ActiveSheet.Range("S1").Value = i ActiveWindow.SelectedSheets.PrintOut Copies:=1 Next End Sub 数式は、セル毎に一部修正の手間はかかりますが、分かり易い例を添付画像に示します。 (データの範囲は実際に合わせて調整して下さい) 簡単にコピーして使える様な数式にしたければ、ご自分で工夫なさってください。 ご参考まで。

makisaori
質問者

お礼

回答ありがとうございます。 とりあえず、上記でうまくいったんですけど、これ、もっとうまくできないでしょうか? データ件数を20で割り、ページ数を求めた回数だけループします。 1回ごとにセルのVLOOKUP関数を記述させます。 どうでしょうか?

makisaori
質問者

補足

Private Sub CommandButton1_Click() Dim 頁数 As Integer Dim 回数 As Integer 回数 = Range("b2").Value '(b2)はデータ件数を20で割って切り上げた値。データシートの(b2)に格納した値 For 頁数 = 1 To 回数 Sheets("印刷用台帳").Range("s1").Value = 頁数 '回数をそのまま頁数に代入。 '以下各セルの式を代入(実際は60セルありますがとりあえず30(10人分)で) Sheets("印刷用台帳").Range("b2").Value = "=VLOOKUP(" & (1 + (頁数 - 1) * 20) & ",受験者データ,1,FALSE)" Sheets("印刷用台帳").Range("b3").Value = "=VLOOKUP(" & (1 + (頁数 - 1) * 20) & ",受験者データ,2,FALSE)" Sheets("印刷用台帳").Range("b4").Value = "=VLOOKUP(" & (1 + (頁数 - 1) * 20) & ",受験者データ,3,FALSE)" Sheets("印刷用台帳").Range("d2").Value = "=VLOOKUP(" & (2 + (頁数 - 1) * 20) & ",受験者データ,1,FALSE)" Sheets("印刷用台帳").Range("d3").Value = "=VLOOKUP(" & (2 + (頁数 - 1) * 20) & ",受験者データ,2,FALSE)" Sheets("印刷用台帳").Range("d4").Value = "=VLOOKUP(" & (2 + (頁数 - 1) * 20) & ",受験者データ,3,FALSE)" Sheets("印刷用台帳").Range("f2").Value = "=VLOOKUP(" & (3 + (頁数 - 1) * 20) & ",受験者データ,1,FALSE)" Sheets("印刷用台帳").Range("f3").Value = "=VLOOKUP(" & (3 + (頁数 - 1) * 20) & ",受験者データ,2,FALSE)" Sheets("印刷用台帳").Range("f4").Value = "=VLOOKUP(" & (3 + (頁数 - 1) * 20) & ",受験者データ,3,FALSE)" Sheets("印刷用台帳").Range("h2").Value = "=VLOOKUP(" & (4 + (頁数 - 1) * 20) & ",受験者データ,1,FALSE)" Sheets("印刷用台帳").Range("h3").Value = "=VLOOKUP(" & (4 + (頁数 - 1) * 20) & ",受験者データ,2,FALSE)" Sheets("印刷用台帳").Range("h4").Value = "=VLOOKUP(" & (4 + (頁数 - 1) * 20) & ",受験者データ,3,FALSE)" Sheets("印刷用台帳").Range("j2").Value = "=VLOOKUP(" & (5 + (頁数 - 1) * 20) & ",受験者データ,1,FALSE)" Sheets("印刷用台帳").Range("j3").Value = "=VLOOKUP(" & (5 + (頁数 - 1) * 20) & ",受験者データ,2,FALSE)" Sheets("印刷用台帳").Range("j4").Value = "=VLOOKUP(" & (5 + (頁数 - 1) * 20) & ",受験者データ,3,FALSE)" Sheets("印刷用台帳").Range("l2").Value = "=VLOOKUP(" & (6 + (頁数 - 1) * 20) & ",受験者データ,1,FALSE)" Sheets("印刷用台帳").Range("l3").Value = "=VLOOKUP(" & (6 + (頁数 - 1) * 20) & ",受験者データ,2,FALSE)" Sheets("印刷用台帳").Range("l4").Value = "=VLOOKUP(" & (6 + (頁数 - 1) * 20) & ",受験者データ,3,FALSE)" Sheets("印刷用台帳").Range("n2").Value = "=VLOOKUP(" & (7 + (頁数 - 1) * 20) & ",受験者データ,1,FALSE)" Sheets("印刷用台帳").Range("n3").Value = "=VLOOKUP(" & (7 + (頁数 - 1) * 20) & ",受験者データ,2,FALSE)" Sheets("印刷用台帳").Range("n4").Value = "=VLOOKUP(" & (7 + (頁数 - 1) * 20) & ",受験者データ,3,FALSE)" Sheets("印刷用台帳").Range("p2").Value = "=VLOOKUP(" & (8 + (頁数 - 1) * 20) & ",受験者データ,1,FALSE)" Sheets("印刷用台帳").Range("p3").Value = "=VLOOKUP(" & (8 + (頁数 - 1) * 20) & ",受験者データ,2,FALSE)" Sheets("印刷用台帳").Range("p4").Value = "=VLOOKUP(" & (8 + (頁数 - 1) * 20) & ",受験者データ,3,FALSE)" Sheets("印刷用台帳").Range("r2").Value = "=VLOOKUP(" & (9 + (頁数 - 1) * 20) & ",受験者データ,1,FALSE)" Sheets("印刷用台帳").Range("r3").Value = "=VLOOKUP(" & (9 + (頁数 - 1) * 20) & ",受験者データ,2,FALSE)" Sheets("印刷用台帳").Range("r4").Value = "=VLOOKUP(" & (9 + (頁数 - 1) * 20) & ",受験者データ,3,FALSE)" Sheets("印刷用台帳").Range("t2").Value = "=VLOOKUP(" & (10 + (頁数 - 1) * 20) & ",受験者データ,1,FALSE)" Sheets("印刷用台帳").Range("t3").Value = "=VLOOKUP(" & (10 + (頁数 - 1) * 20) & ",受験者データ,2,FALSE)" Sheets("印刷用台帳").Range("t4").Value = "=VLOOKUP(" & (10 + (頁数 - 1) * 20) & ",受験者データ,3,FALSE)" Sheets("印刷用台帳").PrintPreview '↑ここだけ、「PrintOut」ではなく「PrintPreview」に変更しています Next 頁数 End Sub

その他の回答 (4)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.4

>添付画像の網掛け部分に1~20人分をVLOOKUP関数で表示する方法はわかりましたが、次に21~40を表示する時のLOOPの記述の仕方や、VLOOKUP関数に変数を入れて1ページめの”b2”にはNo1が、2ページめになった時No21を表示するようにする関数の書き方など、具体的なVBAを教えていただけませんでしょうか? 参考にされたURLの方法(1名分表示)を20名分のデータに適用するなら以下のような手順になります。 2~20番までの番号は、1番のセルを基準に「1番のセル+1」のような1番のセルを参照する数式にする。 Do WhileのRange("個人番号")の部分と右辺のRange("個人番号")+1の部分をRange("個人番号")+20にする。 これで基本部分はできると思います。

makisaori
質問者

補足

番号は自動繰り上がりでよいですが、性別、年齢など繰上りではだめなので、やはりデータシートを参照しなければなりません。 LOOPの回数はデータシートの(A2)にCOUNT関数でデータ数をかぞえ、=ROUNDUP(A2/20,0)でカウントできるようにしました。 この数字を使ってページ数も印刷できるのではと思っています。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.3

>VLOOKUP関数のやり方は他のページなど検索してみましたが、20人のデータを一覧表にして印刷したあと、21~40をまた印刷用シートに読み込んで印刷をしたいのです。 具体的にどのページを参考にされているのでしょうか? 例えば以下のページと同じようにするなら、1つのシートに20人分のデータを表示して、20件ごとにデータを移動すればよいと思うのですが・・・ http://pc.nikkeibp.co.jp/article/NPC/20070301/263710/ 現在どのようなコードを記載していて(どこまで作成できていて)、どの部分がわからないのかを具体的に提示されたほうが良いと思います。

makisaori
質問者

補足

ありがとうございます。このページも参考にしましたが、1人分のデータしか出ていないのでよくわかりません。 添付画像の網掛け部分に1~20人分をVLOOKUP関数で表示する方法はわかりましたが、次に21~40を表示する時のLOOPの記述の仕方や、VLOOKUP関数に変数を入れて1ページめの”b2”にはNo1が、2ページめになった時No21を表示するようにする関数の書き方など、具体的なVBAを教えていただけませんでしょうか? 添付画像が小さくてみづらいですが、上段左から右にかけて1~10人目 下段左~右にかけて11~20人目のデータを表示させ印刷させたいです。 次に1ページめが終わったら21~40を同様に印刷したいです。 現在、まったくコードなど出来ていません。

  • cider4
  • ベストアンサー率51% (640/1249)
回答No.2

Excelのバージョンが2007からラベル印刷ウィザードという機能が加わりましたが、 http://office.microsoft.com/ja-jp/excel-help/HP010077516.aspx

makisaori
質問者

お礼

ありがとうございます。 現在エクセル2000なので・・・

  • Cupper-2
  • ベストアンサー率29% (1342/4565)
回答No.1

番号を入力したセルを参照してVLOOKUP関数でデータを拾ってきたらいいと思う。 Sheet1 の A列に番号、B列に性別、C列に年齢などと入力してあり Sheet2 の A1セルに番号を入力するなら Sheet2 に  =VLOOKUP(A1,Sheet1!$A:$C,1,FALSE) で番号 … =A1 で良いような気がする。  =VLOOKUP(A1,Sheet1!$A:$C,2,FALSE) で性別  =VLOOKUP(A1,Sheet1!$A:$C,3,FALSE) で年齢 を表示できる。  ※ VLOOKUP関数で他のシートを参照するときは、絶対参照の形で参照しなければエラーになります。   データが入力される範囲に「データ範囲」などと名前を付けておくと良いでしょう。   =VLOOKUP(A1,データ範囲,2,FALSE) などと分かりやすく表記できます。   挿入 → 名前 → 定義   から行うか、範囲を指定した状態で左上の名前ボックス(A1セルを選択するとA1と   表示される場所)に名前を入力すると設定できます。

makisaori
質問者

補足

VLOOKUP関数のやり方は他のページなど検索してみましたが、20人のデータを一覧表にして印刷したあと、21~40をまた印刷用シートに読み込んで印刷をしたいのです。画像が見づらいと思いますが、画像が印刷用シートです。 データシートは別のワークシートにA列:番号、B列;年齢、C列::性別で受験者数分縦方向に入力していきたいと思います。 だいたい、200名くらいなので、印刷用ワークシートで1~20、21~40、41~60という具合にどんどん印刷していきたいのです。

関連するQ&A