- ベストアンサー
VBAであるマクロを全てのシートに対して流したい
お世話になります。 現在シート単位に実行するマクロ1があります。 これを、全てのシートに対して、マクロ1を実行したいのですが、どのようにすればよいでしょうか? ※現在は、シートが終わる毎に手動でマクロ1を実行して、それが終われば次のシートへという形です。 大変お手数ですが、何卒よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
全てのシートに同じマクロ、ということは そのマクロはアクティブシートに対して処理してるはずですから 該当シートをアクティブにしながら実行されなければいけないので 以下のようになります。 '------------------------------------------- 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)
すみません 突っ込むコードが漏れていましたね。今さら無意味なんですが、ご参考まで。Call文の直前に入れます。 Sheets(Worksheets(i).Name).Select
- A88No8
- ベストアンサー率52% (836/1606)
こんにちは #1です。 すでに#3の方が決定打のFOR EACH文で投稿されているので、私のフォローは無意味だと思いますが、シートをアクティブにするコードが足りないです。
- pascal3141
- ベストアンサー率36% (99/269)
マクロのシート名を変数にしてやればいいではないでしょうか。 ------------------------------------- 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 ------------------------------------- のような感じで作ります。
- A88No8
- ベストアンサー率52% (836/1606)
こんにちは オーソドックスな?一例です。 Option Explicit Sub TestMain() Dim i As Integer For i = 1 To Worksheets.Count 'Call マクロ1 Next End Sub
補足
ご返事ありがとうございます。 上記の'callマクロ1 の箇所だけ変更して実行したのですが、 シートが次のシートにいかず、同じシートで、シート数分マクロ1を繰り返してしまいます。 一つのシートにマクロ1を1回だけ実行して、次のシートに移動したいのです。 よろしくお願いします。
補足
ご返事ありがとうございます。 シート名がデフォルトのSheet1等ではなく、個別の、不規則な名前なのです。 1つのエクセルに100シート、それが、50個ほどありますので、名前を指定することなく、実行したいのです。 よろしくお願いします。