VBAで形式を選択して貼り付けする方法|値・書式・数式の使い分け

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:=xlPasteValuesxlPasteValues が「値だけ貼り付け」を意味します。この部分を変えることで貼り付ける内容を指定できます。

よく使う貼り付けの種類は?

  • 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の違いは?

すべてをそのまま貼り付けたい場合は、CopyDestination を使う方が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).CopySheets("Sheet2").Cells(2,1).PasteSpecial Paste:=xlPasteValues の順に書きます。

CutCopyModeを解除しないとどうなる?

コピーしたセルの点線(マーチングアンツ)が残り続けます。見た目上の問題だけでなく、次の操作に影響することもあるので、処理の最後に Application.CutCopyMode = False を入れておくのがおすすめです。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール