• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA初心者です。)

VBA初心者のためのシート間のデータコピー方法とエラーの解決法

このQ&Aのポイント
  • Excel 2010のVBAで、ワークシートのSheet1のオブジェクトモジュールに他のシートから別のシートにデータをコピー&ペーストする方法について説明します。しかし、特定のプログラムを記述すると、アプリケーション定義またはオブジェクトの定義エラーが発生します。
  • エラーが発生する理由は、コピー元とコピー先の範囲を正しく指定していないためです。範囲指定にはCells関数を使用しましたが、変数dを正しく初期化せずに使用している可能性があります。
  • 解決法としては、まず変数dを正しく初期化することが重要です。また、Cells関数を使用する際には、正しい行番号と列番号を指定する必要があります。最後に、コピー元とコピー先のワークシートを正確に指定することも重要です。これらの修正を行うことで、エラーを解決することができます。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

誰もが最初に間違える: 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

kinu_nbmay
質問者

お礼

Rengeの括弧の中で記述しているCellsには、改めてどこのオブジェクトか指定しなければならないのですね。教えていただいて、そういうことだったのか、と思わず納得してしまいました。プログラムの文頭のWorksheets("Sheet2")で、後に述べられる括弧で区切られた中にあるCellsもWorksheets("Sheet2")に指定されていると思っていたのですが、違ったのですね。 セルの「A1」形式だと列番号が数字でないので把握しづらくて、わたしはよくCellsを使っているのですが、HPとかだと例が「A1」形式の例が多くて、今回のようにCellsで範囲指定する例というのはなかなか見つけられないでいました(ただわたしが探し方がヘタクソなのかもしれませんが)。 ココの質問箱は初めて使用したのですが、思い切って質問してみて助かりました。ご回答がいただけたことに感謝いたします。

その他の回答 (3)

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.4

#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)
回答No.3

良くある質問です。 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)
回答No.2

次のようにされてはいかがでしょう。 Worksheets("Sheet2").Range(Cells(1, 7), Cells(d, 8)).Copy Worksheets("Sheet3").Cells(3, 1).select ActiveSheet.Paste