関数・メソッド

形式を選択して貼り付ける【PasteSpecialメソッド】

構文

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

Paste ・・・・・貼り付ける内容
Operation  ・・・【省略可能】演算して貼り付けするかどうか
SkipBlanks・・・【省略可能】True(空白セルを無視) False(空白セルを無視しない:規定値) 
Transpose ・・・【省略可能】True(行列を入れ替える) False(行列を入れ替えない:規定値)
ObjectはPasteメソッドと異なり、Rangeオブジェクトです。
その為、PasteメソッドよりPasteSpecialメソッドのが使いやすいです。

定数

区分 定数 内容
Paste xlPasteAll -4104 すべて貼付(規定値)
xlPasteFormulas -4123 数式を貼付
xlPasteValues -4163 値を貼付
xlPasteFormats -4122 書式を貼付
xlPasteComments -4144 コメントを貼付
xlPasteValidation 6 入力規則を貼付
xlPasteColumnWidths 8 列幅を貼付
xlPasteAllExceptBorders 7 罫線を除く全てを貼付
xlPasteAllMergingConditionalFormats 14 すべての結合されている
条件付き書式を貼付
xlPasteAllUsingSourceTheme 13 コピー元のテーマを
使用してすべて貼付
xlPasteFormulasAndNumberFormats 11 数式と数値の書式を貼付
xlPasteValuesAndNumberFormats 12 値と数値の書式を貼付
Operation xlPasteSpecialOperationNone -4142 計算しない(規定値)
xlPasteSpecialOperationAdd 2 加算する(+)
xlPasteSpecialOperationSubtract 3 減算する(-)
xlPasteSpecialOperationMultiply 4 乗算(掛け算)する(×)
xlPasteSpecialOperationDivide 5 徐算(割り算)する(÷)
SkipBlanks TRUE 空白を無視する
FALSE 空白を無視しない(規定値)
Transpose TRUE 行列を入れ替える
FALSE 行列を入れ替えない(規定値)

コードサンプル

Public Sub test()
    Range("A1").CurrentRegion.Copy  'A1の範囲の表をコピー
    
    '■基本処理
    Range("A20").PasteSpecial Paste:=xlPasteAll '全て貼り付け
    
    '■複数情報貼り付ける場合は複数回実施する必要あり
    Range("A20").PasteSpecial Paste:=xlPasteValues   '値で貼り付け
    Range("A20").PasteSpecial Paste:=xlPasteFormats   '書式の貼り付け
        
     '■空白は無視、行列を入れ替える(無視しても行列の空白を詰めるわけではない)
    Range("D20").PasteSpecial Paste:=xlPasteAll, SkipBlanks:=True, Transpose:=True
    
    '■空白は無視、行列を入れ替えない。既存の貼り付け先と今回のペーストを足し算する
    Range("D20").PasteSpecial Paste:=xlPasteAll, Operation:=xlPasteSpecialOperationAdd, SkipBlanks:=True, Transpose:=False
end sub

 

使い方例

上記定数で使用する頻度が高いのは、xlPasteValuesxlPasteFormatsでしょう。
エクセルの特性をくみ取り、値だけで反映するケース(xlPasteValues)や、
エクセルで作成したフォーマットを貼り付けるケース(xlPasteFormats)などで使用します。

注意をしないといけないのは、値を貼り付けを多用は禁物です。
通常値の反映は上記のPasteSpecialメソッドを使わず、セルへの代入で行う方が一般的です。

値の反映をコピペせず、計算する理由
スピードが遅く、マクロ処理に多大な時間がかかります。
あくまでもフォーマットの反映等に留めた方が良いと考えます。
詳細はこちらを参照ください。

関連記事

【VBA一覧】XlPasteType列挙 定数一覧
クリップボードの中身を貼り付ける【Pasteメソッド】※PasteSpecialがおすすめ
テンプレートシートの行幅をコピーする【ExcelVBA】
テンプレートシートの行幅をコピーする【ExcelVBA】

コメント

  1. 減算と除算逆ではないでしょうか

    • ありがとうございます。修正しました。