• ベストアンサー

エクセル 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など各種あります。 よろしくお願いいたします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

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

nanny
質問者

お礼

早速のお返事ありがとうございます Dimの指定が必要だったのですね・・・ う~ん 色々試しているのですがなかなかにおくが深いですね・・・ 早速試してみます。ありがとうございました

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

>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

nanny
質問者

お礼

早速のお返事ありがとうございます Dim意外と大事ですね・・・ もうちょっと勉強してがんばります。

関連するQ&A