Excel VBA | 超初心者(Excel操作+マクロ体験):Excelオブジェクト基礎 - Paste

Excel VBA VBA
スポンサーリンク

Paste は「クリップボードにあるものを“今ここに貼り付ける”動き」

まずイメージから。
Paste は「コピーされた内容(クリップボードの中身)を、指定した場所に貼り付ける動き」です。

手作業でやっている
「範囲をコピー → 貼り付け先をクリック → Ctrl+V」
これを VBA でやるときに登場します。

ただ、VBA では「Paste というメソッド単体」よりも、

  • Range.Copy(コピーする)
  • Range.PasteSpecial(貼り付ける)
  • もしくは Range.Copy Destination:=...(コピーと貼り付けを一気にやる)

という形で使うのが基本になります。


一番素直な流れ:「コピー → 貼り付け」のコード

クリップボードを使ったコピー&貼り付け

手作業に近い書き方から見てみます。

Sub SamplePasteBasic()

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("入力")

    ' コピー(クリップボードに乗る)
    ws.Range("A1:C3").Copy

    ' 貼り付け(E1 を左上として貼り付け)
    ws.Range("E1").PasteSpecial

End Sub
VB

流れとしては、

A1:C3 を Copy でクリップボードに乗せる
E1 を左上とする位置に PasteSpecial で貼り付ける

という動きです。

ここでのポイントは、

「Paste は“クリップボードに何かがある”ことが前提」
「貼り付け先は Range を指定して、そこに対して PasteSpecial を呼ぶ」

ということです。


でも本音を言うと:Paste より「Copy Destination:=」を基本にしてほしい

クリップボードを使わない書き方(おすすめ)

実務的で安定するのは、こちらの書き方です。

Sub SampleCopyDestination()

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("入力")

    ws.Range("A1:C3").Copy Destination:=ws.Range("E1")

End Sub
VB

これは、

コピー元:ws.Range("A1:C3")
コピー先:Destination:=ws.Range("E1")

を一気に指定しているので、
「コピー → 貼り付け」を1行で完結させています。

この書き方のメリットは、

クリップボードを意識しなくていい
ユーザーの Ctrl+C / Ctrl+V と干渉しにくい
コードの意図が「どこからどこへ」で一目で分かる

という点です。

超初心者のうちは、
「Paste を直接使うより、まずは Copy Destination を標準にする」
と決めてしまった方が、結果的に安全でシンプルになります。


それでも Paste を使う場面を知っておきたい場合

Worksheet.Paste を使う書き方

古い書き方ですが、こういうコードも見かけます。

Sub SampleWorksheetPaste()

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("入力")

    ws.Range("A1:C3").Copy

    ws.Range("E1").Select
    ws.Paste

End Sub
VB

これは、

A1:C3 をコピー
E1 を選択
そのシートの Paste メソッドで貼り付け

という流れです。

ただし、この書き方には弱点があります。

Select に依存している
アクティブセルやユーザー操作の影響を受けやすい
画面のチラつきや、意図しない場所への貼り付けリスクがある

なので、学習として「こういう書き方もある」と知っておく程度にして、
自分で書くときは極力避けるのがおすすめです。


PasteSpecial で「貼り付け方」を変える

値だけ貼り付ける例

Paste を語るなら、PasteSpecial は外せません。
「値だけ貼り付けたい」典型パターンです。

Sub SamplePasteValues()

    Dim ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("入力")

    ws.Range("A1:C3").Copy
    ws.Range("E1").PasteSpecial xlPasteValues

End Sub
VB

ここでは、

コピー元の値・数式・書式などをコピー
貼り付け先では「値だけ」を貼り付け

という動きになります。

「数式はコピーしたくない」「計算結果だけを別の場所に残したい」
というときに、PasteSpecial の出番です。

書式だけ貼り付ける例

ws.Range("A1:C3").Copy
ws.Range("E1").PasteSpecial xlPasteFormats
VB

これは、「見た目(色・罫線・フォントなど)だけ」を貼り付けます。
「この表と同じ見た目にしたい」というときに使えます。


Paste(貼り付け)を使うときに意識してほしい重要ポイント

できるだけ「アクティブ状態」に頼らない

避けたいパターンの典型です。

Range("A1:C3").Copy
Range("E1").Select
ActiveSheet.Paste
VB

これは、

どのシートかが曖昧
Select と ActiveSheet に依存している
ユーザーが途中で別シートをクリックすると、貼り付け先が変わる

という理由で、バグの温床になりがちです。

超初心者のうちから、

どのシートか → Worksheets(“名前”)
どの範囲か → Range(“A1:C3”)
どこへ → Destination:=Range(“…”)

という「全部を明示する」スタイルを体に染み込ませておくと、
Paste 周りのトラブルがかなり減ります。

「本当に Paste が必要か?」を一度立ち止まって考える

多くの場合、
「コピーしてすぐ貼り付ける」だけなら、Paste を意識する必要はありません。

Range("A1:C3").Copy Destination:=Range("E1")
VB

この1行で済むなら、それが一番シンプルで安全です。

Paste や PasteSpecial を使うのは、

値だけ貼り付けたい
書式だけ貼り付けたい
特殊な貼り付け(行列の入れ替えなど)をしたい

といった、「貼り付け方を変えたい」ときに限る、くらいの感覚でちょうどいいです。


まとめ:Paste は「クリップボードの中身をどう貼るか」を決める動き

Paste(と PasteSpecial)の本質は、

「Copy でクリップボードに乗った内容を、どこに・どのように貼り付けるかを指定する」

ことです。

押さえておきたいポイントをコンパクトにまとめると、

基本は Range.Copy Destination:=... で、Paste を意識しない書き方が安全
クリップボードを使う場合は、Range.PasteSpecial で貼り付け先と貼り付け方を指定する
値だけ・書式だけなど、貼り付け方を変えたいときに PasteSpecial が活躍する
Select や ActiveSheet に頼らず、「どのシートのどの範囲か」を毎回はっきり書く

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