VBA開発

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

構文

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

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

定数

区分定数内容
PastexlPasteAll-4104すべて貼付(規定値)
xlPasteFormulas-4123数式を貼付
xlPasteValues-4163値を貼付
xlPasteFormats-4122書式を貼付
xlPasteComments-4144コメントを貼付
xlPasteValidation6入力規則を貼付
xlPasteColumnWidths8列幅を貼付
xlPasteAllExceptBorders7罫線を除く全てを貼付
xlPasteAllMergingConditionalFormats14すべての結合されている
条件付き書式を貼付
xlPasteAllUsingSourceTheme13コピー元のテーマを
使用してすべて貼付
xlPasteFormulasAndNumberFormats11数式と数値の書式を貼付
xlPasteValuesAndNumberFormats12値と数値の書式を貼付
OperationxlPasteSpecialOperationNone-4142計算しない(規定値)
xlPasteSpecialOperationAdd2加算する(+)
xlPasteSpecialOperationDivide5減算する(-)
xlPasteSpecialOperationMultiply4乗算(掛け算)する(×)
xlPasteSpecialOperationSubtract3徐算(割り算)する(÷)
SkipBlanksTRUE空白を無視する
FALSE空白を無視しない(規定値)
TransposeTRUE行列を入れ替える
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メソッドを使わず、セルへの代入で行う方が一般的です。

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

 

コメント

タイトルとURLをコピーしました