みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBAのコーディング

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

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

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



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



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

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

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

投稿日時 - 2013-01-05 22:00:57

QNo.7877368

すぐに回答ほしいです

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

どうしてわざわざWorksheet_Activateを使っているのかご相談で何も説明が無いので、その点の良しあしはタッチしない事にします。
マクロが単純に起動できていない可能性もありますが、(Activateがいいのか他の方法が良いのかは今回のご質問とは本質的に無関係なので)使い勝手で判断してください。

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

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

投稿日時 - 2013-01-05 22:42:46

お礼

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

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

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


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


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

投稿日時 - 2013-01-06 02:10:36

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

他の方もご指摘されていますが、シート名が誤っている可能性が高いと思います。
「sheet4」という名前のシートを指定してるけど、そんなんないよ!てなエラーメッセージですね。

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

投稿日時 - 2013-01-06 10:14:46

補足

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


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


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

投稿日時 - 2013-01-07 10:07:12

お礼

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

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


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


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

投稿日時 - 2013-01-07 09:12:40

ANo.4

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

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

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



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

投稿日時 - 2013-01-06 08:12:38

お礼

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


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


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

投稿日時 - 2013-01-07 10:07:08

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


'(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としたいと思い試しましたが、これはエラーになってしまいました。
知識が少ないため、その理由は分かりません・・・。

投稿日時 - 2013-01-05 22:48:11

お礼

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

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


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


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

投稿日時 - 2013-01-06 02:16:36

ANo.1

> コピーペーストするようにしてみたのですが、うまくいきません。
「どの行で」「どのようなエラーが出て」うまくいきません。を書いてください。

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

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

投稿日時 - 2013-01-05 22:20:22

お礼

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

投稿日時 - 2013-01-06 02:14:01

あなたにオススメの質問