VBA入門
セルのコピー&値の貼り付け(PasteSpecial)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
最終更新日:2021-09-07

第41回.セルのコピー&値の貼り付け(PasteSpecial)


値の貼り付けと題しましたが、値だけではなく、「形式を選択して貼り付け」のいろいろな指定方法です。


セルをコピーして、他のセルに「形式を選択して貼り付け」する場合のマクロVBAコードです。
セルの値や書式を別のセルにコピーすることはマクロVBAでは定番かつ必須の技術になります。


PasteSpecialメソッド

Range.PasteSpecial(Paste, Operation, SkipBlanks, Transpose)

名前 指定値 説明
Paste xlPasteAll すべてを貼り付けます。
xlPasteAllExceptBorders 輪郭以外のすべてを貼り付けます。
xlPasteAllMergingConditionalFormats すべてを貼り付け、条件付き書式をマージします。
xlPasteAllUsingSourceTheme ソースのテーマを使用してすべてを貼り付けます。
xlPasteColumnWidths コピーした列の幅を貼り付けます。
xlPasteComments コメントを貼り付けます。
xlPasteFormats 書式を貼り付けます。
xlPasteFormulas 数式を貼り付けます。
xlPasteFormulasAndNumberFormats 数式と数値の書式を貼り付けます。
xlPasteValidation 入力規則を貼り付けます。
xlPasteValues 値を貼り付けます。
xlPasteValuesAndNumberFormats 値と数値の書式を貼り付けます。
Operation xlPasteSpecialOperationAdd コピーしたデータは、対象セルの値に加算されます。
xlPasteSpecialOperationDivide コピーしたデータは、対象セルの値によって割り算されます。
xlPasteSpecialOperationMultiply コピーしたデータには、対象セルの値に掛け算されます。
xlPasteSpecialOperationSubtract コピーしたデータは、対象セルの値に引き算されます。
xlPasteSpecialOperationNone 貼り付け操作で計算は行われません。
SkipBlanks True / False クリップボードに含まれる空白のセルを貼り付けの対象にしないようにするには、True を指定します。
既定値は False です。
Transpose True / False 貼り付けのときにデータの行と列を入れ替えるには、True を指定します。
既定値は False です。

「形式を選択して貼り付け」の画面と対応させてみるようにしてください。

マクロ VBA コピー 値の貼り付け

値の貼り付け

Worksheets("Sheet1").Range("A1:B10").Copy
Worksheets("Sheet2").Range("A1").PasteSpecial _
                 Paste:=xlPasteValues, _
                 Operation:=xlNone, _
                 SkipBlanks:=False, _
                 Transpose:=False

値を貼り付ける場合は、VBAをこのように記述します。
前回のPasteとは違い、アクティブシート以外にも貼り付けが可能です
従って、
Paste:=xlPasteAll
これなら、セルの全てがコピーされるので、Pasteと同じ機能で別シートに貼り付け可能になります。


いろいろなコピーのVBAの書き方

Pasteを使って

Sheets("Sheet1").Select
Range("A1:B10").Copy
Sheets("Sheet2").Select
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False

Destinationを使って

Sheets("Sheet1").Range("A1:B10").Copy Destination:=Sheets("Sheet2").Range("A1")

PasteSpecialを使って

Sheets("Sheet1").Range("A1:B10").Copy
Sheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteAll


これら3つのVBAコードは、実行結果は同じになります。


PasteSpecialの使用例

Sheet1のA1:B10をコピーして、
Sheet2のA1に、行列を入れ替えて値を貼り付けします。

Worksheets("Sheet1").Range("A1:B10").Copy
Worksheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteValues, Transpose:=True

マクロVBAでよく使うものとしては、

Paste:=xlPasteValues ・・・ 値を貼り付け
Transpose:=True ・・・ 行と列を入れ替え

このあたりは、しっかり使えるようにしておきましょう。


最後に

マクロVBAで、セルのコピー&ペーストは必須になります。
セルの値・書式のコピペが登場しないマクロVBAの方が少ないと言っても過言ではないでしょう。

次回の、
第42回.セルをコピーするとは
・セルをコピーするとは ・上記方法ではコピーできないプロパティ ・.Valueのセル範囲間のコピー ・.Value以外の場合は、セル範囲をセル範囲にコピーは出来ません ・コピー方法の使い分け ・セルのコピー(Copyメソッド)実行時の注意点 ・最後に
こちらと合わせて、ぜひ、しっかりと覚えて下さい。




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

第37回.ブック・シートの指定
第39回.セルのクリア(Clear,ClearContents)
第40回.セルのコピー・カット&ペースト(Copy,Cut,Paste)
第41回.セルのコピー&値の貼り付け(PasteSpecial)
第42回.セルをコピーするとは
第43回.総合練習問題5
第44回.VBA関数について
第45回.VBA関数(Format)
第46回.VBA関数(日付,DateAdd)
第47回.VBA関数(文字列操作,Replace,InStr,StrConv)
第48回.VBA関数(その他,Fix,Int,Rnd,Round,IsEmpty)


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

TOROW関数(配列を横1行の配列にして返す)|エクセル入門(2022-10-31)
TOCOL関数(配列を縦1列の配列にして返す)|エクセル入門(2022-10-31)
CHOOSECOLS関数(配列から複数の指定された列を返す)|エクセル入門(2022-10-29)
CHOOSEROWS関数(配列から複数の指定された行を返す)|エクセル入門(2022-10-29)
WorksheetFunctionの効率的な使い方とスピル新関数の利用|VBA入門(2022-10-27)
VSTACK関数(配列を縦方向に順に追加・結合)|エクセル入門(2022-10-25)
HSTACK関数(配列を横方向に順に追加・結合)|エクセル入門(2022-10-25)
LAMBDA以降の新関数の問題と解説(配列操作関数編)|エクセル入門(2022-10-24)
LAMBDA以降の新関数の問題と解説(ヘルパー関数編)|エクセル入門(2022-10-24)
LAMBDA以降の新関数の問題集|エクセル入門(2022-10-24)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Excelショートカットキー一覧|Excelリファレンス
7.並べ替え(Sort)|VBA入門
8.マクロって何?VBAって何?|VBA入門
9.エクセルVBAでのシート指定方法|VBA技術解説
10.ExcelマクロVBAの基礎を学習する方法|エクセルの神髄




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


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



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