| 
    
     |  | すでにご指摘いただきました。 
 蛇足で説明を加えると、、
 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
 
 |  |