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

Excel VBA Worksheetsでシートをコピーできないエラーの解決方法

このQ&Aのポイント
  • Excel2016をWindows10で使用しています。Worksheets関数で指定したシートをコピーするマクロが実行できません。
  • Sheet関数でシート名を変更すると、コピーが正常に動作しますが、Sheet(3)のままではエラーとなります。
  • Sheet関数を使用せずにSheet(3)のままでシートをコピーする方法を教えてください。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

>Sheet(3)のままで、コピー とは、どのシートの内容をどのシートにコピーすれば良いのでしょうか?  「Sheet3」というシート名のシートに、「Sheet2」というシート名のシートの内容をコピーするのでしょうか?  それとも「Sheet(2)」というシート名のシートに、「Sheet(3)」というシート名のシートの内容をコピーするのでしょうか?  それとも「Sheet1 (2)」というシート名のシートに、「Sheet1 (3)」というシート名のシートの内容をコピーするのでしょうか?  「Sheet3」というシート名のシートに、「Sheet2」というシート名のシートの内容をコピーする場合には、 Worksheets("Sheet3").Range("$B$2:$D$4").FormulaR1C1 = "=Sheet2!RC" になります。  一方、「Sheet(2)」というシート名のシートに、「Sheet(3)」というシート名のシートの内容をコピーする場合の様に、小括弧でくくられた数字が付いているシート名のシートを参照元にする様なワークシート関数を設定するマクロとする場合には、 Worksheets("Sheet(3)").Range("$B$2:$D$4").FormulaR1C1 = "=Sheet(2)!RC" ではなく、 Worksheets("Sheet(3)").Range("$B$2:$D$4").FormulaR1C1 = "='Sheet(2)'!RC" のように、セルに設定するワークシート関数内の「括弧付きの数字付きのシート名」の方を「'」(半角文字のアポストロフィ)でくくらなけばなりません。(「Worksheets("Sheet(3)").」の中の「Sheet(3)」の方には「'」を付けてはいけません)  それと、「Sheet1 (2)」というシート名のシートに、「Sheet1 (3)」というシート名のシートの内容をコピーする場合には、 Worksheets("Sheet1 (3)").Range("$B$2:$D$4").FormulaR1C1 = "='Sheet1 (2)'!RC" となるのですが、シート名を間違えて Worksheets("Sheet1(3)").Range("$B$2:$D$4").FormulaR1C1 = "='Sheet1(2)'!RC" などの様にシート名内にある半角スペースを入れ忘れてしまわないように注意して下さい。

situmonn9876
質問者

お礼

場合に分けての説明、ありがとうございます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

エクセルワークシートを1つ特定するには (1)インデックス番号指定 (2)シート名指定 (3)その他 ActivesheetやPrebiousやNext の3つがある。 その(1)、(2)の2つがよく使えわれる。 (1)(2)は、WorksheetのコレクションのWorksheets(sがつく)の1つを特定するわけです。名前にWorksheets("Sheet(3)").の(3)など、エクセルが自動的に振った番号の場合(Sheet(3)はこれだろう)と、配列の要素指定などで()を付けるときと、初心者には紛らわしいので注意すること。Sheets(3)とSheet(3)(sなし)は指定カテゴリが違うことを判ってないのかな。 シート名の指定の場合は文字列を指定となるので、Worksheets("Sheet(3)")とダブルクオートで囲んだもの。 VBAをやり始めて、まだ日が浅いようなので、VBAの基本のキである、VBAのブック、シート、セルの指定の仕方の多様性(バリエーション)をWEBか解説書で勉強のこと。

situmonn9876
質問者

お礼

VBAのブック、シート、セルの指定の仕方は、多様なんですね。 ご指摘ありがとうございます。

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

「Sheet3」というのは、シートの名前です。 エクセルの画面の下に表示されている、シートの名前そのものです。 「Sheets(3)」は、左から何番目のシート、の意味です。 この場合は、「Sheets()」というように、複数形(最後に「s」が付く)で、全く違う意味です。 また、左端から何番目は「Worksheets()」と書いても同じです。 また、シートの名前の場合は、「"Sheet3"」と、「""」でくくりますが(名前(=文字列))、「Sheets(3)」は、文字列ではありません。 したがって、「""」でくくってはいけないのです。 「""」でくくると、マクロは、「Sheets(3)」という「シート名」だと思ってしまいます。

situmonn9876
質問者

お礼

シート名と、左から何番目のシートか区別するように、気を付けます。 ありがとうございます。

関連するQ&A