VBA再入門
セルのコピペ方法を知る(CopyとPaste、さらに)

マクロが覚えられないという初心者向けに理屈抜きのやさしい解説
公開日:2015-09-21 最終更新日:2020-09-26

第13回.セルのコピペ方法を知る(CopyとPaste、さらに)


エクセルVBAでは、セルをコピーして他のセルに貼付けることが頻繁にあります。
セルをコピーして貼り付け、
セルをコピーして値貼り付け、
セルをコピーして書式貼り付け、
等々です。
これらを必要に応じて、使い分ける必要があります。


シートでの実際の操作に照らして、コピーのVBAコードを見ていきます。
実際に、マクロの記録をして確認しましょう。

セルをコピーして貼り付け

・A1セルをコピー
・A2セルに貼付け
・ESCでコピー状態を解除


エクセル マクロ VBAコード

キーワードとしては、
.Copy ・・・ コピー
.Paste ・・・ 貼り付け

Application.CutCopyMode = False ・・・ コピー状態の解除

この自動記録されたマクロVBAの中で、
多くの場合セルのSelectは不要です。
しかし、貼り付け先(Paste)のセルは選択しておく必要があります。
従って、

エクセル マクロ VBAコード

これでセルのコピーが出来ます。

セルをコピーして値貼り付け

・A1セルをコピー
・A2セルに値貼付け
・ESCでコピー状態を解除


エクセル マクロ VBAコード
※画像の都合で、改行位置を変更しています。

キーワードとしては、
.Copy ・・・ コピー
.PasteSpecial ・・・ 形式を選択して貼り付け

Paste:=xlPasteValues ・・・ 値

この自動記録されたマクロVBAの中で、
前述のように、多くの場合セルのSelectは不要です。
形式を選択して貼り付け(PasteSpecial)では、貼り付け先のセルは選択しておく必要がありません。

さらに、
Operation:=xlNone
SkipBlanks:=False
Transpose:=False

この3つは、指定しない(指定を省略した)場合は、この指定と同じになりますので省略できます。
従って、

エクセル マクロ VBAコード

これで、値貼り付けが出来ます。

セルをコピーして書式貼り付け

・A1セルをコピー
・A2セルに書式貼付け
・ESCでコピー状態を解除


エクセル マクロ VBAコード
※画像の都合で、改行位置を変更しています。

キーワードとしては、
.Copy ・・・ コピー
.PasteSpecial ・・・ 形式を選択して貼り付け

Paste:=xlPasteFormats ・・・ 書式

この自動記録されたマクロVBAのなかで、
前述のように、多くの場合セルのSelectは不要です。
形式を選択して貼り付け(PasteSpecial)では、貼り付け先のセルは選択しておく必要がありません。

さらに、
Operation:=xlNone
SkipBlanks:=False
Transpose:=False

この3つは、指定しない(指定を省略した)場合は、この指定と同じになりますので省略できます。
従って、

エクセル マクロ VBAコード

これで、書式貼り付けが出来ます。

PasteSpecial(値貼り付け、書式貼り付け等)の細かい指定

以下の「形式を選択して貼り付け」画面と対比して考えると理解しやすくなります。
ショートカットはコピー後に、Ctrl + ALT + V

エクセル マクロ VBA参考画像

Paste ・・・ 貼り付け
Operation ・・・ 演算
SkipBlanks ・・・ 空白セルを無視する
Transpose ・・・ 行列を入れ替える


このように、それぞれに対応しています。
必要に応じて、マクロ記録を使って指定方法を調べれば良いです。

もっと簡単なコピペ方法はないものか

いずれも結構面倒、というか結構なVBAコードの行数が必要です。
ちょっと面倒・・・ですよね。
最もよく使う、

セルをコピーして貼り付け
セルをコピーして値貼り付け

この2つには、VBAにはもっと簡単な書き方があります。
順に紹介します。

もっと効率的な「セルをコピーして貼り付け」

手作業でもコピーの仕方は色々あります。
Ctrlキーを押したままで、選択セルの境界をドラッグしてコピーできますよね。

エクセル マクロ VBA参考画像
セルの境界にカーソルを当てて、
エクセル マクロ VBA参考画像

Ctrlキーを押したままドラッグ&ドロップ
この操作をマクロの記録をすると、

