第40回.セルのコピー・カット&ペースト(Copy,Cut,Paste)
あるセルをコピーまたはカットして、別のセルに貼り付けるマクロVBAの説明です。
セルをコピー(Ctrl+C)またはカット(Ctrl+X)して、他のセルに貼り付け(Ctrl+V後にESCまたはEnter)
これと同じ動作をするマクロVBAになります。
セルをコピー(複写)する場合
A1セルをB1セルにコピー貼り付けする場合
このように記述します。
Range("A1").Copy
これはA1セルをクリップボードにコピーします。
Range("B1").Select
ActiveSheet.Paste
アクティブシートのB1セルに貼り付けます。
Range("C1").Select
ActiveSheet.Paste
アクティブシートのC1セルに貼り付けます。
この記述方法ではアクティブシートのアクティブセル以外には、貼り付けできません。
Application.CutCopyMode = False
コピーモード(セルの周りが点々の状態)を解除します。
セル範囲を指定できます。
例."A1:C5"
あまり必要性は無いと思いますが、離れた複数箇所のセル範囲は基本的には指定できません。
例."A1:B10,C11:D20"
これについては、下で詳しく説明します。
Range("A1").Copy
Range("B1").Select
ActiveSheet.Paste
Range("C1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
このように記述します。
これはA1セルをクリップボードにコピーします。
ActiveSheet.Paste
アクティブシートのB1セルに貼り付けます。
ActiveSheet.Paste
アクティブシートのC1セルに貼り付けます。
この記述方法ではアクティブシートのアクティブセル以外には、貼り付けできません。
コピーモード(セルの周りが点々の状態)を解除します。
例."A1:C5"
例."A1:B10,C11:D20"
これについては、下で詳しく説明します。
セルを切り取る(移動する)場合
A1セルをB1セルにカット貼り付けする場合
Range("A1").Cut
A1セルを切り取りします。
Range("B1").Select
ActiveSheet.Paste
アクティブシートのB1セルに貼り付けます。
A1セルは、クリアされた(初期)状態になります。
Cutの場合はCopyと違い、Paste(貼り付け)した時点で、
コピーモード(セルの周りが点々の状態)が解除されます。
つまり、繰り返し貼り付けはできないという事になります。
セル範囲を指定できます。
例."A1:C5"
あまり必要性は無いと思いますが、離れた複数箇所のセル範囲は基本的には指定できません。
例."A1:B10,C11:D20"
これについては、下で詳しく説明します。
Range("A1").Cut
Range("B1").Select
ActiveSheet.Paste
Range("A1").Cut
A1セルを切り取りします。
ActiveSheet.Paste
アクティブシートのB1セルに貼り付けます。
A1セルは、クリアされた(初期)状態になります。
コピーモード(セルの周りが点々の状態)が解除されます。
つまり、繰り返し貼り付けはできないという事になります。
例."A1:C5"
例."A1:B10,C11:D20"
これについては、下で詳しく説明します。
セル範囲のコピーについて
Range("A1:B10").Copy ・・・ ○
Range("A1,B5").Copy ・・・ ×
Range("A1,B5,C10").Copy ・・・ ×
Range("A1:B10,C11:D20").Copy ・・・ ×
上記の×は実行できません。
複数のセル範囲(離れた場所にあるセル範囲)はCopyはできません。
例えば、
Range("A1:B10,D1:E10").Copy
これならコピーできます。
ただし、マクロで処理する場合は、
複数範囲なら複数回(VBAを複数行に分けて記述して)に分ければ良いので、
実際にマクロVBAで使う必要はないでしょう。
別のシートにコピーする場合
Range("A1").Copy
Sheets("シート名").Select
Range("B1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
このように、
シート選択すれば良い事は直ぐに理解できる事と思います。
いずれにしてもアクティブシートにしか貼り付けできないのは不便です。
以下のように書く事で、アクティブシート以外にもコピーできます。
アクティブシート以外へのコピー
Sheets("シート名1").Range("セル番地").Copy Destination:=Sheets("シート名2").Range("セル番地")
Destination:=
これは、名前付き引数です。
引数が1つなので、引数名は省略してもよいでしょう。
Copy Destinationの使用例
Sheets("Sheet1").Range("A1").Copy Sheets("Sheet2").Range("A1")
また、.Cutで切り取りも使用できます。
Sheets("Sheet1").Range("A1").Cut Sheets("Sheet2").Range("A1")
コピー方法は、アクティブシートへのコピーでも使えます。
従って、
マクロVBAでは、アクティブシート以外へのコピー
これだけを覚えて使用するようにすれば良いでしょう。
このDestinationを指定したマクロVBAのCopyは、
セルの境界をクリックし、Ctrlを押しながらドラッグ&ドロップ
この操作をマクロ記録した時のVBAコードになります。

セルの境界にマウスカーソルを当てると、

この形になります。
Ctrlを押すと下の形状になります。

Ctrlキーを押したままドラッグ&ドロップ
※ドロップの時点で、Ctrlが押されていればコピー、Ctrlが押されていなければ移動になります。
実際に「マクロの記録」で、いろいろなコピーのVBAコードを確認してみてください。
従って、
マクロVBAでは、アクティブシート以外へのコピー
Sheets("シート名1").Range("セル番地").Copy Destination:=Sheets("シート名2").Range("セル番地")
これだけを覚えて使用するようにすれば良いでしょう。
セルの境界をクリックし、Ctrlを押しながらドラッグ&ドロップ
この操作をマクロ記録した時のVBAコードになります。


この形になります。
Ctrlを押すと下の形状になります。

※ドロップの時点で、Ctrlが押されていればコピー、Ctrlが押されていなければ移動になります。
セルのコピーについてのサイト内参考ページ
以下も参考にしてください。
第13回.セルのコピペ方法を知る(CopyとPaste、さらに)|マクロVBA再入門
・セルをコピーして貼り付け ・セルをコピーして値貼り付け ・セルをコピーして書式貼り付け ・PasteSpecial(値貼り付け、書式貼り付け等)の細かい指定 ・もっと簡単なコピペ方法はないものか ・もっと効率的な「セルをコピーして貼り付け」 ・マクロならではの「値のコピー」 ・「セルのコピペ方法を知る」のまとめ ・ExcelマクロVBA入門等の対応ページ
第6回.別のシートにコピーする|マクロ記録でVBA前回作成した100マスを別のシートにコピーしてみましょう。ここでは、「Sheet1」に100マスがあり、それを「Sheet2」へコピーします。いまは、「Sheet1」が開いていて、セルA1がアクティブになっています。
同じテーマ「マクロVBA入門」の記事
・マクロVBA練習問題 ・シンキングタイム ・マクロVBA練習問題解答へ
第37回.ブック・シートの指定・マクロVBAでのブック・シート指定の具体例 ・マクロVBAでのブック・シート指定の必要性 ・VBAでの色々なシート指定方法
第39回.セルのクリア(Clear,ClearContents)・セル(Rangeオブジェクト)のクリア関係のメソッド(動作を与える) ・Range.Clear ・Range.ClearContents ・クリア関係メソッドについて
第40回.セルのコピー・カット&ペースト(Copy,Cut,Paste)第41回.セルのコピー&値の貼り付け(PasteSpecial)
・PasteSpecialメソッド ・値の貼り付け ・いろいろなコピーのVBAの書き方 ・PasteSpecialの使用例 ・最後に
第42回.セルをコピーするとは・セルをコピーするとは ・上記方法ではコピーできないプロパティ ・.Valueのセル範囲間のコピー ・.Value以外の場合は、セル範囲をセル範囲にコピーは出来ません ・コピー方法の使い分け ・セルのコピー(Copyメソッド)実行時の注意点 ・最後に
第43回.総合練習問題5・マクロVBA練習問題 ・シンキングタイム ・マクロVBA練習問題解答へ
第44回.VBA関数について・VBA関数の書き方 ・関数の戻り値を使わない場合 ・名前付き引数 ・○○○B関数 ・○○○$関数 ・ワークシート関数との関係 ・自動メンバ表示 ・習得すべき関数 ・最後に
第45回.VBA関数(Format)・Format関数 ・日付/時刻表示書式指定文字 ・数値表示書式指定文字 ・文字列表示書式指定文字 ・Format関数の使用例 ・※セルに出力する場合 ・最後に
第46回.VBA関数(日付,DateAdd)・日付時刻に関するVBA関数の一覧 ・DateAdd関数の構文 ・DateAdd関数の使用例
第47回.VBA関数(文字列操作,Replace,InStr,StrConv)・文字列操作に関するVBA関数の一覧 ・Replace関数 ・InStr関数 ・StrConv関数 ・最後に
新着記事NEW ・・・新着記事一覧を見る
イータ縮小ラムダ(eta reduced lambda)|エクセル入門(2023-11-20)
PIVOTBY関数(縦軸と横軸でグループ化して集計)|エクセル入門(2023-11-19)
GROUPBY関数(縦軸でグループ化して集計)|エクセル入門(2023-11-18)
PY関数(Pythonコードをセル内で実行)|エクセル入門(2023-11-17)
画像「セルに配置」のVBAについて(365の新機能)|VBA技術解説(2023-11-13)
スピルのゴーストの範囲を選択するVBA|ツイッター出題回答 (2023-10-31)
エクセル試験3:月間の所定労働時間|エクセル練習問題(2023-10-04)
エクセル試験2:所得税の計算|エクセル練習問題(2023-10-04)
エクセル試験1:曜日別の平均客単価|エクセル練習問題(2023-10-04)
列全体を指定する時のRangeとColumnsの違い|ツイッター出題回答 (2023-09-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.条件分岐(IF)|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。