• ベストアンサー

エクセルで印刷するシートを条件を指定し自動で印刷したいのですが?

エクセルで印刷するシートを条件を指定し自動で印刷したいのですが? 具体的に言いますと、『複数あるシートのA25のセルの合計が0以下なら印刷しない、0以上なら印刷する』 といったものをマクロで記述しようと思い試行錯誤、似た質問も捜してはいるのですが、全くなド素人なもので応用が利きません。良きアドバイスお願い致します。

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

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

Sub prt1() Dim sh As Worksheet For Each sh In Worksheets 'MsgBox sh.Name If sh.Range("a25") > 0 Then MsgBox sh.Name 'Range("a1:h30").PrintOut End If Next End Sub 上記Msgboxの前のコメントを外し、旨くプログラムルートを通っているか確認してから、コメント化し、PrintOutのコメントを外してください。 Range("a1:h30")は、本番での印刷する範囲に変えてください。 PageSetupも入れられます。ファイル-ページ設定をしてマクロの記録を取って修正して、上記の前段階に貼りつけてください。

siekana
質問者

お礼

ありがとうございました。ほとんど利用させていただきました。今後ともよろしくお願い致します。

その他の回答 (1)

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

>A25のセルの合計が0以下なら印刷しない、0以上なら印刷する 『0』の場合の処理が不明なので、『0以上なら印刷としています』 最初に、全シートのA25セルの合計を計算して、その値で印刷するかどうか決めています。 各シートの印刷書式等は設定済みとしています。回答はプレビューモードです。 メッセージが不要な場合は『'**』の付いた4行を削除して下さい。 標準モジュールに貼り付けます。 Sub WsPrint()   Dim ws As Worksheet '// ワークシート   Dim Total_A25 As Double '// A25セルの合計を格納する変数   '// 各シートのA25セルの合計を計算する   For Each ws In Worksheets     Total_A25 = Total_A25 + ws.Range("A25")   Next   '// A25セルの合計に従って、印刷するか判断する   If Total_A25 >= 0 Then     If MsgBox("A25セルの合計が0以上です。印刷します。", vbOKCancel, "確認") = vbOK Then '**       For Each ws In Worksheets         ws.PrintPreview   '// この行はプレビュー         'ws.PrintOut    '// この行は印刷       Next     End If '**   Else '**     MsgBox "A25セルの合計が0以上ではありません。印刷はしません。" '**   End If End Sub なお、上は、『複数あるシート』をワークシートすべてとしています。 選択したワークシートを対象とする場合は、2行ある下の内容を書き換えます。 For Each ws In Worksheets   ↓ For Each ws In ThisWorkbook.Windows(1).SelectedSheets

siekana
質問者

お礼

ありがとうございました。大変参考になりました。 今後ともよろしくお願い致します。

関連するQ&A