- ベストアンサー
エクセル VBA 各シートに貼り付け
いつも皆様には大変お世話になっております。 表題に書いたようにコピーしたものを貼り付けしたいのですがうまく動きません。 Sheets("A").Select Range("B8:B38").Select Selection.Copy For Each sh In Worksheets If sh.Name <> "A" Then Range("B12:B42").Select Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Range("F38").Select ActiveWindow.SmallScroll Down:=-12 End If Next と言った様な構文を書いているのですが Aのファイル内のみでコピーして貼り付けをやってしまいます。 ちなみにシートはB,C,Dなど各種あります。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Range("B12:B42").PasteSpecial ~ だと、いくら For Each ループで回しても現在アクティブなシートの B12:B42 に貼り付け続けることになります。 直前にアクティブシートを切り替えるか、以下のように 「どのシートの Range か?」 を指定してやれば良いでしょう。 Dim Sh As Worksheet Sheets("A").Range("B8:B38").Copy For Each Sh In Worksheets If Sh.Name <> "A" Then Sh.Range("B12:B42").PasteSpecial Paste:=xlPasteFormats End If Next
その他の回答 (1)
- hana-hana3
- ベストアンサー率31% (4940/15541)
>Aのファイル内のみでコピーして貼り付けをやってしまいます。 For Each を使ってシートを取得していますが、式の内部でシートを指定していないからです。 sh.Activate とか、 sh.Range("B12:B42").xxx 等と、作業シートを指定する必要があります。 Sub test1() Dim sh Sheets("A").Select Range("B8:B38").Copy For Each sh In Worksheets If sh.Name <> "A" Then sh.Activate Range("B12:B42").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Range("F38").Select ActiveWindow.SmallScroll Down:=-12 End If Next End Sub
お礼
早速のお返事ありがとうございます Dim意外と大事ですね・・・ もうちょっと勉強してがんばります。
お礼
早速のお返事ありがとうございます Dimの指定が必要だったのですね・・・ う~ん 色々試しているのですがなかなかにおくが深いですね・・・ 早速試してみます。ありがとうございました