エクセル マクロ VBAコード

何やら、これまでとは全く違ったVBAコードになりました。

Destinationは、目的地、行き先という意味の英単語です。
つまり、貼り付け先を一緒に指定していることになります。

「形式を選択して貼り付け」する必要が無く、
セルを単純にコピーするなら、この書き方の方が簡単なのは言うまでもありません。
そして、
セル選択は省略できますし、
Destination:=
も省略できます
ので、

エクセル マクロ VBAコード

これだけでもコピーできてしまいます。
ただし、できればDestination:=は書いた方が見やすいかもしれませんね。
複数セルの範囲の場合は、
コピー元は正しくセル範囲を指定しますが、
コピー先は、先頭セルだけ指定すれば良いです、
これは、シート上で手作業でやる場合と同じです。

マクロならではの「値のコピー」

これは理屈抜きで、このように書けば値のみコピーできると覚えて下さい。

エクセル マクロ VBAコード

Range("A1")のValueプロパティを、Range("C3")のValueに入れています。
Range("A1").Valueでセルの値を取得し、Range("C3").Valueに設定しています。

これは、複数セルの範囲でもできます。

エクセル マクロ VBAコード
※画像の都合で改行しています。

この場合は、
.Value
を省略できません。


以前に.Valueについて、
セル(Range、Cells)にプロパティ(Value)を書かなければ、.Valueが省略されたことになると書きましたが、
この場合だけ(他にも省略できない場合はありますが)は、.Valueを省略できないので書き忘れないようにして下さい。
また、=の左辺(貼り付け先)と右辺(コピー元)は同じ大きさ(同じ行数列数)のセル範囲を指定する必要があります。
左辺が右辺より小さい場合は部分的にコピーされ、左辺が右辺より大きい場合は不足している部分が#N/Aとなります。

「セルのコピペ方法を知る」のまとめ

色々なコピー方法がありますが、
マクロVBAでは、最後に紹介した2つの書き方を覚えれば良いでしょう。
「形式を選択して貼り付け」は、必要な時にマクロの記録でいつでも調べられます。
セルのコピペ方法をまとめると、

セルのコピペ
コピー元.Copy Destination:=貼り付け先
※貼り付け先は先頭セルを指定。
値のコピー
貼り付け先.Value = コピー元.Value
※貼り付け先とコピー元は同じ大きさのセル範囲を指定

ExcelマクロVBA入門等の対応ページ

第40回.セルのコピー・カット&ペースト(Copy,Cut,Paste)
・セルをコピー(複写)する場合 ・セルを切り取る(移動する)場合 ・セル範囲のコピーについて ・別のシートにコピーする場合 ・アクティブシート以外へのコピー ・セルのコピーについてのサイト内参考ページ

第41回.セルのコピー&値の貼り付け(PasteSpecial)
・PasteSpecialメソッド ・値の貼り付け ・いろいろなコピーのVBAの書き方 ・PasteSpecialの使用例 ・最後に

第42回.セルをコピーするとは
・セルをコピーするとは ・上記方法ではコピーできないプロパティ ・.Valueのセル範囲間のコピー ・.Value以外の場合は、セル範囲をセル範囲にコピーは出来ません ・コピー方法の使い分け ・セルのコピー(Copyメソッド)実行時の注意点 ・最後に



同じテーマ「マクロVBA再入門」の記事

第10回.ワークシートの関数を使う(WorksheetFunction)
第11回.分からない事はエクセルに聞く(マクロの記録)
第12回.エクセルの言葉を理解する(オブジェクト、プロパティ、メソッド)
第13回.セルのコピペ方法を知る(CopyとPaste、さらに)
第14回.セルの書式を設定する(NumberFormatLocal,Font,Borders,Interior)
第15回.手作業で出来なければマクロは書けない
第16回.エクセルの機能を上手に使う
第17回.セルにブック・シートを指定する(Workbooks,Worksheets,With,Set)
第18回.シートをコピー・挿入・削除する(Worksheets,Copy,Add,Delete)
第19回.ブックを開く・閉じる・保存する(Workbooks,Open,Close,Save,SaveAs)
第20回.全てのシートに同じ事をする(For~Worksheets.Count)


新着記事NEW ・・・新着記事一覧を見る

ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