このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

【VBA】PasteSpecialメソッドとエラー対策

2024年2月14日

今回はPasteSpecialメソッドの使い方とエラー対策を紹介します。

VBAにはPasteメソッドもあるのですが、数式や書式などの貼り付けをしたいときはPasteSpecialメソッドを使います。

形式を選択して貼り付け

PasteSpecialメソッドでは、この「形式を選択して貼り付け」と同じことができます。

また、Pasteメソッドと同じようにPasteSpecialメソッドもエラーが起きやすいので対策コードを紹介します。

VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

貼付け形式の指定する方法(PasteSpecialメソッド)

名前必須 / オプションデータ型説明
Paste省略可能XlPasteType貼り付ける範囲の部分 ( xlPasteAll や xlPasteValues など)。
Operation省略可能XlPasteSpecialOperationxlPasteSpecialOperationAdd などの貼り付け操作。
SkipBlanks省略可能Variant型True を 指定すると、クリップボードの範囲内の空白セルがコピー先の範囲に貼り付けされません。 既定値は False です。
Transpose省略可能Variant型範囲 を貼り付けるときに行と列を入れ替える場合は True。 既定値は False です。
PasteSpecialメソッドの引数

PasteSpecialメソッドの引数はこの4種類があります。

その中でも貼付け形式の指定にはPaste引数を指定します。

名前説明
xlPasteAll-4104すべてを貼り付けます。
xlPasteAllExceptBorders7輪郭以外のすべてを貼り付けます。
xlPasteAllMergingConditionalFormats14すべてを貼り付け、条件付き書式をマージします。
xlPasteAllUsingSourceTheme13ソースのテーマを使用してすべてを貼り付けます。
xlPasteColumnWidths8コピーした列の幅を貼り付けます。
xlPasteComments-4144コメントを貼り付けます。
xlPasteFormats-4122コピーしたソースの形式を貼り付けます。
xlPasteFormulas-4123数式を貼り付けます。
xlPasteFormulasAndNumberFormats11数式と数値の書式を貼り付けます。
xlPasteValidation6入力規則を貼り付けます。
xlPasteValues-4163値を貼り付けます。
xlPasteValuesAndNumberFormats12値と数値の書式を貼り付けます。
Paste引数に指定できる値

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メソッドのエラー対策としてはこのようなことができます。

エラー処理については下記記事をご覧ください。

《VBA上級者になりたい人へ》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。
この本を読み切れば間違いなくVBA上級者になれます。

VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

VBA

Posted by やろまい