• ベストアンサー

【Excel VBA】印刷について

Excel2003を使用しています。 あるシートを印刷するときに、その中で数ページだけ印刷が不要のページがあります。 例えば、20ページまで印刷するなかで、4,7,18ページが不要という場合、その不要ページを指定すれば、それ以外のページを印刷するというふうに、マクロで印刷範囲を指定することは可能でしょうか? (印刷不要のページは都度変わります) 手元にある参考書で、ページ数を指定する方法はわかるのですが、不要なページを印刷しないようにすることができればと思い、質問させていただきました。 よろしくお願いします。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

不要ページだけを印刷しないで、その他のページだけを印刷するには ・1ページ~最終ページを1ページずつ印刷する ・ただし不要ページは印刷をスキップする しかないと思います。 そのためには、まず最初にページ総数を求める必要がありますが、それは下記URLに掲載されています http://support.microsoft.com/kb/402754/ja 実際には不要ページをどこから取得するのか分かりませんが、2ページと5ページを除いて印刷するサンプルは以下のようになります。 (ただし今プリンタが使えないのでテストできていません。悪しからずです。) Sub Macro1() Dim idx, idxP, LastP As Integer Dim ExcptP() As String Dim psw As Boolean ExcptP = Split("2,4", ",") LastP = Application.ExecuteExcel4Macro("get.document(50)") For idx = 1 To LastP   For idxP = 0 To UBound(ExcptP)     If idx = Val(ExcptP(idxP)) Then       psw = True       Exit For     End If   Next idxP   If psw Then     psw = False   Else     ActiveWindow.SelectedSheets.PrintOut From:=idx, To:=idx, _         Copies:=1, Collate:=True   End If Next idx End Sub

rx-z5815
質問者

お礼

回答ありがとうございます。 >実際には不要ページをどこから取得するのか分かりませんが、2ページと5ページを除いて印刷するサンプルは以下のようになります。 教えていただいたサンプルで、実際に試してみたところ、うまくいきました。 不要ページは、都度変わりますので、あるセルに入力して不要ページを取得し、それ以外を印刷するようにしました。 今回の場合は、予めページ総数が決まっているので、不要ページ同様、セルに入力する方法でページ総数を取得するようにしましたが、ページ総数を求める方法(URL)は、大変参考になりました。 ありがとうございました。

その他の回答 (2)

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

印刷操作のマクロの記録を行います。 そのとき、 ページ指定 ○○ページから       xxページまでがあります ここに指定しますと、 Sub Macro1() Dim p(6) p(1) = 1: p(2) = 2: p(3) = 5: p(4) = 7 For i = 1 To 4 Step 2 ActiveWindow.SelectedSheets.PrintOut From:=p(i), To:=p(i + 1), Copies:=1 Next i End Sub のように、 From:=○○, To:=xxが現れます。 これを応用して上記のように、繰り回しすれば 上記では1-2ページと5-7ページのように印刷できました。 簡単な例で改ページを挿入しテストしました。 ーー 本質問の場合、 1-3 5-6 8-20 と配列を6要素定義すればよい。 1ページだけなら、1-1にすれば良い。 これでできないかやってみてください。 ===== 注意 自動で印刷の改ページを行わせ、ある内容が何ページに来るかわからなくて、印刷をスキップするページ数(何番目)がわからない、という問題はある場合があると思うが、本件は、それとは別の線からの回答です。 回答は、単純に、上記コードで、指定してないページ(第何番目)を、印刷をスキップできたということです。

rx-z5815
質問者

お礼

回答ありがとうございます。 >印刷操作のマクロの記録を行います。 マクロの記録をとってみればよかったのですね。 以前はよくマクロの記録をとって、どういうコードになるのか診ていたのですが、最近は参考書に頼ってしまい、マクロの記録を忘れがちです。 質問文にも書いていますが、今回の場合、印刷不要のページは、都度変わりますので、不要ページをセルに入力して取得し、教えていただいた方法でも試してみたいと思います。 ありがとうございました。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

例えばの一案。 Sub test() Dim i As Integer For i = 1 To 20 Select Case i Case 4, 7, 18 Case Else ActiveSheet.PrintOut Preview:=True, From:=i, To:=i End Select Next End Sub まずはプレビュー画面で確認してもらい、 印刷時は Preview:=True は削除願います。

rx-z5815
質問者

お礼

回答ありがとうございます。 Select Case を使う方法、大変参考になりました。 実際、書いていただいたコードでも試してみましたが、うまくいきました。 質問では例えばということで、4,7,18ページ以外を印刷するようにしましたが、この不要ページは、質問文にも書いていますように都度変わりますので、あるセルに不要ページを入力して、それ以外を印刷するようにしようと思っていたのですが、そうすると、『型が一致しません』というメッセージが出てしまいます。 Case 4, 7, 18 ⇒ Case Range("P6") としたところ、不要ページが1ページのみのときは問題ないようですが、複数あってコンマで区切ってP6セルに入力した場合にエラーが出るようです。(上記のような書き方自体が間違っているのでしょうか?) 不要ページが1ページのみということは、ほぼありませんので、どのようにすれば、複数設定できるでしょうか?

関連するQ&A

専門家に質問してみよう