- ベストアンサー
水泳大会の出場者個票の作成方法
- 水泳大会の出場者個票をエクセルで作成する方法について教えてください。
- A4用紙に3コース分の出場者個票を印刷し、2枚使用して6コース分を記入します。
- レース番号をA4用紙2枚ごとに1ずつ加算させる方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
印刷の制御は どうしてもVBAに頼ることになりますが、 VBAで良かったら、No.1さんの回答とほぼ同じですが、VBAに慣れて おられないようですので、ほぼ実用に近いものを提案させて頂きました。 票のイメージとしては、図の左側のようなイメージなんでしょうか? 図の右側は、レース番号を入力するイメージをVBAのコードの中のセルに 合わせて、例示してみました、ボタンは、このマクロを登録して、起動させる ためのボタンがあったがいいかなと思って例示してます。 先の補足にVLOOKUP等の処理がされてるとのことですが、その参照のキーに なるのは、レース番号でしょうか? それ以外の キーになるものがあれば、VBAの中で処理を記述する必要があると 思います。VLOOKUPとVBAの処理とのタイミングも、心配ですが、ま、うまく 行くとおもいます^^ 下記のVBAのコードは、この票があるシートのシートタブを右クリックして、 「コードの表示(V)」を選択して、出てきた大きな枠のOption Explicitの下に 貼りつけて、実際に応じたシート名、セル番号などを修正すれば、 そのまま、動作するはずです。 起動ボタンは、オートシェイプで作るか、メニューバーの「表示」→「ツールバー」 →「フォーム」の「ボタン」で作ってもいいでしょう、Webサイトからカッコイイのを 貰って来てもいいでしょう、それを右クリックして「マクロの登録」から、この マクロ「個票印刷」を選択してください。 VBAコード中の「'」以降はコメントで、動作に関係しません、不要なら消してください。 Sub 個票印刷() Dim N As Integer, N1 As Integer, N2 As Integer On Error GoTo 不正 'エラー(N1,N2に数字以外とか)の時「不正:」へ飛ぶ With Worksheets("Sheet1") '実際のシート名を N1 = .Range("X2").Value 'レース番号の開始値 N2 = .Range("Z2").Value 'レース番号の終了値 On Error GoTo 0 If N1 = 0 Or N2 = 0 Or N1 > N2 Then GoTo 不正 'どちらか0かN1が大きかったら印刷しない。 For N = N1 To N2 .Range("D5, D26, D55, AM5, AM26, AM55").Value = N '実際のレース番号のセルを ' ・ ' ・ ' ・ '------ 上記以外の 氏名や 種目 その他を記入する処理 ----- ' ・ ' ・ .PrintOut Next End With Exit Sub 不正: MsgBox "入力された数値が不正です。", vbExclamation End Sub
その他の回答 (3)
- hallo-2007
- ベストアンサー率41% (888/2115)
印刷してE5セルの値をひとつ増やすだけなら Sub 印刷() Sheets("印刷するシート").PrintOut '←ここを印刷したいシートを指定する。 Sheets("印刷するシート").Range("E5").Value=Sheets(”印刷するシート").Range("E5").Value+1 End Sub となります。 でもせっかくであれば 別シートに レース番号 競技名 1レーン 2レーン 3レーン・・・ 1 個人メドレー A選手 B選手 C選手 ・・・ ・・・・ と準備しておいて E5セルに レース番号を入れると 選手名など必要内容が表示されるように Vlookup関数を張り巡らせておけばもっと作業が楽になり、管理が出来ると思います。
お礼
ご丁寧な説明、感謝しております。 早速VBAの基礎を勉強したうえでご教示いただいた方法を 実行してみたいと思います。 この度はたいへんお世話になり、本当にありがとうございました。
- hallo-2007
- ベストアンサー率41% (888/2115)
No1です。 Sheets("印刷するシート").Range("E5").Value=Sheets(”印刷するシート").Range("E5").Value+1 の部分ですが Sheets("印刷するシート").Range("E5").Value=n にしたほうが使いやすいかもしれません。 実験で何度も無駄な印刷するので、最初は Sheets("印刷するシート").PrintOut '←ここを印刷したいシートを指定する。 の部分を Sheets("印刷するシート").PrintPreview '←ここを印刷したいシートを指定する。 としてプレビュー画面で確認しながらコードを作成してみると良いでしょう ご希望にあうようになったら PrintOut に変更してください。
お礼
早速ご回答いただきありがとうございました。 ところで、個票を作成する手順として下記の1~3を繰り返します。 1、個票ごとに出場者氏名を入力(VLOOKUP関数を使用)&組数を入力(都度手入力) ↓ 2、1レース(6コース・A4用紙2枚)分入力後に印刷 ↓ 3、数レース~十数レースごとに種目名を変更する 100レース分の個票を一括して印刷するわけではないのですが ご教示いただいた方法は入力と印刷を交互に繰り返す上記の手順でも 利用可能なのでしょうか? 当初の説明が不足しておりまして、申しわけありません。
- hallo-2007
- ベストアンサー率41% (888/2115)
印刷を行って E5セルの値を 1つ加算する と云ったことですよね VBAの力を借りることになります。 ちなみに少し前の質問 通知表連続印刷の方法 に良い事例がありました。 http://okwave.jp/qa/q6208722.html Sub 通知表印刷() Dim n As Integer Dim a As Integer Dim b As Integer a = Range("f2").Value b = Range("H2").Value For n = a To b Sheets("印刷するシート").PrintOut '←ここを印刷したいシートを指定する。 Sheets("印刷するシート").Range("E5").Value=Sheets(”印刷するシート").Range("E5").Value+1 '↑ここで印刷するシートのE5セルの値を 1つ加算する。 Next n End Sub こんな具合でvbaを考えると 1レースから100レースまで一気に印刷していく 1枚印刷されるたびに レース番号は 1つづつ加算された印刷になるはずです。
お礼
画像まで添付していただき、ありがとうございました! 仔細な部分まで分り易く説明されていて大変参考になりました。 ご教示いただいた方法をこれから試してみたいと思っています。 この度は、本当にありがとうございました。