- ベストアンサー
【Excel】印刷範囲の設定
Excel2003を使用しています。 全5ページの書式があり、そのときそのときで1ページで終わったり、3ページで終わったりするのですが、この印刷範囲を自動で設定することは可能でしょうか? もし可能であれば、それぞれのページの右上にページ数が数式で入力されているセルがあるので、これを利用できないかと考えています。 このセルは『頁1/1』、『頁1/2』というふうに表示されていますので、例えば1ページ目が『頁1/2』と表示されていたら、印刷範囲を2ページに、『頁1/5』と表示されていたら、印刷範囲を5ページに設定できないかなと思っています。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
何度もすみません。領域の指定がどうもうまくいかないようですね。 各ページの行数が決まっているということなので、行数から計算して印刷範囲と改ページの位置を設定するように作り直しました。 これでいかがでしょうか? 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
その他の回答 (4)
横からすみません。 ちょっと邪道な気もしますが、 名前の定義で、 Print_Area: =INDIRECT("$P$1:$AA$"&(RIGHT(【シート名】!$Z$3,1)*47+1)) とするのはダメでしょうか? 改ページプレビュー画面の挙動が少し変(遅れる)ですが、 印刷自体はうまくいくようです。 Excel2000,2003で動作確認。
お礼
deus_ex_machinaさん、こんばんは。 回答ありがとうございます。 教えていただいた名前の定義でもうまくいきました。 改ページプレビュー画面の挙動が少し変(遅れる)とのことでしたが、こちらで確認した限りでは、そのような感じはありませんでした。 名前の定義を使って、印刷範囲の設定をしたのは初めてでしたので、大変勉強になりました。 ありがとうございました!
- ham_kamo
- ベストアンサー率55% (659/1197)
No.2です。補足拝見しました。 P1から表がはじまっているのですね。 マクロではA1を含む表領域を指定していたので、うまくいかなかったのだと思います。 印刷する表の領域を確実に取得するために、 '表全体の領域を取得 Set R = ActiveSheet.Range("A1").CurrentRegion の箇所を、 '表全体の領域を取得 Set R = ActiveSheet.Range("Z3").CurrentRegion に変えてみてください。 お書きになっているように各ページの行数が決まっているのなら、もう少し簡単なマクロになると思いますが、とりあえず上記の変更で試していただけますか?
お礼
再度の回答ありがとうございます。 おっしゃるとおりに 表全体の領域を取得 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)
マクロを組んでみました。 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からこのマクロを実行すれば、そのシートの印刷範囲を設定します。 ご希望の動作と異なるようでしたら補足願います。
補足
回答ありがとうございます。 記載していただいたコードをコピペして実行したところ、『総ページ数が取得できません』とダイアログが出てきましたので、少しいじってみたのですが、うまくいかず。。。 何点が補足させていただきますので、それでうまくいくようでしたら、再度教えていただけると嬉しいです。 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)
自動設定に関してはわかりませんが、 ファイル(F)→印刷プレビューと選択し プレビュー画面で上部にある【改ページプレビュー】を選択すると シート上に青い線でページごとの範囲が表示されるので、その線をドラッグすれば任意の範囲を指定して印刷する事ができます。 あとは、印刷倍率を調整すれば大丈夫だと思います。
お礼
回答ありがとうございます。 説明不足だったようで、申し訳ありません。。。 この改ページを自動で設定したいのです。現在は3ページで終わったら、その範囲までドラッグして設定しています。 複数のシートを作業グループで一気に印刷したいのですが、印刷範囲が全てのシートで同じとは限りませんので、この書式への入力が終了したら、自動で設定されればと思い、質問させていただきました。
お礼
ham_kamo さん、こんばんは。 何度も恐れ入ります。。。 新しく作り直していただいたコードでうまくいきました! 最後まで親切に教えていただき、ありがとうございました。