• ベストアンサー

エクセル 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もすべて書き直しと言う状況になってしまいます。 何か打開策はありますでしょうか? よろしくお願いいたします。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.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

nanny
質問者

お礼

これだとシート命変わっても問題なさそうですね^^ 早速のお返事ありがとうございました。

その他の回答 (1)

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

でしたら、サブルーチン、関数を定義します。 ' メインの処理 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行と少しです。 シート名が変わっても、メインの処理を書き直すだけで済みます。

nanny
質問者

お礼

OH! そんなやり方もあるのですね 納得いたしましました 早々のお返事ありがとうございました。

関連するQ&A