- 締切済み
エクセルでマクロを使った連続印刷
お世話になります。教えてほしいことがあります。 私、小学校の教諭をしております。 成績表をつける時期になってきました。 私の学校では、A4用紙の表面に学習の様子、裏面には、行動の様子・出欠状況・委員会やクラブやクラスの係・総合的な学習や生活の時間の様子の記述を印刷します。2学期になれば、また、新しいA4用紙に同じことを印刷します。(毎学期、A4両面印刷したものを1枚、新しく作成して保護者に渡していくということです。) 個人の成績表とは別に、クラス全体としての成績一覧表を作らなければならないので、担任としては、成績一覧表を作ってしまえば、LOOKUP関数で、それが、個人の成績表に反映されていくというふうに作りました。(個人の用紙のある部分に出席番号を入れれば、氏名や各項目の◎、○、△、出席状況を表す数字などが自動的に入る) ところが、これですと、1枚印刷するごとに、出席番号を入力し直して、また印刷ボタンを押さないといけませんよね。 これを、マクロを使って、たとえば自分のクラスが28人なら、自動で1番から28番までを印刷するという設定をしたいのですが・・・。 言っている意味が分かっていただけるとありがたいのですが、どなたか、ご存知の方、よろしくお願いします。かなり切羽詰ってます。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- hotosys
- ベストアンサー率67% (97/143)
細かい状況がわからないのですが、こんなでしょうか? Sub sample() Dim i As Integer For i = 1 To 28 '1から28まで繰り返し Range("A1").Value = i '出席番号のセル(たとえばA1)に番号を代入 ActiveSheet.PrintOut 'シートを印刷(印刷ボタンを押す) Next End Sub 必ず全部を印刷するとは限らない場合は一覧に[印刷]という列を用意しておいて、それをチェックする方法もあると思います。 一番現実的な方法は、ワードもあると思うので、成績一覧表はエクセルで作って、個人の成績表はワードで作って、エクセルで作った成績一覧表を差し込み印刷で印刷する方法だと思います。
- imogasi
- ベストアンサー率27% (4737/17069)
Googleで「imogasi 請求書」で照会すると、過去の同様質問が多数出てきます。その中で http://okwave.jp/qa2798008.html の私の回答を見てください。 下記は頭のクリアなときに、じっくり読んでくださいよ。 (1)まず全生徒の成績データなどの表を作る 普通は形式は ーー 国語 数学 ・・体育・・全体評価・・ 山田 井上 木村 ・・ のような2次元表でしょう(エクセルになじみやすいから) ーー (2) 個人別は 氏名 山田 国語 45 ・・ 総評 今期良くがっばった(文章) のような、配置・フォント・サイズ、見出し、罫線など作者の自由な体裁になります。手作業で設定します。プログラムでも出来るが極力避けてやると言うこと。 ーー (1)から(2)へデータを参照すること(2重入力しないと言うこと)で、全員分を自動で印刷する。そのためには(2)の各項目の中身を順次摩り替えて、摩り替えた瞬間に印刷という段取りになる。 それを私の提案では、(2)の印刷範囲外に、番号を入れるセルを要れ、その番号は(1)の表の何行目かを指定する番号である。 ほっといても番号はかわらない。そこでVBAで (For Nextは下記iを順次変えて繰り返し実行させるVBAです) For i=1 最終生徒行 iの指定で(2)の中身を整える 印刷 Next i iの指定で(1)のデータ行を見て、その行の各列(項目)のデータを(2)に持ってくるテクニックはINDEX関数で出来る。VBAでも出来るが避けているのですよ。 ーー 簡単化したテストをやってみよう 例データ Sheet1A1:C3 --- 国語 数学 山田 45 56 井上 59 66 Sheet2 A1セルは番号を入れる場所(実際はプログラムが) レイアウトを B3セル氏名 X C5セル 数学 Y C7セル 国語 X Xの式は=INDEX(Sheet1!$A$1:$C$100,$A$1,1) Yの式は=INDEX(Sheet1!$A$1:$C$100,$A$1,2) Zの式は=INDEX(Sheet1!$A$1:$C$100,$A$1,3) 最後の引数がデータを(1)から持ってくる列を示す。 Shhet2の結果 3 氏名 X 井上 数学 Y 59 国語 X 66 ーー A1を2と3に変えてSheet2の内容が変わることを納得のこと。 ーー 後は Sub test01() d = Worksheets("Sheet1").Range("A65536").End(xlUp).Row 'Sheet1A列最終行数取得 For i = 2 To d 'Sheet2の第2行から第d行まで繰り返し Range("A1") = i 'Sheet2のG1セルに行数をセット Range("A2:E10").PrintOut '印刷範囲は実情に合わせ Next i End Sub を実行すると、全生徒分が印刷されるはず。 行指定のA1セルの位置はどこでも良い。 少し変えると、印刷しそこなったや、データが間違っていた 生徒の1枚だけ印刷も出来る。 14行目ならFor i = 14 To 14 に変えて実行すると良い。
- fujillin
- ベストアンサー率61% (1594/2576)
わからないマクロをいじるよりも、No1様の回答の方法の方が確実ですね。 それで、丁度、良いテーマができたのでご自分でマクロをじっくりと作成してみるとか… 例えば、 1)出席番号のセルに順番に、各出席番号を代入する。 2)表示されているシートを印刷する。 練習として、1)、2)のマクロを作成してみれば、後は組み合わせればいいだけなので簡単です。 (かなりの部分が自動記録でもで作成できると思います。) 途中で判らないことがあれば、その部分について具体的に質問なされば、良い回答が得られることでしょう。
- Sinogi
- ベストアンサー率27% (72/260)
>これを、マクロを使って、たとえば自分のクラスが28人なら、自動で1番から28番までを印刷するという設定をしたいのですが・・・。 で、何ができないのですか?丸投げですか? 教師ならもっと質問の仕方があるでしょう。
シートを1人に1枚ずつ、28枚作るという方法もあります。