• ベストアンサー

エクセルの最終ページだけを自動印刷

エクセルの最終ページだけを自動印刷するには、どうしたらいいのでしょうか?マクロVBAを使い、エクセルシートが、何ページにわたって印刷されるのか判定し、その最終ページだけを印刷したいのです。 目的は、エクセルの表の最終行に新しいレコードを追加して行ってるのですが。手作業ですといちいちプレビューして何ページにまたがってるか確認して、そのページ番号を指定せねばなりません。その最終ページだけ印刷したいことがよくあるので、マクロで自動化したいのです。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

Sub test02() d = Worksheets("Sheet1").Range("a65536").End(xlUp).Row MsgBox d 'MsgBox Worksheets("Sheet1").HPageBreaks.Count n = Worksheets("Sheet1").HPageBreaks.Count f = Worksheets("Sheet1").HPageBreaks(n).Location.Row Worksheets("Sheet1").Range("A" & f & ":G" & d).PrintOut End Sub でどうですか。 --- HPageBreakだけを問題にしてます。 また最右列はH列と仮定してます。 c=Worksheets("Sheet1").Range("IV1").End(xloLeft).Row で求められるかも

yuusukeccc
質問者

お礼

ありがとうございました。すばらしいアイディアありがとうございます。 組み込んで使わせて頂きました。 表示画面と印刷画面で、シートの選択、不要な列の非表示やフォントの設定など、いろんなことを同時にVBAで行なっていますので、アドヴァイスいただいたものを組み込むのにずいぶん日数がかかってしまいました。 私は、VBAそれほど詳しくないので、3人の方のを組み込んでとにかく使ってみました。 とてもすばらしいと思います。ただ、残念だったのが、最終ページでなくセル範囲の印刷になっていますので、ヘッダー部分のページ数が、常に1/1になってしまいました。 簡単な修正で直るのでしょうが、今の私には、まだ、そのやり方がわからない状態です。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 ちょっと難しいですね。 データの広さとか決められてはいないので、列数を決めないと、これはできません。 データの行は、A列で決めています。しかし、列数は、任意のことが多いので、手動で、 Const RETU As Integer = 10 の10 の部分を任意で入れてください。 使用しているデータの大きさということで、UsedRange などを使うと、あらぬ場所にまで行ってしまいます。 なお、Ver4 マクロ関数を使う理由は、VBA方式ですと、実際に、使っていると、画面の変更の際に、すべてがリセットさせられることがあるからです。 Sub Test() Dim i As Long 'A列を起点としています。その後の列数を決めてください。 Const RETU As Integer = 10 With ActiveSheet  If .UsedRange.Cells.Count < 2 Then    MsgBox "シートが空か、ひとつのデータしかありません。", 64    Exit Sub  End If  .PageSetup.PrintArea = .Range("A1", .Range("A65536").End(xlUp)).Resize(, RETU).Address   i = ExecuteExcel4Macro("GET.DOCUMENT(50)")   .PrintOut From:=i, To:=i, Preview:=True   '.PrintOut From:=i - 1, To:=i, Preview:=True '最後のひとつ前のページを含める End With End Sub

yuusukeccc
質問者

お礼

ありがとうございます。 列数は、固定なのであまり気にならず、使えています。 VBAでなくエクセル4のマクロというのが、あまり詳しくないのでよくわかりませんが、3人の方のを試してみて、今のところWendy02さんのを使わせていただいております。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

印刷ページ数はVBAの機能では取得できない情報なので、旧マクロ(Excel 4 マクロ)の機能を利用します。 Msgbox Application.ExecuteExcel4Macro("get.document(50)") http://support.microsoft.com/kb/402754/ja

yuusukeccc
質問者

お礼

ありがとうございました。

関連するQ&A