- ベストアンサー
VBA初心者のためのシート間のデータコピー方法とエラーの解決法
- Excel 2010のVBAで、ワークシートのSheet1のオブジェクトモジュールに他のシートから別のシートにデータをコピー&ペーストする方法について説明します。しかし、特定のプログラムを記述すると、アプリケーション定義またはオブジェクトの定義エラーが発生します。
- エラーが発生する理由は、コピー元とコピー先の範囲を正しく指定していないためです。範囲指定にはCells関数を使用しましたが、変数dを正しく初期化せずに使用している可能性があります。
- 解決法としては、まず変数dを正しく初期化することが重要です。また、Cells関数を使用する際には、正しい行番号と列番号を指定する必要があります。最後に、コピー元とコピー先のワークシートを正確に指定することも重要です。これらの修正を行うことで、エラーを解決することができます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
誰もが最初に間違える: Worksheets("Sheet2").Range(Cells(1, 7), Cells(d, 8)).Copy … 正しくは: Worksheets("Sheet2").Range(Worksheets("Sheet2").Cells(1, 7), Worksheets("Sheet2").Cells(d, 8)).Copy … 実際には: with Worksheets("Sheet2") .range( .range("G1"), .cells(d, 8)).copy destination:=worksheets("Sheet3").cells(3, 1) end with
その他の回答 (3)
- nattocurry
- ベストアンサー率31% (587/1853)
#1さんの回答の補足です。 Worksheets("Sheet2").Range(○, △) は Sheet2 のセル範囲を指定しようとしているので、○と△を Sheet2 以外のセルにすることはできません。 Worksheets("Sheet2").Range(Cells(1, 7), Cells(d, 8)) この場合の Cells(1, 7) や Cells(d, 8) は、アクティブシートの Cells(1, 7) や Cells(d, 8) を意味します。 Sheet2がアクティブな状態で、このコードが実行されるときは、問題なく動きます。 しかし、Sheet2以外がアクティブな状態では、エラーになってしまします。 エラーになっているということは、Sheet2以外がアクティブになっているのでしょう。
- imogasi
- ベストアンサー率27% (4737/17069)
良くある質問です。 Googleで「range cells エラー」ででも照会すること。 下記とそっくりでは。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1112011581 http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_200_070.html など。
- KURUMITO
- ベストアンサー率42% (1835/4283)
次のようにされてはいかがでしょう。 Worksheets("Sheet2").Range(Cells(1, 7), Cells(d, 8)).Copy Worksheets("Sheet3").Cells(3, 1).select ActiveSheet.Paste
お礼
Rengeの括弧の中で記述しているCellsには、改めてどこのオブジェクトか指定しなければならないのですね。教えていただいて、そういうことだったのか、と思わず納得してしまいました。プログラムの文頭のWorksheets("Sheet2")で、後に述べられる括弧で区切られた中にあるCellsもWorksheets("Sheet2")に指定されていると思っていたのですが、違ったのですね。 セルの「A1」形式だと列番号が数字でないので把握しづらくて、わたしはよくCellsを使っているのですが、HPとかだと例が「A1」形式の例が多くて、今回のようにCellsで範囲指定する例というのはなかなか見つけられないでいました(ただわたしが探し方がヘタクソなのかもしれませんが)。 ココの質問箱は初めて使用したのですが、思い切って質問してみて助かりました。ご回答がいただけたことに感謝いたします。