- ベストアンサー
エクセルで印刷するシートを条件を指定し自動で印刷したいのですが?
エクセルで印刷するシートを条件を指定し自動で印刷したいのですが? 具体的に言いますと、『複数あるシートのA25のセルの合計が0以下なら印刷しない、0以上なら印刷する』 といったものをマクロで記述しようと思い試行錯誤、似た質問も捜してはいるのですが、全くなド素人なもので応用が利きません。良きアドバイスお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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も入れられます。ファイル-ページ設定をしてマクロの記録を取って修正して、上記の前段階に貼りつけてください。
その他の回答 (1)
- nishi6
- ベストアンサー率67% (869/1280)
>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
お礼
ありがとうございました。大変参考になりました。 今後ともよろしくお願い致します。
お礼
ありがとうございました。ほとんど利用させていただきました。今後ともよろしくお願い致します。