繰り返し処理で全員の個票を印刷するには?

Question 23.1 Previous Next
質問内容は繰り返し処理です。
今までエクセル97で成績を入力し、関数を用いて平均・合計・順位を出力し、別の場所でVLOOKで個人データを抜き出し、それをグラフ化して個票を印刷してました。
一人ずつ番号を入力し、印刷をすることを繰り返していましたが、それをマクロで繰り返しデータを抜き出し、印刷をすることを繰り返す方法を教えていただけないでしょうか。よろしくお願いいたします。
Answer   Copyright (C) 1999.11.23 永井善王
繰り返し処理のマクロには、いろいろな書き方がありますが、大きく分けると、For~Nextと、Do~Loopとになります。

あなたは、すでに、「一人ずつ番号を入力し、印刷をすることを繰り返している」とのことですから、繰り返しのマクロの書き方だけを回答すれば良いのかも知れませんが、より分かりやすくするために一連の流れで説明します。よって、すでに熟知してみえる事項は、流し読みしてください。

【成績シート】
成績シート あなたが作った「成績を入力するシート」を想像しながら、その骨格を左図のとおり作ってみました。

合計を求める数式は、C8セルだけを図示しましたが、D8~F8セルにも複写してあります。
C9セルの平均を求める数式、G3セルの順位を求める数式も同様で、それぞれ、D9~F9セルまたは、H3~J3とG4~J7セルに複写してあります。

このシートは、着色してないA3~F7セルに値を入力するだけで、自動的に平均と順位が計算されます。

【個票シート】
個票シート 同様にして、「別の場所でVLOOKで個人データを抜き出すシート」を、左図のとおり作ってみました。

このシートは、A2セルに入力された番号に対応する氏名、得点、順位を、VLOOKUP関数で成績シートから検索して表示します。なお、平均点は単純に、成績シートの値を写して表示します。
C5~E7セルには上記と同様に、数式を複写してあります。

そして、セル範囲A4:E7はグラフ表示可能な様式ですから、グラフウィザードを使って簡単にグラフを描けます。

本題に入りましょう。繰り返し処理のマクロは、おおむね下記のようで良いと思います。

1) 成績シートのA3セルに入っている番号をコピーして、個票シートのA2セルに貼り付ける
2) 個票シートのセル範囲A4:E7を、グラフ化する
3) 印刷する
4) 1)で指定する成績シートのセルを次の番号のセルにして、最下行(A7)になるまで、1)~3)を繰り返す

マクロの中心部分は下記のとうりで、For~Nextを使って繰り返しています。
グラフを描いたり、印刷したりするプロシージャを別に作ることにしたので、非常にシンプルです。
'-------------------------------------------------------------------------------
1   For 行 = 3 To 下端                          '(成績シートの)3行目から下端行まで
2       Range("A2").Value = Worksheets("成績").Cells(行, 1) '成績シートの番号を写す
3       グラフを描く                            'サブプロシージャを実行する
4       グラフを印刷する                        '     〃
5   Next                                        '繰り返す
'-------------------------------------------------------------------------------
上記マクロの1行目の変数「下端」には、事前に、成績シートのA列(番号)の、最下行の行番号をセットしておきます。変数「行」はカウンターで、最初は 3にセットされてから 2行目のマクロに移ります。
2行目のマクロは、成績シートのA列の変数「行」のセルの値を、個票シートのA2セルにセットします。
3、4行目のマクロを実行し終ると、5行目の Next文が実行されて 1行目に戻ります。
繰り返しに入るとカウンターの値は 1ずつ足されます。そして、カウンターの値が変数「下端」以下ならば 2行目のコードが実行されます。逆に変数「下端」を超えていれば、繰り返しが終って 5行目の次の行のマクロが実行されます。

サンプルブックのダウンロードは ここをクリック  (YNxv9c3_fornext.xls 52KB)
※ 一旦、ブックをハードディスクに保存し、後で改めて開いてから実行してください。

また、関連事項の VLOOKUPについてもっと知りたければ、FAQの
セルに入力したブック名でそのブックを開くには?と、Macroの受信データ自動編集 が参考になるかも知れません。

Excel VBA Macro