- ベストアンサー
エクセル VBA シート毎に同じ動作をしたい・・・
エクセルVBAでシート毎に同じ動作をしたいのです。 例えば A・B・C・D・E とシートがあるのですが、A以外のものを全部印刷したいのです。 今までは Worksheets("B").Select Range("A1:AG44").Select Selection.PrintOut From:=1, To:=1, Copies:=1, Collate:=True Worksheets("C").Select Range("A1:AG44").Select Selection.PrintOut From:=1, To:=1, Copies:=1, Collate:=True と これを繰り返していたのです。 これをやると文章も長くなりますし、シート名が変わったときには、VBAもすべて書き直しと言う状況になってしまいます。 何か打開策はありますでしょうか? よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Sub Print_Test() For Each sh In Worksheets '全ワークシートに繰り返す If sh.Name <> "A" Then 'シート名がAでなければ sh.Range("A1:AG44").PrintOut From:=1, To:=1, Copies:=1, Collate:=True End If Next '次のシートに End Sub
その他の回答 (1)
- neKo_deux
- ベストアンサー率44% (5541/12319)
でしたら、サブルーチン、関数を定義します。 ' メインの処理 Sub Print_All() Call Print_1sheet("B") Call Print_1sheet("C") Call Print_1sheet("D") Call Print_1sheet("E") End Sub ' サブの処理 Function Print_1Sheet(strSheet as String) Worksheets(strSheet).Select Range("A1:AG44").Select Selection.PrintOut From:=1, To:=1, Copies:=1, Collate:=True End Function -- シート数が100になると、修正前の方法では400行、修正後は100行と少しです。 シート名が変わっても、メインの処理を書き直すだけで済みます。
お礼
OH! そんなやり方もあるのですね 納得いたしましました 早々のお返事ありがとうございました。
お礼
これだとシート命変わっても問題なさそうですね^^ 早速のお返事ありがとうございました。