HOME > 即効テクニック > Excel VBA > セル操作関連のテクニック > 【Excel VBA】形式を選択して貼り付ける(PasteSpecialメソッド)

【Excel VBA】形式を選択して貼り付ける(PasteSpecialメソッド)|Excel VBA

セル操作関連のテクニック

【Excel VBA】形式を選択して貼り付ける(PasteSpecialメソッド)

Excelで「コピー → 貼り付け」をすると、値・数式・書式などを全部まとめて貼り付けられます。しかし「値だけ貼り付けたい」「書式はそのままで数式は消したい」など、貼り付ける内容を選びたい場面もあります。そんなときに使えるのが、VBAのPasteSpecialメソッドです。例えば、以下のような用途で使用されます。
・計算式なしで値のみ貼り付けたい
・書式だけコピーして見た目を統一したい
・数式だけ転記して再利用したい

本記事では、実務でよく使われる「値のみ貼り付け」や「数式のみ貼り付け」などの形式を中心に、業務効率化につながる実践的なVBAテクニックを初心者にもわかりやすく解説します。

「形式を選択して貼り付け」とは

まず、Excelの機能について説明します。Excelでセルをコピーすると、[ホーム]タブの[クリップボード]に[貼り付け]ボタンが表示されます。[貼り付け]ボタンをクリックすると、貼り付けの方法を選択できるメニューが展開されます。

形式を選択して貼り付け

貼り付けメニューの対応表

貼り付け
貼り付け 数式 数式と数値の書式 元の書式を保持
罫線なし 元の列幅を保持 行/列の入れ替え
値の貼り付け
値と数値の書式 値と元の書式
その他の貼り付けオプション
書式設定 リンク貼り付け リンクされた図

PasteSpecialメソッドとは

さて、Excel VBAで「形式を選択して貼り付け」の機能を使用する場合は、PasteSpecialメソッドを使用します。通常のPasteメソッドではすべての情報(値・書式・数式など)が貼り付けられてしまいますが、PasteSpecialを使えば、貼り付ける内容を細かく制御できます。

PasteSpecialの基本構文

Rangeオブジェクトに対するPasteSpecialメソッドの構文は次のとおりです。

Range (“貼り付け先のセル範囲”).PasteSpecial _
     Paste :=(貼り付け内容[省略可能]),
     Operation :=(演算方法[省略可能]),
     SkipBlanks :=(空白セルを無視するか[省略可能]),
     Transpose :=(行列を入れ替えるか[省略可能])

よく使われる貼り付け対象と引数「Paste」に使用する定数との対応表

貼り付け対象 定数 説明
すべて Paste (※規定値)
値のみ xlPasteValues 数式を除いた値のみを貼り付けたいときに便利
データの整形やCSVファイル出力前の処理に最適
書式のみ xlPasteFormats 罫線や背景色などの書式を統一したい場合に便利
数式のみ xlPasteFormulas 関数や計算式をそのまま転記したいときに便利

よく使われる貼り付け形式ベスト3

値のみ貼り付け(xlPasteValues)

例:A1のセル領域をクリップボードにコピーして、B1に値を貼り付けします。

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

コピー元セル範囲の大きさと、貼り付け先セル範囲の大きさが同じ場合は、Valueを使用したほうが高速です。詳しくは「【Excel VBA】セルの値だけをコピーする」を参照してください。

書式のみ貼り付け(xlPasteFormats)

例:A1のセル領域をクリップボードにコピーして、C1に書式を貼り付けします。

Sub formats()
    Range("A1").Copy
    Range("C1").PasteSpecial Paste:=xlPasteFormats
    Application.CutCopyMode = False
End Sub

数式のみ貼り付け(xlPasteFormulas)

例:A1のセル領域をクリップボードにコピーして、D1に数式を貼り付けします。

Sub formulas()
    Range("A1").Copy
    Range("D1").PasteSpecial Paste:=xlPasteFormulas
    Application.CutCopyMode = False
End Sub

Application.CutCopyModeとは

コピー後の「点滅する枠線(マーキー)」を消すために「Application.CutCopyMode = False」を追加してコピー状態を解除しておくと、マクロ終了後にユーザーが誤って貼り付け操作をしてしまうリスクを防ぐことができます。

知っておくと便利な貼り付け形式

貼り付け対象 定数 説明
値と数値の書式 xlPasteValuesAndNumberFormats 値と数値の書式を同時に貼り付ける
数式と数値の書式 xlPasteFormulasAndNumberFormats 数式と数値の書式を同時に貼り付ける
入力規則 xlPasteValidation 入力規則(ドロップダウンなど)を貼り付ける
コメント xlPasteComments セルに付けたコメントを貼り付ける

Transpose引数で行と列を入れ替える方法

貼り付け形式の解説に加えて、Transpose引数を使って縦方向のデータを横方向に展開する方法を紹介します。行と列を入れ替えて貼り付けたい場合は、Transpose:=Trueを指定します。

例:A1:A12の縦方向に入力された「1月〜12月の売上」をC1から横方向に貼り付けて見やすくします。

Sub TransposeMonthly()
    Range("A1:A12").Copy
    Range("C1").PasteSpecial Transpose:=True
    Application.CutCopyMode = False		
End Sub

ここまで、PasteSpecialメソッドのいろいろな貼り付け方法をご紹介しました。
ただし、PasteSpecialメソッドが使用できない貼り付け方法もあります。PasteSpecialを使用できない「リンク貼り付け」については「【Excel VBA】セルに貼り付ける(Pasteメソッド)」を参照してください。

「Excel VBA」の即効テクニック人気記事