VBAで「形式を選択して貼り付け」を行うには、Copy でコピーした後に PasteSpecial を使います。値だけ・書式だけ・数式だけなど、貼り付ける内容を指定できるのが特徴です。
この記事では、次の内容を順番に解説します。
- PasteSpecialの基本の書き方
- よく使う貼り付けの種類と使い分け
- CopyのDestinationとの違い
PasteSpecialとは?
通常の貼り付けでは、値・書式・数式などすべてが一緒に貼り付けられます。PasteSpecial を使うと「値だけ」「書式だけ」など貼り付ける内容を指定できます。
手動操作の「コピー → 右クリック → 形式を選択して貼り付け」をVBAで行うイメージです。
注意点として、PasteSpecial は「コピー」した後にしか使えません。「切り取り」の後には使えません。
基本の書き方は?
' A2セルをコピーして、A3セルに値だけ貼り付ける
Cells(2, 1).Copy
Cells(3, 1).PasteSpecial Paste:=xlPasteValues
' コピーモードを解除する
Application.CutCopyMode = False
Paste:=xlPasteValues の xlPasteValues が「値だけ貼り付け」を意味します。この部分を変えることで貼り付ける内容を指定できます。
よく使う貼り付けの種類は?
- xlPasteValues:値だけを貼り付ける。数式の結果だけをコピーしたいときに使う。
- xlPasteFormats:書式だけを貼り付ける。背景色・文字色・フォントなどをコピーしたいときに使う。
- xlPasteFormulas:数式だけを貼り付ける。数式そのものをコピーしたいときに使う。
- xlPasteAll:値・書式・数式をすべて貼り付ける。通常の貼り付けと同じ。
' 書式だけを貼り付ける例
Cells(2, 1).Copy
Cells(3, 1).PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
' 数式だけを貼り付ける例
Cells(2, 1).Copy
Cells(3, 1).PasteSpecial Paste:=xlPasteFormulas
Application.CutCopyMode = False
CopyのDestinationとPasteSpecialの違いは?
すべてをそのまま貼り付けたい場合は、Copy の Destination を使う方が1行で済んでシンプルです。
' Destinationを使うと1行で書ける(すべてをそのまま貼り付け)
Cells(2, 1).Copy Destination:=Cells(3, 1)
値だけ・書式だけなど貼り付ける内容を指定したい場合は PasteSpecial を使います。
- すべてそのまま貼り付けたい:
Copy Destination:=を使う - 内容を指定して貼り付けたい:
PasteSpecial Paste:=を使う
まとめ
- 基本の流れ:
Copyでコピー →PasteSpecial Paste:=種類で貼り付け →CutCopyMode = Falseで解除。 - 値だけ:
xlPasteValues - 書式だけ:
xlPasteFormats - 数式だけ:
xlPasteFormulas - すべて:
Copy Destination:=の方がシンプル。
よくある質問
PasteSpecialを使うとエラーになる場合は?
コピー操作をせずにPasteSpecialを使うとエラーになります。必ず Copy の後に使ってください。また、別の操作(セルのクリックなど)をするとコピー状態が解除されてしまうので、CopyとPasteSpecialは続けて書くのが基本です。
罫線だけを貼り付けることはできる?
罫線だけを貼り付ける専用の定数はありません。xlPasteFormats を使うと罫線・背景色・文字色など書式全体がまとめて貼り付けられます。罫線だけを設定したい場合は、Borders プロパティを使って罫線を引く処理を書く方がシンプルです。
値貼り付けと数式貼り付けはどう使い分ける?
数式の計算結果だけを別のセルに固定したい場合は xlPasteValues(値貼り付け)を使います。数式そのものをコピーして別のセルでも計算させたい場合は xlPasteFormulas(数式貼り付け)を使います。
別のシートに値貼り付けするには?
コピー元とコピー先のシートをそれぞれ指定します。例:Sheets("Sheet1").Cells(2,1).Copy → Sheets("Sheet2").Cells(2,1).PasteSpecial Paste:=xlPasteValues の順に書きます。
CutCopyModeを解除しないとどうなる?
コピーしたセルの点線(マーチングアンツ)が残り続けます。見た目上の問題だけでなく、次の操作に影響することもあるので、処理の最後に Application.CutCopyMode = False を入れておくのがおすすめです。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



