MENU

【完全ガイド】VBAのPasteSpecialの使い方|値・書式・列幅の貼り付けを自在に操る!

VBAでコピー&ペーストをする際、「値だけ貼りたい」「見た目だけコピーしたい」「列幅も揃えたい」と思ったことはありませんか?

そんな細かい要望を一気に解決してくれるのが、PasteSpecialメソッドです。

この記事では、初心者でもわかる基本構文から、よく使うオプション、実践例、よくあるエラーまでを丁寧に解説します。

目次

PasteSpecialとは?

PasteSpecialは、VBAでコピーした内容を“選択的に”貼り付けるためのメソッドです。通常の .Paste では全てのデータ(値、書式、数式など)が一括で貼り付けられますが、PasteSpecialを使えば、貼りたい情報だけを選択できます。

PasteSpecialの基本構文

Range("貼り付け先のセル範囲").PasteSpecial Paste:=xlPasteType
  • 貼り付け先のセル範囲:貼り付けたいセルの場所(例:Range("B1")
  • xlPasteType:貼り付ける内容の種類(例:xlPasteValues

この構文を理解しておけば、あとはオプションを変えるだけで自由自在です。

よく使うPasteSpecialオプション一覧

PasteSpecial メソッドには、以下のような様々な貼り付けオプションがあります。

定数名意味用途の例
xlPasteAll すべて貼り付け通常の貼り付け(すべてコピー)
xlPasteValues値のみ貼り付け計算結果だけを貼りたいとき
xlPasteFormats書式のみ貼り付けフォントや背景色をコピーしたいとき
xlPasteFormulas数式のみ貼り付け数式だけを貼りたいとき
xlPasteCommentsコメントのみ貼り付けメモ(コメント)だけをコピーしたいとき
xlPasteValidation入力規則のみ貼り付けプルダウンや入力制限をコピー
xlPasteColumnWidths列幅だけを貼り付け表の幅を同じに揃えたいとき

貼り付け例:目的別コードサンプル集

以下に、各貼り付けオプションの使用例を示します。

値だけを貼り付ける

Sub PasteOnlyValues()
    Range("A1:A10").Copy
    Range("B1").PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
End Sub

セルに組み込んでいる数式や、セル書式はコピーしたくないけど値だけを転記したいときに便利です。

書式のみを貼り付ける

Sub PasteOnlyFormats()
    Range("A1:A10").Copy
    Range("B1").PasteSpecial Paste:=xlPasteFormats
    Application.CutCopyMode = False
End Sub

見た目を揃えたい時などに有効な方法です。

数式のみを貼り付ける

Sub PasteOnlyFormulas()
    Range("A1:A10").Copy
    Range("B1").PasteSpecial Paste:=xlPasteFormulas
    Application.CutCopyMode = False
End Sub

セルに組み込んでいる数式をコピーしたい場合に便利です。

コメントだけを貼り付ける

Sub PasteOnlyComments()
    Range("A1:A10").Copy
    Range("B1").PasteSpecial Paste:=xlPasteComments
    Application.CutCopyMode = False
End Sub

セルのメモとして残している注意書き等を転記できます。

入力規則だけを貼り付ける(プルダウンなど)

Sub PasteOnlyValidation()
    Range("A1:A10").Copy
    Range("B1").PasteSpecial Paste:=xlPasteValidation
    Application.CutCopyMode = False
End Sub

セルに設定したプルダウンリスト等を引き継いで使用したい場合に便利です。

列幅のみを貼り付ける

Sub PasteOnlyColumnWidths()
    Range("A1:A10").Copy
    Range("B1").PasteSpecial Paste:=xlPasteColumnWidths
    Application.CutCopyMode = False
End Sub

同じ列幅を引き継いで、表の見た目を崩さずにコピーすることができます。

応用例:複数の貼り付けオプションを組み合わせる

PasteSpecial メソッドは複数のオプションを組み合わせて使用することも可能です。例えば、値と書式を一緒に貼り付けたい場合は、以下のようにします。

Sub PasteValuesAndFormats()
    Range("A1:A10").Copy
    With Range("B1")
        .PasteSpecial Paste:=xlPasteValues
        .PasteSpecial Paste:=xlPasteFormats
    End With
    Application.CutCopyMode = False
End Sub

これで「見た目はそのまま」「数式はなし」の状態を再現できます。

よくあるエラーと対処法

エラー:PasteSpecial メソッドは失敗しました

  • 原因:コピー元が正しく選ばれていない
  • 対処法:事前に .Copy を実行してから .PasteSpecial を使う必要があります

対策コード例

If Application.CutCopyMode = False Then
    MsgBox "コピー処理が行われていません。"
    Exit Sub
End If

セルをコピーしている状態かどうかを判定するコードです。

そもそもですが、貼り付けを実行する前にはコピー処理を記述していることを確認しましょう。

まとめ

  • データ整形や帳票作成がスムーズに
  • フォーマットや入力規則を再利用可能
  • 作業の自動化に不可欠なテクニック

PasteSpecial メソッドを使うことで、エクセルマクロでデータを柔軟に貼り付けることができます。値のみ、書式のみ、数式のみなど、様々なオプションを駆使して、必要に応じた貼り付け処理を実現しましょう。この記事を参考にして、PasteSpecial の使い分け方をマスターし、効率的なデータ操作を行ってください。

この記事を書いた人

めんどくさがりでズボラ。
某自動車メーカーで、VBAやRPAを用いた業務効率化を行っております。

目次