【ExcelVBA・マクロ】PasteSpecial(形式を選択して貼り付け)完全ガイド|値のみ・書式のみ・演算貼り付けまで解説【コピペOK】

ExcelVBA

PasteSpecial(形式を選択して貼り付け)とは

セルをコピーして貼り付けるとき、「数式ではなく計算結果の値だけ貼り付けたい」「罫線や色などの書式だけコピーしたい」といった場面はよくあります。手作業なら「形式を選択して貼り付け」ダイアログを使いますが、VBAで自動化する場合はPasteSpecialメソッドを使います。

普通にRange.Copyで貼り付けると、数式・書式・罫線などすべてがそのままコピーされてしまいます。集計表のレイアウトを崩したくない場合や、他のシートの数式をそのまま持ち込みたくない場合には、PasteSpecialで貼り付ける形式を細かく指定することが重要です。この記事では、代表的な使い方を実例付きで解説します。

スポンサーリンク
スポンサーリンク

基本構文

PasteSpecialは、コピー元の範囲をCopyした後、貼り付け先の範囲に対して呼び出します。

コピー元.Copy
貼り付け先.PasteSpecial Paste:=貼り付ける形式

Paste引数には、xlPasteValues(値のみ)やxlPasteFormats(書式のみ)といった定数を指定します。主な定数は以下の通りです。

定数 説明
xlPasteAll すべて(通常の貼り付けと同じ)
xlPasteValues 値のみ
xlPasteFormats 書式のみ
xlPasteFormulas 数式のみ
xlPasteColumnWidths 列幅のみ
xlPasteValuesAndNumberFormats 値と表示形式

値だけを貼り付ける

数式の計算結果だけを別のセルに貼り付けたい場合はxlPasteValuesを使います。集計結果を別シートに数値として固定したいときによく使われます。

Sub PasteValuesOnly()

    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet

    Set wsSource = ThisWorkbook.Worksheets("集計元")
    Set wsTarget = ThisWorkbook.Worksheets("結果")

    wsSource.Range("A1:C10").Copy
    wsTarget.Range("A1").PasteSpecial Paste:=xlPasteValues

    Application.CutCopyMode = False

End Sub

Copyを実行するとExcelは「コピーモード」(点線で囲まれた状態)になります。貼り付け後はApplication.CutCopyMode = Falseでこの状態を解除しておくのがマナーです。解除しないと、次にユーザーが何か操作したときに「コピー中は実行できません」という警告が出ることがあります。

書式だけを貼り付ける

罫線や色、フォントなどの見た目だけをコピーしたい場合はxlPasteFormatsを使います。

Sub PasteFormatsOnly()

    Range("A1:D1").Copy
    Range("A10:D10").PasteSpecial Paste:=xlPasteFormats

    Application.CutCopyMode = False

End Sub

見出し行の書式を別の行にも適用したい、といった場面で活用できます。値や数式は変更されず、見た目だけがコピー元と同じになります。

演算を伴う貼り付け(一括計算)

PasteSpecialOperation引数を使うと、貼り付けと同時に四則演算を行うことができます。たとえば「すべてのセルの値を2倍にする」といった一括計算がワンステップで可能です。

Sub PasteWithMultiply()

    Dim rateCell As Range
    Set rateCell = Range("F1")
    rateCell.Value = 1.1 '10%増しにする係数

    rateCell.Copy
    Range("A1:A10").PasteSpecial Paste:=xlPasteValues, Operation:=xlPasteSpecialOperationMultiply

    Application.CutCopyMode = False

End Sub

このコードでは、F1セルに入力した1.1をコピーし、A1:A10の各セルに対して「かけ算」を行いながら貼り付けています。結果として、A1:A10の値がすべて1.1倍になります。Operation引数には他にもxlPasteSpecialOperationAdd(加算)、xlPasteSpecialOperationSubtract(減算)、xlPasteSpecialOperationDivide(除算)が指定できます。

行と列を入れ替えて貼り付ける(転置)

表の行と列を入れ替えて貼り付けたい場合は、Transpose:=Trueを指定します。

Sub PasteTransposed()

    Range("A1:A5").Copy
    Range("C1").PasteSpecial Paste:=xlPasteAll, Transpose:=True

    Application.CutCopyMode = False

End Sub

縦に並んだデータを横並びに変換したいときなど、レイアウト変更が一瞬で完了します。

PasteSpecialを使うメリットと注意点

Range.Value = Range.Valueという代入方式でも値だけをコピーすることは可能ですが、PasteSpecialには以下のようなメリットがあります。

  • 書式や列幅など、値以外の要素も個別に指定してコピーできる
  • Operation引数による一括計算ができる
  • Transposeによる行列入れ替えができる

一方で注意点もあります。

  • Copyしてから貼り付ける2ステップが必要Range.Value = Range.Valueのような1行では書けないため、コードがやや長くなります。
  • 貼り付け先が結合セルだとエラーになることがある:あらかじめ結合を解除しておくか、貼り付け先の構成を確認しておきましょう。
  • CutCopyModeの解除忘れ:解除し忘れると、コピー状態の点線が残ったままになり、ユーザーが混乱する原因になります。

まとめ

PasteSpecialメソッドを使うと、「値だけ」「書式だけ」「演算しながら」「行列を入れ替えて」など、通常のコピー&貼り付けでは難しい柔軟な貼り付け処理をVBAで自動化できます。

  • Paste引数で貼り付ける要素(値・書式・数式など)を指定する
  • Operation引数で貼り付けと同時に四則演算ができる
  • Transpose:=Trueで行と列を入れ替えて貼り付けられる
  • 貼り付け後はApplication.CutCopyMode = Falseを忘れずに実行する

集計表の作成や他シートへのデータ転記など、実務でよく使う場面が多いメソッドなので、ぜひ活用してみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
シェアする
いがぴをフォローする

コメント

タイトルとURLをコピーしました