やりたいこと
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