[VBA]PasteとPasteSpecialの整理

やりたいこと

PasteとPasteSpecialを利用する際に、いまだにSheetのメソッドなのかRangeのメソッドなのかわからなくなるため整理する。

 

Paste

利用できるオブジェクト

・Sheetオブジェクトにはpasteメソッドがある。
・Rangeオブジェクトにはpasteメソッドがない。Parseというものすごくややこしいメソッドがあるが別物である。

貼り付けられるデータ

・Sheet.Range.Copyでコピーした領域を張り付けることができる。
・テキストファイル内のテキストやWebサイト中のテキストも貼り付けることができる。

テキスト情報のみの貼り付け

・できない(コピー元の書式が適用される)

 

PasteSpecial

利用できるオブジェクト

・SheetオブジェクトにはpasteSpecialメソッドがある。
・現在のシートが選択状態でなければならない(ws.Activate
・アクティブセルが貼り付け対象となる(ws.Range("A20").Select
・テキストのみ張り付ける場合、Format:="Unicode テキスト"を指定する。(環境によって値が変わるかも?)
・指定できるフォーマットの全量については公式HPにも載っておらず。

Public Sub WorksheetPaste()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    ws.Activate
    ws.Range("A20").Select
    ws.PasteSpecial Format:="Unicode テキスト"
End Sub

・RangeオブジェクトにはpasteSpecialメソッドがある。
・エクセル内で事前に.Copyされた情報しか貼り付けできない。
・指定できるフォーマットは公式HPに載っている。値のみであれば(xlPasteValues)

まとめ

エクセル外の情報を貼り付けたい。→ Sheet.Paste or Sheet.PasteSpecial
エクセルの情報を貼り付けたい。   → Range.PasteSpecial