こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、VBAで形式を選択してコピーした値を張り付ける方法を知っていますか? コピーしたセルの値のみ使いたい場合、書式のみコピーしたい場合など形式を選択して貼り付けたいケースはよくありますよね。
PasteSpecialメソッドを使えば、簡単に形式を選択して貼り付けることができます。
そこで今回は、
- PasteSpecialメソッドの使い方
- PasteSpecialメソッドを使ったサンプルコード
- 合わせて覚えると便利なCopyメソッドの使い方
- VBAでコピペする方法3選
といった基礎的なことから、応用的な方法まで、徹底的に解説します!
PasteSpecialメソッドの使い方とは
はじめに、PasteSpecialメソッドの使い方について解説します。
PasteSpecialメソッドは次のように使います。
使い方:
Range("セル名").PasteSpecial(Paste, Operation, SkipBlanks, Transpose)
引数の使い方は表にまとめました。
| No | 引数 | 意味 |
|---|---|---|
| 1 | Paste | 貼り付ける方法を指定 |
| 2 | Operation | 演算して貼り付ける場合の演算方法を指定 |
| 3 | SkipBlanks | 空白セルを無視するか指定 |
| 4 | Transpose | 行列入れ替えを指定 |
Paste、Operationについては指定する値が多いため、それぞれ表にまとめています。
・Paste
| No | 値 | 意味 |
|---|---|---|
| 1 | xlPasteAll (規定値) | 全て |
| 2 | xlPasteFormulas | 数式 |
| 3 | xlPasteValues | 値 |
| 4 | xlPasteFormats | 書式 |
| 5 | xlPasteFormulasAndNumberFormats | 数式と数値の書式 |
| 6 | xlPasteValuesAndNumberFormats | 値と数値の書式 |
| 7 | xlPasteValidation | 入力規則 |
| 8 | xlPasteComments | コメント |
| 9 | xlPasteColumnWidths | 列幅 |
| 10 | xlPasteAllExceptBorders | 罫線を除く全て |
| 11 | xlPasteAllUsingSourceTheme | コピー元のテーマを使用してすべて貼り付け |
| 12 | xlPasteAllMergingConditionalFormats | すべての結合されている条件付き書式 |
・Operation
| No | 値 | 意味 |
|---|---|---|
| 1 | xlPasteSpecialOperationNone(既定) | しない(規定値) |
| 2 | xlPasteSpecialOperationAdd | 加算 |
| 3 | xlPasteSpecialOperationSubtract | 減算 |
| 4 | xlPasteSpecialOperationMultiply | 乗算 |
量が多くて覚えるのが難しいと感じるかもしれませんが、いきなりすべて覚える必要はありません。サンプルコードでPasteSpecialメソッドの使い方を一旦覚えてから、用途に応じて表を見て書き換えればOKです。
サンプルコード
次に、サンプルコードをもとに具体的な使い方を解説します。引数を1つ指定した場合、複数指定した場合のサンプルを用意しています。
実行前のセルのデータ:

サンプルコード:
Dim intFirstPasteVal As Integer
Dim intSecondPasteVal As Integer
Dim intThirdPasteVal As Integer
Range("A1").Copy
'1回目:値のみをA2セルに貼り付け
Range("A2").PasteSpecial Paste:=xlPasteValues
intFirstPasteVal = Range("A2").Value
'2回目:値を加算してをA2セルに貼り付け
Range("A2").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlPasteSpecialOperationAdd
intSecondPasteVal = Range("A2").Value
'3回目:書式のみをB3セル貼り付け
Range("B3").PasteSpecial Paste:=xlPasteFormats
intThirdPasteVal = Range("B3").Value
'メッセージでコピー後のセルの値を表示
MsgBox "1回目のコピー後のA2セルの値:" & intFirstPasteVal & vbCrLf & _
"2回目のコピー後のA2セルの値:" & intSecondPasteVal & vbCrLf & _
"3回目のコピー後のB3セルの値:" & intThirdPasteVal
'コピーモードを解除
Application.CutCopyMode = False
実行結果:

実行後のセルのデータ:

1回目のコピーでは、A1セルをA2セルにコピーしています。2回目のコピーでは、加算してコピーでA1セルの値をA2セルにコピーしているため、A2セルの値が20になっています。3回目のコピーでは、A1セルののみB3セルにコピーしています。このように、簡単に形式を選択して貼り付けることができます。
合わせて覚えると便利なCopyメソッドの使い方とは
ここまでPasteSpecialメソッドの使い方をメインに解説してきましたが、CopyメソッドはPasteSpecialメソッドを使う上で必須の知識なので、合わせて覚えておくのがおすすめです!
Copyメソッドを使用すると、そのセル範囲の情報を、クリップボード(一時的なデータの保存領域)へコピーすることができます。先ほどのサンプルでは、そうして取得した情報を、PasteSpecialメソッドを使用して貼り付けているわけですね!
Copyメソッドの使い方:
セル範囲.Copy
サンプルコード:
Sub Test()
Range("A1").Copy
End Sub
以下で詳しく解説しているので、ぜひ見てみてくださいね!
補足:VBAでコピペする方法3選
PasteSpecialメソッドは形式を選択して貼り付ける方法ですが、セルのデータをコピペする方法全部で3パターンあります。
方法1:
Sub Test()
'シートを選択
Worksheets("Sheet1").Select
'セルをコピペ
Range("A1").Copy
Range("A2").Select
ActiveSheet.Paste
'コピーモード解除
Application.CutCopyMode = False
End Sub
方法2:
Sub Test()
'セルをコピペ
Worksheets("Sheet1").Range("A1").Copy Destination:=Worksheets("Sheet1").Range("A2")
'コピーモード解除
Application.CutCopyMode = False
End Sub
方法3:
Sub Test()
'セルのコピペ
Worksheets("Sheet1").Range("A1").Copy
Worksheets("Sheet1").Range("A2").PasteSpecial Paste:=xlPasteAll
'コピーモード解除
Application.CutCopyMode = False
End Sub
全てA1セルのデータをA2セルにコピーする処理ですが、一番速度が速い方法が「方法2」なので、形式を選択してコピーしない場合は「方法2」を使うのがおすすめです!
ちなみに、処理速度の確認方法は以下で詳しく解説しているので、気になる方は見てみてくださいね!
まとめ
今回は、VBAでPasteSpecialメソッドを使ってセルのデータを張り付ける方法について解説しました。形式を選択して貼り付けるケースはよくあります。SpecialPasteメソッドの使い方は簡単なので、ぜひ使ってみてくださいね!






