プロが教えるわが家の防犯対策術!

こんばんは。
タイトルの通り、1004エラーが出て苦戦しています。
タイトルのエラーはシート名がしっかり入力されてないと出るエラーのようですが、試行錯誤した結果、解決には至らなかったのでご教授頂けると幸いです。

Sub テスト()

Dim Ws As Worksheet
Dim A As Range
Set A = Range("A1").End(xlDown)
Set A = A.Offset(0, 18)


For Each Ws In Worksheets
Ws.Activate
Range("A1", A).Copy ⇒ここでエラー
Range("A30").PasteSpecial xlPasteAll
Next Ws


End Sub

For Eachを使い、すべてのシートに適用する事が目的です。
教えて頂きたい事は2つです。
①、sheet1以外をアクティブにしてマクロを回すと、最初からRange("A1", A).Copyで1004エラーが出ます。
②、sheet1をアクティブにしてマクロを回すとsheet1は実行されますが、sheet2に移った時に1004エラーが出ます。

よろしくお願いいたします。

A 回答 (6件)

こんばんは。



下記で、どうでしょうか?

Sub テスト()
Dim Ws As Worksheet

For Each Ws In Worksheets
Ws.Activate
Range("A1:S" & Range("A1").End(xlDown).Row).Copy
Range("A30").PasteSpecial xlPasteAll
Next Ws

End Sub

1つ注意点としては、セルのA2にデータがないと、エラーになってしまう
様な気がします。
    • good
    • 0
この回答へのお礼

Range("A1:S" & Range("A1").End(xlDown).Row).Copy
⇒こんなやり方があるんですね…自分では思いつけなかったです。
ありがとうございます。動作確認いたしました。感謝いたします。

お礼日時:2021/11/21 23:30

こんばんは。



どの様なことがされたいのかを、もう少し詳しく記載されると、欲しい
情報が得られると思います。

もしかして、セルのA1:S○(A列のデータ末尾)までをコピーして、
A30に貼り付けしたい?
それを、各シートで、それぞれ実施したいのでしょうか?
    • good
    • 1
この回答へのお礼

こんばんは。

説明不足で大変申し訳ございません。

もしかして、セルのA1:S○(A列のデータ末尾)までをコピーして、A30に貼り付けしたい?それを、各シートで、それぞれ実施したいのでしょうか?⇒その通りです。

お礼日時:2021/11/21 22:54

第1引数、第2引数共に変数にするのがスマートなのでは。

    • good
    • 1
この回答へのお礼

ありがとうございます!
第二引数のAと同様に"A1"の方も変数にするという事でしょうか?

お礼日時:2021/11/21 22:49

記述されているコードから何をしたいのか読み取れませんが


Range や Worksheets をいきなり書くのはダメです。

Worksheets は Workbook オブジェクトのインスタンスを指定する必要があります。
Workbook オブジェクトは ThisWorkbook.Worksheets や ActiveWorkbook.Worksheets 等、
操作しようとしている対象のインスタンスを指定します。

Range は Worksheet オブジェクトのインスタンスを指定する必要があります。
For Eachですべてのシートに何かするのであれば
そこで指定している Ws を指定することになるでしょうか。

Excelマクロは本来必要なものを省略しても半端に動いてしまうところがあり、それが罠のようになっていたります。
どのブックのどのシートに対しての処理なのか明示的に記述するようにしましょう。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
Range や Worksheets をいきなり書くのはダメです。
⇒そうなんですね。インスタンスという言葉も初めて聞きました。

どのブックのどのシートに対しての処理なのか明示的に記述するようにしましょう。
⇒ありがとうございます!明示的に記述するようにいたします。

お礼日時:2021/11/21 22:48

Range("A1", A).Copy の場合、


省略されているものをそのまま指定すると
ActiveSheet.Range("A1", A).Copy になります。

つまり、”A1” はActiveSheet の[A1]であり、
第2引数の A は Ws.Activate を実行する前にActiveであった
Sheet1 の セルになります。

第1引数のセルのシートと
第2引数のセルのシートが異なるため
エラーになっています。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
ActiveSheet.Range("A1", A).Copy になります。
⇒ご説明ありがとうございます。勉強になります。

第1引数のセルのシートと
第2引数のセルのシートが異なるため
エラーになっています。
⇒こちらを回避するには、先にシートを明示すれば良いということでしょうか?

お礼日時:2021/11/21 22:41

こんばんは。



セルのどこをコピーしたいのでしょうか?

Range("A1", A).Copy 書き方がおかしいので、エラーになっているかと。

Range("A1").Copy : セルのA1をコピー?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
セルの範囲選択をしたく、セルの右下を指定する形で"A1"、 Aとしていました。

お礼日時:2021/11/21 22:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A