【VBA】PasteSpecialメソッドとエラー対策
今回はPasteSpecialメソッドの使い方とエラー対策を紹介します。
VBAにはPasteメソッドもあるのですが、数式や書式などの貼り付けをしたいときはPasteSpecialメソッドを使います。
PasteSpecialメソッドでは、この「形式を選択して貼り付け」と同じことができます。
また、Pasteメソッドと同じようにPasteSpecialメソッドもエラーが起きやすいので対策コードを紹介します。
貼付け形式の指定する方法(PasteSpecialメソッド)
名前 | 必須 / オプション | データ型 | 説明 |
---|---|---|---|
Paste | 省略可能 | XlPasteType | 貼り付ける範囲の部分 ( xlPasteAll や xlPasteValues など)。 |
Operation | 省略可能 | XlPasteSpecialOperation | xlPasteSpecialOperationAdd などの貼り付け操作。 |
SkipBlanks | 省略可能 | Variant型 | True を 指定すると、クリップボードの範囲内の空白セルがコピー先の範囲に貼り付けされません。 既定値は False です。 |
Transpose | 省略可能 | Variant型 | 範囲 を貼り付けるときに行と列を入れ替える場合は True。 既定値は False です。 |
PasteSpecialメソッドの引数はこの4種類があります。
その中でも貼付け形式の指定にはPaste引数を指定します。
名前 | 値 | 説明 |
---|---|---|
xlPasteAll | -4104 | すべてを貼り付けます。 |
xlPasteAllExceptBorders | 7 | 輪郭以外のすべてを貼り付けます。 |
xlPasteAllMergingConditionalFormats | 14 | すべてを貼り付け、条件付き書式をマージします。 |
xlPasteAllUsingSourceTheme | 13 | ソースのテーマを使用してすべてを貼り付けます。 |
xlPasteColumnWidths | 8 | コピーした列の幅を貼り付けます。 |
xlPasteComments | -4144 | コメントを貼り付けます。 |
xlPasteFormats | -4122 | コピーしたソースの形式を貼り付けます。 |
xlPasteFormulas | -4123 | 数式を貼り付けます。 |
xlPasteFormulasAndNumberFormats | 11 | 数式と数値の書式を貼り付けます。 |
xlPasteValidation | 6 | 入力規則を貼り付けます。 |
xlPasteValues | -4163 | 値を貼り付けます。 |
xlPasteValuesAndNumberFormats | 12 | 値と数値の書式を貼り付けます。 |
Paste引数に指定できるのは12種類で、これを指定することで数式や書式などの貼り付けができます。
Sub Sample1()
Range("A1").Copy
Range("A2").PasteSpecial Paste:=xlPasteFormulas
End Sub
例えばこのように指定すると、数式の貼り付けができます。
PasteSpecialメソッドのエラー対策
PasteSpecialメソッドはPasteメソッドと同じくエラーが発生しやすいです。
ちなみに、Pasteメソッドであれば↓の方法でエラー対策できます。
PasteSpecialメソッドはこの方法ではエラー回避できないので、少し工夫して対策する必要があります。
Sub Sample2()
'''On Error Resume Nextで対策
On Error Resume Next 'エラーを無視
Dim i As Long
For i = 1 To 5
'コピペ処理
Range("A1").Copy
Range("A2").PasteSpecial Paste:=xlPasteFormulas
'エラーなしならループを抜ける
If Err.Number = 0 Then Exit For
'5回失敗したら強制終了
If i = 5 Then Exit Sub
'エラーナンバーを戻す
Err.Number = 0
Next
On Error GoTo 0 'エラー無視の終了
End Sub
一例となりますが、PasteSpecialメソッドのエラー対策としてはこのようなことができます。
このコードではOn Error Resume Nextを使うことで、エラーが起こっても無視するようにしています。
そして、エラーが発生したらもう一度コピペをし直しています。
PasteSpecialメソッドでエラーが発生したら、もう一度やり直します。
うまくいけば処理が進みますし、5回連続でエラーとなったら処理を強制終了するようにしています。
あくまで一例ですが、PasteSpecialメソッドのエラー対策としてはこのようなことができます。
エラー処理については下記記事をご覧ください。