- ベストアンサー
Excel macro 同じ作業を全シートで実行
お世話になります。 下記のマクロを作成してみましたが、最初のシートで実行後、次のシートには移らないです。何かを見落としているには違いないですが。。。 誰かにご教示いただければ。。。 Sub Macro4() ' Dim sh As Object For Each sh In Worksheets Range("H3").Select Selection.Copy Range("BA3").Select ActiveSheet.Paste Range("BA3:BD3").Select Selection.ClearComments Range("BA5").Select Selection.Copy Range("AZ3:BE3").Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Range("BA3").Select Selection.TextToColumns Destination:=Range("BA3"), DataType:=xlFixedWidth, _ FieldInfo:=Array(Array(0, 2), Array(6, 2)), TrailingMinusNumbers:=True Next For Each sh In ActiveWindow.SelectedSheets sh.Activate sh.Name = Range("BB3") Range("BA3:BB3").Select Application.CutCopyMode = False Selection.ClearContents Next End Sub 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
未検証ですけど。 セルに対してシートの選択がないため、アクティブなシートでしかコードが実行されなかったのでは? Sub Macro4_Next() ' Dim sh As Object For Each sh In Worksheets sh.Range("H3").Copy sh.Range("BA3") sh.Range("BA3:BD3").ClearComments sh.Range("BA5").Copy sh.Range("AZ3:BE3").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False sh.Range("BA3").TextToColumns Destination:=Range("BA3"), DataType:=xlFixedWidth, _ FieldInfo:=Array(Array(0, 2), Array(6, 2)), TrailingMinusNumbers:=True Next For Each sh In ActiveWindow.SelectedSheets 'sh.Activate sh.Name = sh.Range("BB3") sh.Range("BA3:BB3").ClearContents Next End Sub
その他の回答 (1)
- nattocurry
- ベストアンサー率31% (587/1853)
#1さんの通り、shを活かしていないので、常にアクティブシートに対して処理を行っているんだと思います(同じく検証していませんが)。 ひょっとして、[F8]キーでステップ実行させながら確認する、という方法を知らなかったりしますか? かなり便利ですよ。
お礼
ご指摘ありがとうございます。 修正後完璧に動いています。 また、宜しくお願いします!
お礼
なるほど、参考になりました。 ありがとうございます。 下記の修正をほどこしてから、完璧に動いています:) Sub Macro4() ' Dim sh As Object For Each sh In Worksheets sh.Activate sh.Range("H3").Copy Range("BA3").Select ActiveSheet.Paste sh.Range("BA3:BD3").ClearComments sh.Range("BA5").Copy sh.Range("BA3").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False sh.Range("BA3").TextToColumns Destination:=Range("BA3"), DataType:=xlFixedWidth, _ FieldInfo:=Array(Array(0, 2), Array(6, 2)), TrailingMinusNumbers:=True 'Next 'For Each sh In Worksheets 'sh.Activate sh.Name = Range("BB3") sh.Range("BA3:BB3").ClearContents Next sh End Sub また、宜しくお願いします:)