プロが教える店舗&オフィスのセキュリティ対策術

添付画像の表を印刷する際に、
【1ページ目】
1~3行がタイトル
4~49行がデータ

【2ページ目以降】
3行目だけがタイトル
50~95行がデータ

【最終ページ】
3行目だけがタイトル
データ行は月ごとに変わります。

上記にて印刷をしたいです。


これを設定するマクロコードを教えていただきたいのですが。
情報がたりなければご指摘ください。
よろしくお願いします。

「マクロ 印刷タイトルを2ページ目以降変え」の質問画像

A 回答 (2件)

>4~49行がデータ


>50~95行がデータ
この行数、つまり45行入るかどうかは、このマクロは考慮されておりません。最初、プレビューから、マージンなどで、調整して納まるようにしてください。

また、一応、垂直改行は考慮はしていますが、1ページに収まらない右にはみ出た分に関しては、処理できません。
もし、とのようなスタイルでも、希望の行数にするなら、手動改ページを入れるなど、別のマクロが必要です。

'//
Sub PrintOutMacro()
 Dim i As Long
 Dim sPrintArea As String
 Dim HPage As Long
 Dim VPage As Long
 Dim PageTotal As Long
 Dim FirstPage As Integer
 Dim LastRow As Long
 Dim RightCol As Long
 With ActiveSheet
  '-------------------------------
  '印刷範囲再設定
  LastRow = Cells(Rows.Count, 1).End(xlUp).Row
  RightCol = Cells(4, Columns.Count).End(xlToLeft).Column
  sPrintArea = Range("A4", .Cells(LastRow, RightCol)).Address
  .PageSetup.PrintArea = sPrintArea
  '-------------------------------
  FirstPage = 1 '最初のページ
  On Error Resume Next
  'ページ数の算出
  HPage = ExecuteExcel4Macro("COLUMNS(GET.DOCUMENT(64))") - 1
  VPage = ExecuteExcel4Macro("COLUMNS(GET.DOCUMENT(65))")
  On Error GoTo 0
  PageTotal = Int(HPage * VPage) 'ページ総数
  '誤動作のための保守
  If PageTotal <= 2 Then
  If MsgBox("ページが、" & PageTotal & "枚しかありませんがよろしいですか?", _
   vbQuestion + vbOKCancel) = vbCancel Then Exit Sub
  End If
  For i = FirstPage To PageTotal
   If i = 1 Then
    .PageSetup.PrintTitleRows = "$1:$3"
   Else
    .PageSetup.PrintTitleRows = "$3:$3"
   End If
   .PrintOut From:=i, To:=i ', Preview:=True ''外すとプレビューになる
  Next i
 End With
End Sub
'///
    • good
    • 0
この回答へのお礼

WindFallerさん
回答ありがとうございました。
プレビューで確認できました。

素人なのでWeb上で検索しながらコピーしてコードを作っているのですが
たびたび壁に当たります(^^;
これでまたゴールに近づくことができました。

また質問するかと思いますのでよろしければご教授お願いします。
ありがとうございました。

お礼日時:2015/07/08 00:51

Worksheet.PrintOut メソッドは、その引数により、印刷するページを指定できます。



つまり 1 ページ目だけ印刷し、1 ~ 2 行目の値を Range.ClearContents で消し、改めて 2 ページ目以降を指定して印刷すればいいですね。その後さらに、消した文字列を同じ範囲に記入しておけばいいですね。

あるいは、あらかじめ 1 ~ 2 行目に記入しておいた IF 関数によりタイトルを表示させ、IF が参照しているスイッチとなるセルの値を書き換えると、タイトルが非表示になるようにしておいてもいいです。上と同様に、印刷するページごとにスイッチの値を上書きしていけばいいですね。

各メソッドなどについては、VBE 画面のヘルプを確認してください。
    • good
    • 0
この回答へのお礼

MarcoRossiItalyさん
回答ありがとうございました。

説明不足ですみません。
上司がエクセル上で確認するケースもあるので、印刷プレビューの時点で
1ページ目と2ページ目以降の表示を変えたかったのです。

ページ設定でタイトル行を3行目にすると表示されるのですが、50行目に
小計行があり、ページを追うごとにずれてしまい、うまく表示できませんでした。

IF関数の入れ方などもっと調べてみます。
ありがとうございました。

お礼日時:2015/07/08 00:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています