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

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

第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:=xlPasteMarmats ・・・ 書式

この自動記録されたマクロ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)
あるセルをコピーまたはカットして、別のセルに貼り付けるVBAま説明です。セルを同じシートの別のセルにコピーしたり、セルを別のシートにコピーしたりするVBAになります。手作業で、セルをコピー(Ctrl+C)またはカット(Ctrl+X)して、他のセルに貼り付け(Ctrl+V後にESCまたはEnter) これと同じ動作をするVBAになります。

第41回.セルのコピー&値の貼り付け(PasteSpecial)
値の貼り付けと題しましたが、値だけではなく、「形式を選択して貼り付け」のいろいろな指定方法です。セルをコピーして、他のセルに「形式を選択して貼り付け」する場合のマクロVBAコードです。セルの値や書式を別のセルコピーすることはマクロVBAでは定番かつ必須の技術になります。

第42回.セルをコピーするとは
セルをコピーするとは、どういう事でしょうか… セルをコピーするというマクロVBAを少し掘り下げて考えることで、より実践的なマクロVBAコードを書くことが出来るようになります。コピーと一言で言っているものは、何のコピーを指しているのでしょうか。



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

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


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

import文(パッケージ・モジュールのインポート)|Python入門(9月24日)
例外処理(try文)とexception一覧|Python入門(9月23日)
リスト内包表記|Python入門(9月22日)
Pythonの引数は参照渡しだが・・・|Python入門(9月21日)
lambda(ラムダ式、無名関数)と三項演算子|Python入門(9月20日)
関数内関数(関数のネスト)とスコープ|Python入門(9月18日)
関数の定義(def文)と引数|Python入門(9月18日)
組み込み関数一覧|Python入門(9月17日)
辞書(dict型)|Python入門(9月16日)
入力規則への貼り付けを禁止する|VBA技術解説(9月16日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




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


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



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