
エクセルバージン
マイクロソフト365
今回はコピーの貼り付けの形式について色々あるので解説していきたいと思います。
それではいってみましょう!
Menu
今回できること
コピペの際に使用するエクセルの標準機能にある「形式を選択して貼り付け」と一緒の動作をVBAで実現できます。

【表示方法】
下記の手順で「形式を選択して貼り付け」を表示できます。
コピー後 → 右クリック → 形式を選択して貼り付け

PasteSpecialメソッド

今回はRangeオブジェクトのメンバーであるPasteSpecialメソッドを使用して、コピーしたものを、指定した形式でペースト(貼り付け)します。
構文
PasteSpecial(Paste,Operation,SkipBlanks,Transpose)
戻り値
バリアント型
引数詳細
| 名前 | 必須/省略可 | データ型 | 説明 |
| Paste 第1引数 | 省略可 | XlPasteType | 貼り付けの形式(値貼り付けなど) (xlPasteAll や xlPasteValues など) |
| Operation 第2引数 | 省略可 | XlPasteSpecialOperation | 貼り付け操作(加算や減算など) (xlPasteSpecialOperationAdd など)。 |
| SkipBlanks 第3引数 | 省略可 | Variant | 既定値は False。 True → コピー元の空白のセルのみ、貼り付け先で貼付けされません。 |
| Transpose 第4引数 | 省略可 | Variant | 既定値は False。 True → 行と列を入替えて貼り付け。 |
XlPasteType(第1引数)
PasteSpecial(Paste,Operation,SkipBlanks,Transpose)
貼り付ける形式を指定できます。
引数を省略した場合は①xlPasteAllが適用されます。
【XlPasteType一覧】
| 名前 | 値 | 貼付けの形式 |
| ➀xlPasteAll | -4104 | すべて |
| ➁xlPasteFormulas | -4123 | 数式 |
| ➂xlPasteValues | -4163 | 値 |
| ➃xlPasteFormats | -4122 | 書式 |
| ➄xlPasteComments | -4144 | コメントとメモ |
| ➅xlPasteValidation | 6 | 入力規則 |
| ➆xlPasteAllUsingSourceTheme | 13 | コピー元のテーマで貼付け |
| ➇xlPasteAllExceptBorders | 7 | 罫線を除くすべて |
| ➈xlPasteColumnWidths | 8 | 列幅 |
| ➉xlPasteFormulasAndNumberFormats | 11 | 数式と数値の書式 |
| ⑪xlPasteValuesAndNumberFormats | 12 | 値と数値の書式 |
| ⑫xlPasteAllMergingConditionalFormats | 14 | すべての結合されている条件付き書式 |

VBAサンプル
【➂xlPasteValues】
値のみ貼付け
1 2 3 4 5 6 | Sub 値のみ貼付け() 'A1セルをコピー Range("A1").Copy 'B1セルに値のみ貼付け Range("B1").PasteSpecial xlPasteValues End Sub |
【実行前】

【実行後】
A1セルの値のみが、B1セルにコピペできます\(^^)/

※XlPasteType一覧から第1引数の値を変更してあげれば、その他の形式の貼り付けも簡単にできます。
XlPasteSpecialOperation(第2引数)
PasteSpecial(Paste,Operation,SkipBlanks,Transpose)
貼り付け先セルを使用して、数値の計算方法を指定できます。
引数を省略した場合は➀xlPasteSpecialOperationNoneが適用されます。
【XlPasteSpecialOperation一覧】
| 名前 | 値 | 説明 |
| ➀xlPasteSpecialOperationNone | -4142 | 貼り付け操作で計算は行われません。 |
| ➁xlPasteSpecialOperationAdd | 2 | 貼り付け先セルの値に加算。 |
| ➂xlPasteSpecialOperationSubtract | 3 | 貼り付け先セルの値から減算。 |
| ➃xlPasteSpecialOperationMultiply | 4 | 貼り付け先セルの値に乗算。 |
| ➄xlPasteSpecialOperationDivide | 5 | 貼り付け先セルの値を除算。 |

VBAサンプル
【➁xlPasteSpecialOperationAdd】
コピー元の値を貼付け先のセルの値に加算
1 2 3 4 5 6 | Sub 加算貼付け() 'A1セルをコピー Range("A1").Copy 'B1セルの値に加算 Range("B1").PasteSpecial xlPasteValues, xlPasteSpecialOperationAdd End Sub |
【実行前】

【実行後】
A1セルの値をコピーして、B1セル貼り付けると加算され20になります(*^^)v

※減算、乗算、除算も同じように、第2引数を変更してあげれば簡単にできます。
SkipBlanks(第3引数) 空白無視
PasteSpecial(Paste,Operation,SkipBlanks,Transpose)
コピー元の空白のセルのみ、貼付け先で貼付けされません。

VBAサンプル
第3引数のSkipBlanks:=Trueを記述します。
1 2 3 4 5 6 | Sub 空白無視() 'A1~A10セルをコピー Range("A1:A10").Copy 'C1セルに空白無視で貼付け Range("C1").PasteSpecial SkipBlanks:=True End Sub |
【SkipBlanks】
【実行前】

【実行後】
A列の赤のセルのみ、C列に貼り付けされます。

Transpose(第4引数) 行列入れ替え
PasteSpecial(Paste,Operation,SkipBlanks,Transpose)
行と列を入れ替えして、貼り付けすることができます。

VBAサンプル
【Transpose】
行と列を入れ替えて貼り付け。
第4引数のTranspose:=Trueを記述します。
1 2 3 4 5 6 | Sub 行列入れ替え貼付け() 'B1~F1セルをコピー Range("B1:F1").Copy 'A2セルに行と列を入れ替えて貼付け Range("A2").PasteSpecial xlPasteValues, Transpose:=True End Sub |
【実行前】

【実行後】
列から行にコピペされます(*^^)v

まとめ
実際の使用では圧倒的に値貼り付けが多いと思いますが、この機会に第1,2引数の一覧を見て、いろいろな形式のコピペを試してみてくださいね~(^O^)
以上です。
