|
すでにご指摘いただきました。
蛇足で説明を加えると、、
lastRow - 4 でデータの数を示しますから、
50未満の端数データが一行あっただけでも、一ページにカウントするよう、
49を加えたうえで、50による商をとったものです。
maxPage = WorksheetFunction.Ceiling((lastRow - 4), 50) / 50
つまり、「50データ区切りで切り上げ」てから 50で割る、
としたほうが、意図が伝わり易かったかもしれない。
ついでながら、
第三案 を 仮に書くとすれば、こんな感じになるのではないですか?一例です。
Sub 印刷3()
Dim lastRow As Long
Dim maxPage As Long
Dim lastHeaderRow As Long
Dim page As Long
Dim k As Long
lastRow = Range("A65536").End(xlUp).Row
maxPage = WorksheetFunction.Ceiling((lastRow - 4), 50) / 50
lastHeaderRow = (maxPage - 1) * 50 + 5
ActiveSheet.ResetAllPageBreaks '改ページをいったんクリア
'最終ページから2ページまでを処理(挿入は下から上に)
page = maxPage
For k = lastHeaderRow To 55 Step -50
Rows("3:4").Copy
Rows(k).Resize(2).Insert Shift:=xlDown
Cells(k, 4).Value = page
page = page - 1
ActiveSheet.HPageBreaks.Add before:=Cells(k, 1)
Next
Application.CutCopyMode = False
Cells(3, 4).Value = 1 ' 1ページ目のページ
' 印刷範囲設定と印刷(プレビュー)
lastRow = Range("A65536").End(xlUp).Row
ActiveSheet.PageSetup.PrintArea _
= Range(Cells(3, 1), Cells(lastRow, 8)).Address
ActiveSheet.PrintPreview
''' ActiveSheet.PrintOut
End Sub
|
|