性格悪い人が優勝

現在、次のようなことがやりたくてエクセルのコードを作ってみました。

・データが書かれたエクセルの複数のsheetの特定のセルをコピーして、sheet1にコピーペーストしていきたい。

そこでこのようなコードを書いてみました。



Private Sub Worksheet_Activate()
Sheet4.Select
Range("A16").Copy
Sheet1.Select
Range("U63").Select
Sheet1.Paste
End Sub



とりあえずSheet4のセルA16のデータをSheet1のU63にコピーペーストするようにしてみたのですが、うまくいきません。

この場合のコードの書き方をご教授いただけないでしょうか?

どうぞ、よろしくお願い致します。

A 回答 (5件)

どうしてわざわざWorksheet_Activateを使っているのかご相談で何も説明が無いので、その点の良しあしはタッチしない事にします。


マクロが単純に起動できていない可能性もありますが、(Activateがいいのか他の方法が良いのかは今回のご質問とは本質的に無関係なので)使い勝手で判断してください。

とはいえ、ご質問のマクロの間違いは、worksheet_Activateを使った事に間接的な原因があります。それを使いたいなら、他のシート(今回はシート4)のセルを触る場合には(あなたが書いたマクロのように)「シートを開いてセルを触る」では正しく動作しません。下記のように必ず漏れなく「シート.セル」のように書かないとダメです。

訂正版:
private sub worksheet_Activate()
 worksheets("Sheet4").range("A16").copy destination:=worksheets("Sheet1").range("U63")
end sub
一旦別のシートを開いてから、改めてマクロを埋めたシートを開きなおして起動させる。
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。助かります。

Private Sub Worksheet_Activate()
Worksheets("Sheet4").Range("A16").Copy Destination:=Worksheets("Sheet1").Range("U63")
End Sub

このようにコードしてみて、デバッグでステップインさせたところこのようなエラーが出てきました。


”実行時エラー '9': インデックスが有効範囲にありません。 ”


このようなエラーが出てきて、動作が止まってしまうのですが、解決方法など教えていただけませんでしょうか?

お礼日時:2013/01/06 02:10

他の方もご指摘されていますが、シート名が誤っている可能性が高いと思います。


「sheet4」という名前のシートを指定してるけど、そんなんないよ!てなエラーメッセージですね。

もしかして、マクロをくんでいるエクセルファイルと、処理したいシートのあるファイルが違うなんてことはないですよね?

この回答への補足

回答頂きありがとうございます。


>Destination:=Worksheets("Sheet1")
>とかのところを、worksheets("正しいシート名")の
>ように記入します。
>正しいシート名とは、エクセル画面で見たときに
>画面の下のシート名タブのところに書いてある名前の事です。


エラーの原因がこの問題だったことに今気づきました。
大変申し訳ありません。

補足日時:2013/01/07 10:07
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。

>もしかして、マクロをくんでいるエクセルファイルと、
>処理したいシートのあるファイルが違うなんてことはないですよね?


これに関しては、ファイルは同一のものです。


Sheet1,Sheet4にはそれぞれ名前はつけていますが、そのままSheet1,Sheet4を使用することはできませんでしょうか?

お礼日時:2013/01/07 09:12

>このようなエラーが出てきて、動作が止まってしまうのですが、解決方法など教えていただけませんでしょうか?



ご自分のブックのシート名も把握していないのですか?

Worksheets("Sheet4")
とか
Destination:=Worksheets("Sheet1")
とかのところを、worksheets("正しいシート名")のように記入します。
正しいシート名とは、エクセル画面で見たときに画面の下のシート名タブのところに書いてある名前の事です。



それとも元のマクロでも気にはなっていましたが、オブジェクト名でマクロを書く癖が付いているので理解できなかったのでしょうか。
それならそれでも出来ますので、適切に応用してください。
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。


>Destination:=Worksheets("Sheet1")
>とかのところを、worksheets("正しいシート名")の
>ように記入します。
>正しいシート名とは、エクセル画面で見たときに
>画面の下のシート名タブのところに書いてある名前の事です。


エラーの原因がこの問題だったことに今気づきました。
大変申し訳ありません。

お礼日時:2013/01/07 10:07

あまり詳しくないですが、これでできると思います。




'(1)シート4にあるA16のセルをコピー
Sheets("Sheet4").Range("A16").Copy
'(2)シート1にあるU63のセルを選択
Sheets("Sheet1").Range("U63").Select
'(3)選択したセルにペースト
ActiveSheet.Paste

(2)と(3)を一緒にしたいと思い、
Sheets("Sheet1").Range("U63").Pasteとしたいと思い試しましたが、これはエラーになってしまいました。
知識が少ないため、その理由は分かりません・・・。
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。
教えていただいたコードでやってみたのですが、

”実行時エラー '9': インデックスが有効範囲にありません。 ”


このようなエラーが出てきて、動作が止まってしまうのですが、解決方法など教えていただけませんでしょうか?


エクセル2007を使用しています。

お礼日時:2013/01/06 02:16

> コピーペーストするようにしてみたのですが、うまくいきません。


「どの行で」「どのようなエラーが出て」うまくいきません。を書いてください。

> Sheet4.Select
Worksheets("Sheet4").Select
か。

「マクロの記録」を実行して、なさりたいことをすれば冗長ですが自動生成してくれます。
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。
マクロの記録というのは便利そうですね。

お礼日時:2013/01/06 02:14

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