• ベストアンサー

VBAであるマクロを全てのシートに対して流したい

お世話になります。 現在シート単位に実行するマクロ1があります。 これを、全てのシートに対して、マクロ1を実行したいのですが、どのようにすればよいでしょうか? ※現在は、シートが終わる毎に手動でマクロ1を実行して、それが終われば次のシートへという形です。 大変お手数ですが、何卒よろしくお願いします。

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

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.3

全てのシートに同じマクロ、ということは そのマクロはアクティブシートに対して処理してるはずですから 該当シートをアクティブにしながら実行されなければいけないので 以下のようになります。 '------------------------------------------- Sub Test() Application.ScreenUpdating = False  Dim Sht As Worksheet    For Each Sht In Worksheets      Sht.Select      Call マクロ1    Next Sht Application.ScreenUpdating = True End Sub '-------------------------------------- 全てのシートをアクティブにしながら実行しますので画面がちらつきます。 それを抑えるのが、ScreenUpdatingメソッドです。 違いを見る為に最初は、それを抜いて実行してみてください。  

その他の回答 (4)

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.5

すみません 突っ込むコードが漏れていましたね。今さら無意味なんですが、ご参考まで。Call文の直前に入れます。   Sheets(Worksheets(i).Name).Select

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.4

こんにちは #1です。  すでに#3の方が決定打のFOR EACH文で投稿されているので、私のフォローは無意味だと思いますが、シートをアクティブにするコードが足りないです。

回答No.2

マクロのシート名を変数にしてやればいいではないでしょうか。 ------------------------------------- dim WS as object :’シート変数 dim WN(10) as String :'シート名(今は10シートにした。) 'シート名セット WN(1)="Sheet1":'ココのシート名は自由 WN(2)="Sheet2"":'ココのシート名は自由 WN(3)="Sheet3"":'ココのシート名は自由 WN(10)="Sheet10"":'ココのシート名は自由 '処理中に画面がチラチラしないようにする Application.ScreenUpdating = False '実行 For i=1 to 10 Set WS=Worksheets(WN(I)) 'マクロ実行(この中のマクロのシート名は、WN(I)に直す。) Next I ------------------------------------- のような感じで作ります。

kgyqk433
質問者

補足

ご返事ありがとうございます。 シート名がデフォルトのSheet1等ではなく、個別の、不規則な名前なのです。 1つのエクセルに100シート、それが、50個ほどありますので、名前を指定することなく、実行したいのです。 よろしくお願いします。

  • A88No8
  • ベストアンサー率52% (836/1606)
回答No.1

こんにちは オーソドックスな?一例です。 Option Explicit Sub TestMain()  Dim i As Integer  For i = 1 To Worksheets.Count   'Call マクロ1  Next End Sub

kgyqk433
質問者

補足

ご返事ありがとうございます。 上記の'callマクロ1 の箇所だけ変更して実行したのですが、 シートが次のシートにいかず、同じシートで、シート数分マクロ1を繰り返してしまいます。 一つのシートにマクロ1を1回だけ実行して、次のシートに移動したいのです。 よろしくお願いします。

関連するQ&A