
No.1ベストアンサー
- 回答日時:
シート全体をコピーしたいのですよね?
クリップボードを経由する必要はあるのでしょうか。
Sheets("Sheet1").Cells.Copy Sheets("Sheet2").Cells
あるいは
Sheets("Sheet1").Cells.Copy Sheets("Sheet2").Cells(1, 1)
でSheet1をSheet2に直接コピーできますよ。
ありがとうございます。
目からうろこが落ちる、と言う感じです。
copyの distinationがあるのですね。
小生、長いこと、マクロのレコーディング機能を使ってやっていたので、
全然、気がつかなかったです。
ありがとうございます。
No.5
- 回答日時:
No.1です。
補足説明です。まず質問者様のやり方がうまくいかなかった理由ですが、たとえば、
Worksheets("Sheet1").Range("A1:B2").Copy
と範囲を絞ってコピーした場合、
Worksheets("Sheet2").Paste
とすると、これはSheet2の現在選択されているセルを起点として、Sheet1のA1:B2の内容がコピーされます。Sheet2でD3が選択されている場合、D3:E4にコピーされるわけです。
しかし、これを
Worksheets("Sheet1").Range("A:A").Copy
Worksheets("Sheet2").Paste
とA列全体をコピーした場合、Sheet2で1行目のどこかが選択されていないとエラーになります。そうでないとPasteする際にセルの最大範囲を超えてしまうからです。
それを踏まえてですが、
Sheets("Sheet1").Cells.Copy
では、Sheet1の全範囲をコピーします。そうすると、
Worksheets("Sheet2").Paste
は、上に述べたように貼り付ける先が「コピーした範囲をセルがはみ出さない領域」でなければエラーとなります。しかしコピーした範囲は全セルなので、コピー先シートでA1以外のセルが選択されていない場合は失敗します。A1が選択されている場合(あるいはコピーした範囲と同じく全セルが選択されている場合)のみ、貼り付けが成功します。
これはActiveSheetでも同じで、
ActiveSheet.Paste
がうまくいったのは単に偶然そのシートのA1を選択していたからに過ぎないと思います。実際、A1以外のセルを選択した状態で
Sheets("Sheet1").Cells.Copy
ActiveSheet.Paste
を実行すると、エラーになります。
したがって、回避策としては、「明示的にコピー先のA1セルを指定する(あるいは全セル範囲を指定する)」必要があるわけです。
そうすると、
Sheets("Sheet2").Cells(1, 1).PasteSpecial
あるいは
Sheets("Sheet2").Cells.PasteSpecial
という書き方になります。(Rangeオブジェクトの場合はメソッドはPasteSpecialになります)
ただ、手作業ならいったんクリップボードにコピーして貼り付ける、というのでいいのですが、マクロでやるのであれば、Copyメソッドは貼り付け先を直接指定できる(省略するとクリップボードにコピー)ので、No.1の回答では、
Sheets("Sheet1").Cells.Copy Sheets("Sheet2").Cells
Sheets("Sheet1").Cells.Copy Sheets("Sheet2").Cells(1, 1)
とSheet2のセル全体、あるいは左上のセルを指定してコピーしているのです。
ご親切、本当に感謝します。
ご指摘の通りです。コピー先にて、A1以外のセルが選択されていて、
結果、worksheets("ペースト先").paste がエラーになっていました。
どうしたって、ペースト先のシートをアクティブにしなければいけないのか!(A1を選択するために)、と先に進めないでいました。
皆様のお陰で、copy機能が持つ、destinationを使うことで、解決できる
ことがわかり、本当に感謝しています。
ありがとうございます。
No.4
- 回答日時:
こんにちは。
たとえば、
Sub Test()
'Sheets という使い方もあるのですが、Worksheets のほうがはっきりしています。
Worksheets("Sheet1").Cells.Copy
Worksheets("Sheet3").Paste
End Sub
で、コードは通るはずです。
>worksheets("ペースト先").paste 見たいなものと想像しましたが、だめでした。
自分は、そういうスタイルをあまり書かないだけであっても、それ自体に間違いは見出せません。
どうダメだったのか、実行時エラーでどういう反応をしたか、それが明らかでないと、Copy メソッドにDirection を入れても同じだと思います。おそらく、どこか、別のミスや見落としがあるはずです。たとえば、「インデックスが有効範囲ではありません」という場合、シート名が違っているとか、シート自体が存在しないとか、そういうことが原因ではないでしょうか?
ありがとうございます。
ペーストするシートにて、A1以外のセルが選択されていました。
皆様のお陰で、コピーに関することは、はっきりと理解できました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/03/25 08:33
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2023/03/12 12:16
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) エクセルVBAコピー 2 2022/06/08 21:45
- Visual Basic(VBA) Excel(VBA) 特定の条件に該当する行の値、書式を同じセルにコピ&ペーストしたいです 1 2022/05/21 18:18
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Evernote Simplenoteのコピー&ペースト 1 2022/05/17 14:09
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
- Excel(エクセル) エクセルのマクロについて教えてください。 3 2023/02/07 14:47
- Excel(エクセル) vba 転記するときの最終行について 2 2022/09/03 09:31
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル:マクロ「Application...
-
エクセルのアポストロフィを一...
-
エクセルで隣接していない複数...
-
エクセルで勝手に「折り返して...
-
メールソフト「サンダーバード...
-
エクセルの2ページ目の作り方
-
エクセルで値だけコピーして背...
-
フォームのテキストボックスの...
-
Excel 行の連続データを列に参...
-
Excelに、ダブルクォーテーショ...
-
「選択範囲を解除してアクティ...
-
エクセル 別シートへのコピー...
-
VBAでセルがコピーされているか...
-
行数の違う表に複数行をコピーする
-
EXCELシートをPowerPointにきれ...
-
エクセルで「コピーしたセルの...
-
Excel)軽いデーターのはずなの...
-
EXCEL数値が存在する列の項目名...
-
【excel】 書式なしで連続デー...
-
エクセル イコール式がコピー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル:マクロ「Application...
-
エクセルのアポストロフィを一...
-
エクセルで勝手に「折り返して...
-
エクセルで隣接していない複数...
-
Excel 行の連続データを列に参...
-
エクセルの2ページ目の作り方
-
メールソフト「サンダーバード...
-
Excelに、ダブルクォーテーショ...
-
エクセルで、選択範囲の数値全...
-
「選択範囲を解除してアクティ...
-
エクセルで「コピーしたセルの...
-
エクセル 別シートへのコピー...
-
エクセルで値だけコピーして背...
-
エクセルのコピペでクリップボ...
-
エクセルでの行数・列数を指定...
-
EXCEL数値が存在する列の項目名...
-
EXCELのオートフィルの設定を変...
-
行数の違う表に複数行をコピーする
-
Excelでコピーした行の挿入を繰...
-
エクセル コピーしたデータを1...
おすすめ情報