• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルのマクロの記述について)

エクセルのマクロでシートの非表示と特定のシートのみ印刷する方法について

このQ&Aのポイント
  • エクセルのマクロによるシートの非表示や特定のシートのみ印刷する方法について詳しく教えてください。
  • 指定したシートを非表示にするには、WorksheetsオブジェクトのVisibleプロパティをFalseに設定します。
  • また、特定のシートのみ印刷するには、ActiveWindowオブジェクトのSelectedSheetsプロパティを使用して、印刷したいシートを選択し、PrintOutメソッドを実行します。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.5

Sheet1は印刷する必要があると思って回答していました。 補足を見ると、Sheet1の表示、非表示にかかわらずSheet1は印刷の必要はないようなので簡単にしました。 補足がSheet2だけのことなのか分かりませんので Select Case の中で印刷範囲の設定、印刷、印刷範囲の解除をしています。 Sub 印刷test()   Dim ws As Worksheet 'ワークシート   For Each ws In Worksheets '全てのシートを調べる     With ws       Select Case .Name         Case "Sheet2"           .PageSetup.PrintArea = "A1:AB42"           .PrintPreview           .PageSetup.PrintArea = ""         Case "Sheet3"           .PrintPreview         Case "Sheet4"           .PrintPreview       End Select     End With   Next End Sub 蛇足ですが・・・・・・ Sheet2、Sheet3、Sheet4のみを印刷したいなら直接的に書いたほうが分かりやすいかもしれません。(下記) また、PrintAreaの指定が固定であれば、シート上(印刷範囲の設定)で設定しておけばマクロの中で設定する必要はありません。 印刷範囲が変動する場合はマクロの中で自動的に設定したりします。マクロの実行のたびに印刷範囲を変更するとマクロの意味がなくなってしまいます。 1つのシートの印刷範囲を1種類にしておけば、そのシートの余白などの細かい印刷設定をシート上(プレビュー)で行えば、マクロ側ではほとんど設定する必要はありません。(今回はExcel2000です。同じでしょう) Sub 印刷test2()   With Worksheets("Sheet2")     .PageSetup.PrintArea = "A1:AB42"     .PrintPreview     .PageSetup.PrintArea = ""   End With   With Worksheets("Sheet3")     .PrintPreview   End With   With Worksheets("Sheet4")     .PrintPreview   End With End Sub 最後に、マクロを記録した結果から不必要な箇所を除いたり、繰り返し処理、判定処理を組み込むようにすれば間違いが減り、分かりやすく短くなり、上達すると思います。

m-happy-t
質問者

お礼

いろいろ教えていただきまして、ありがとうございました。 VBAを始めて、1週間がたちましたが、詳しく教えていただいたので VBAの作成の方法がだいぶわかりました。本を読んでやっていたときは さっぱりわかりませんでしたが、親切に教えていただいたおかげで助かりました また、何か質問をする事がありかもわかりませんが、そのときはよろしくお願いします。

その他の回答 (4)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

少し書き換えてみました。コメントを見てもらえば行っていることは分かると思います。 Excel97で動作確認しました。ご参考に。 Sub 印刷test()   Dim ws As Worksheet 'ワークシート   Dim PrintFlg As Boolean '印刷するかの判定   On Error GoTo ErrorHandler 'エラー対応(非表示シート対応)   For Each ws In Worksheets '全てのシートを調べる     Select Case ws.Name       '印刷したいシートは PrintFlg を True にする       Case "Sheet1": PrintFlg = True       Case "Sheet2": PrintFlg = True       Case "Sheet3": PrintFlg = True       Case "Sheet4": PrintFlg = True       '上以外のシート名なら PrintFlg は False       Case Else: PrintFlg = False     End Select     If PrintFlg = True Then ws.PrintPreview '今はプレビュー。PrintOutで印刷   Next   Exit Sub '終わり ErrorHandler:   'シートが非表示の場合   If Err = 1004 Then     ws.Visible = True '表示する     ws.PrintPreview '今はプレビュー。PrintOutで印刷     ws.Visible = False '非表示に戻す   End If   Resume Next '次の処理 End Sub

m-happy-t
質問者

補足

もうひとつ、教えてください。よろしくお願いします。 --------------------------------------------------------------------- Sub 印刷test()   Dim ws As Worksheet 'ワークシート   Dim PrintFlg As Boolean '印刷するかの判定   On Error GoTo ErrorHandler 'エラー対応(非表示シート対応)   For Each ws In Worksheets '全てのシートを調べる     Select Case ws.Name       '印刷したいシートは PrintFlg を True にする       Case "Sheet2": PrintFlg = True       Case "Sheet3": PrintFlg = True       Case "Sheet4": PrintFlg = True       '上以外のシート名なら PrintFlg は False       Case Else: PrintFlg = False     End Select     If PrintFlg = True Then ws.PrintPreview '今はプレビュー。PrintOutで印刷   Next   Exit Sub '終わり ErrorHandler:   'シートが非表示の場合   If Err = 1004 Then     ws.Visible = True '表示する     ws.PrintPreview '今はプレビュー。PrintOutで印刷     ws.Visible = False '非表示に戻す   End If   Resume Next '次の処理 End Sub ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 上記のマクロに下記のマクロを書き込みたいのですが教えてください ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Sub printappointedrange() Worksheets("Sheet2").Activate Range("A1:AB42").Select 'セル範囲の選択 With ActiveSheet .PageSetup.PrintArea = Selection.Address '印刷範囲の指定 .PrintOut '印刷 .PageSetup.PrintArea = False '印刷範囲のクリア End With End sub ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  • masakin
  • ベストアンサー率59% (32/54)
回答No.3

#2以外の方法です On Error Resume Next Sheets("sheet1").PrintOut Copies:=1 Sheets("sheet2").PrintOut Copies:=1 Sheets("sheet3").PrintOut Copies:=1 Sheets("sheet4").PrintOut Copies:=1 という方法です。 On Error Resume Nextでエラーとなっても強制的に次のステートメントを実行します。 あまり勧めれませんが・・・

  • masakin
  • ベストアンサー率59% (32/54)
回答No.2

2.への回答です If Worksheets("sheet1").Visible = True Then  Sheets("sheet1").Select  ActiveWindow.SelectedSheets.PrintOut Copies:=1 End If If Worksheets("sheet2").Visible = True Then  Sheets("sheet2").Select  ActiveWindow.SelectedSheets.PrintOut Copies:=1 End If     : こんな感じでしょうか?

  • madman
  • ベストアンサー率24% (612/2465)
回答No.1

1) ActiveWindow.SelectedSheets.PrintOut Copies:=1 ←これを消せば良いです。 Sheets("sheet1").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet2").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet3").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets("sheet4").Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 Sheets().selectで、それぞれのシートをアクティブにして、 Active…でアクティブなシートを印刷してますので、最初のシート5の状態で印刷している部分が不要でしょう。 2) 非表示なのでシートを選択できないのが原因ではないでしょうか。 ちょっと回避策はすぐには浮かばないです。

関連するQ&A