• ベストアンサー

【Excel】印刷範囲の設定

Excel2003を使用しています。 全5ページの書式があり、そのときそのときで1ページで終わったり、3ページで終わったりするのですが、この印刷範囲を自動で設定することは可能でしょうか? もし可能であれば、それぞれのページの右上にページ数が数式で入力されているセルがあるので、これを利用できないかと考えています。 このセルは『頁1/1』、『頁1/2』というふうに表示されていますので、例えば1ページ目が『頁1/2』と表示されていたら、印刷範囲を2ページに、『頁1/5』と表示されていたら、印刷範囲を5ページに設定できないかなと思っています。 よろしくお願いします。

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

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.4

何度もすみません。領域の指定がどうもうまくいかないようですね。 各ページの行数が決まっているということなので、行数から計算して印刷範囲と改ページの位置を設定するように作り直しました。 これでいかがでしょうか? Sub 改ページ設定()   Dim TotalPage As Integer   Dim CurrentPage As Integer   With ActiveSheet     '総ページ数を取得     TotalPage = CInt(Right(.Range("Z3").Text, 1))     If TotalPage < 1 Or TotalPage > 5 Then       MsgBox ("総ページ数が取得できません")       Exit Sub     End If          '最初に全ての改ページを削除     .ResetAllPageBreaks          '印刷エリアを設定     .PageSetup.PrintArea = .Range("P1:AA236").Resize(TotalPage * 47 + 1).Address          '改ページを設定     For CurrentPage = 2 To TotalPage       .HPageBreaks.Add Before:=.Range("P" & ((CurrentPage - 1) * 47 + 2))     Next   End With End Sub

rx-z5815
質問者

お礼

ham_kamo さん、こんばんは。 何度も恐れ入ります。。。 新しく作り直していただいたコードでうまくいきました! 最後まで親切に教えていただき、ありがとうございました。

その他の回答 (4)

noname#52504
noname#52504
回答No.5

横からすみません。 ちょっと邪道な気もしますが、 名前の定義で、 Print_Area: =INDIRECT("$P$1:$AA$"&(RIGHT(【シート名】!$Z$3,1)*47+1)) とするのはダメでしょうか? 改ページプレビュー画面の挙動が少し変(遅れる)ですが、 印刷自体はうまくいくようです。 Excel2000,2003で動作確認。

rx-z5815
質問者

お礼

deus_ex_machinaさん、こんばんは。 回答ありがとうございます。 教えていただいた名前の定義でもうまくいきました。 改ページプレビュー画面の挙動が少し変(遅れる)とのことでしたが、こちらで確認した限りでは、そのような感じはありませんでした。 名前の定義を使って、印刷範囲の設定をしたのは初めてでしたので、大変勉強になりました。 ありがとうございました!

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

No.2です。補足拝見しました。 P1から表がはじまっているのですね。 マクロではA1を含む表領域を指定していたので、うまくいかなかったのだと思います。 印刷する表の領域を確実に取得するために、 '表全体の領域を取得 Set R = ActiveSheet.Range("A1").CurrentRegion の箇所を、 '表全体の領域を取得 Set R = ActiveSheet.Range("Z3").CurrentRegion に変えてみてください。 お書きになっているように各ページの行数が決まっているのなら、もう少し簡単なマクロになると思いますが、とりあえず上記の変更で試していただけますか?

rx-z5815
質問者

お礼

再度の回答ありがとうございます。 おっしゃるとおりに 表全体の領域を取得 Set R = ActiveSheet.Range("A1").CurrentRegion の箇所を、 '表全体の領域を取得 Set R = ActiveSheet.Range("Z3").CurrentRegion に変えてみたところ、ダイアログは表示されることなく、マクロが実行されましたが、改ページの設定がうまくいきませんでした。 Z3セルが『頁1/2』の状態でマクロを実行したのですが、S2:Z3が印刷範囲に設定されました。この場合、2ページまでなので、P1:AA95が印刷範囲に設定されるようにしたいのですが。。。 何度も申し訳ありません(^_^;)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

マクロを組んでみました。 Alt+F11でVBAの画面を立ち上げ、「挿入」>「標準モジュール」を選択して、右側の画面に下のマクロを貼り付けてください。 Sub 改ページ設定()   Dim PageCell As Range   Dim PrevPageCell As Range   Dim R As Range   Dim TotalPage As Integer   Dim CurrentPage As Integer      '最初に全ての改ページを削除   ActiveSheet.ResetAllPageBreaks      '表全体の領域を取得   Set R = ActiveSheet.Range("A1").CurrentRegion      '最初の「頁」セルを検索し、総ページ数を取得   Set PageCell = R.Find("頁")   If PageCell Is Nothing Then     MsgBox ("総ページ数が取得できません")     Exit Sub   End If   TotalPage = CInt(Right(PageCell.Text, 1))      '改ページを設定   Set PrevPageCell = PageCell   For CurrentPage = 2 To TotalPage     Set PageCell = R.FindNext(PrevPageCell)     If PageCell Is Nothing Then       Exit Sub     End If     ActiveSheet.HPageBreaks.Add Before:=PageCell     Set PrevPageCell = PageCell   Next      '印刷エリアを設定   If TotalPage < 5 Then     Set PageCell = R.FindNext(PrevPageCell)     ActiveSheet.PageSetup.PrintArea = R.Resize(PageCell.Row - 1).Address   Else     ActiveSheet.PageSetup.PrintArea = R.Address   End If End Sub 各シートの入力が終わったら、Alt+F8からこのマクロを実行すれば、そのシートの印刷範囲を設定します。 ご希望の動作と異なるようでしたら補足願います。

rx-z5815
質問者

補足

回答ありがとうございます。 記載していただいたコードをコピペして実行したところ、『総ページ数が取得できません』とダイアログが出てきましたので、少しいじってみたのですが、うまくいかず。。。 何点が補足させていただきますので、それでうまくいくようでしたら、再度教えていただけると嬉しいです。  1. 『頁1/1』(最初の頁セル)はZ3セルで、数式は    [=IF(C21=0,"頁1/1",IF(C26=0,"頁1/2",IF(C31=0,"頁1/3",IF(C36=0,"頁1/4","頁1/5"))))]    と入力されています。  2. 表の全体の領域は、P1:AA236です。  3. 1ページ目  48行目まで    2ページ目  95行目まで    3ページ目 142行目まで    4ページ目 189行目まで    5ページ目 236行目まで となっています。よろしくお願いします<(_ _)>

  • plqa771
  • ベストアンサー率27% (3/11)
回答No.1

自動設定に関してはわかりませんが、 ファイル(F)→印刷プレビューと選択し プレビュー画面で上部にある【改ページプレビュー】を選択すると シート上に青い線でページごとの範囲が表示されるので、その線をドラッグすれば任意の範囲を指定して印刷する事ができます。 あとは、印刷倍率を調整すれば大丈夫だと思います。

rx-z5815
質問者

お礼

回答ありがとうございます。 説明不足だったようで、申し訳ありません。。。 この改ページを自動で設定したいのです。現在は3ページで終わったら、その範囲までドラッグして設定しています。 複数のシートを作業グループで一気に印刷したいのですが、印刷範囲が全てのシートで同じとは限りませんので、この書式への入力が終了したら、自動で設定されればと思い、質問させていただきました。

関連するQ&A