• 締切済み

エクセル 指定したページのみ印刷プレビュー

Sub PrintPreview() Dim i As Byte Dim r As Range For Each r In Selection i = r.Value ActiveWindow.SelectedSheets.PrintPreview From:=i, To:=i Next End Sub 標題の通りシート内に31ページ分印刷範囲のデータがあります とびとび印刷したいのですが よくできませんでした。 どこなの列に印刷したいページ番号を入力し、そこを範囲で囲み指定した番号のページのみ印刷をかけたいです。 よろしくお願いします。 例  C1からC5まで 2 5 10 14 25 の印刷ページ番号を入力し C1~C5を範囲で囲みマクロ実施後 プレビューに移行したい。

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

エクセルには基本的に、「印刷範囲の中からとびとびのページをつまんで印刷する」という機能はありません。 >そこを範囲で囲み指定した番号のページのみ印刷をかけたいです。 プレビューはオマケでマクロの目的はあくまでも「印刷する事」であれば、素直にその通り印刷します。 sub macro1()  dim h as range  on error resume next  for each h in selection  activesheet.printout from:=h.value, to:=h.value  next end sub このマクロでも、一回の印刷はあくまで対象ページ一塊ずつです。 #補足 回答はご相談の状況説明 >シート内に31ページ分印刷範囲のデータ に依っている。 #さらに補足 基本的に「とびとびの範囲を(連続)印刷プレビューする」ためには、「印刷範囲の設定」によって事前に印刷したい範囲を特定し、指定しておくことで実現します。(ただしその場合、各印刷ページのページ番号は「連番」となり、オリジナルの(飛び飛びの)ページ番号ではなくなります) しかしながらエクセルには「実際にどのセル範囲が1ページになり、どこからどこまでが2ページになる」のか、実際に印刷してみるまでエクセル自身にも判らないという構造的な欠陥があるため、事前に「どこページのセル範囲を印刷対象にする」みたいなマクロを書く事もできません。 以上の前提を踏まえて、実際にできることとしては 1.改ページなどを適正に配置し、成り行きの印刷はさせない 2.たとえばA1:I10が1ページ、A11:I20が2ページ…のように、どのセル範囲が何ページになるのかの対応を事前に特定しておく といった整備を行ったうえで sub macro2()  dim s as string  dim h as range  for each h in selection   if isnumeric(h.value) then    s = s & ",A" & h.value * 10 - 9 & ":I" & h.value * 10   end if  next  if s = "" then exit sub  s = mid(s, 2)  activesheet.pagesetup.printarea = s  activesheet.printpreview end sub といった具合に細工してみるような事はできます。

関連するQ&A