VBAでの張り付けでなぜ「セルを指定+.Paste」はだめなのか?

このQ&Aのポイント
  • VBAでセルを指定して動作を行う方法を学んでいるが、張り付けの際にRange("A1").Pasteがエラーになる理由が分からない。
  • Copyメソッドを使用してセルをコピーすることはできるが、Pasteメソッドが存在しないため、エラーが発生する。
  • PasteSpecialメソッドを使用することで張り付けが可能であることが確認されている。
回答を見る
  • ベストアンサー

なぜ張り付けは、「セルを指定+.Paste」ではだ

なぜ張り付けは、「セルを指定+.Paste」ではだめなのでしょうか? VBAを勉強しているのですが セルを指定+メソッドで セルに対して動作ができると覚えていました。 例えば、 Range("A1").Copy もRange("A1")でセルを指定して、Copyメソッドを使っています。 しかし、張り付けに関しては、 Range("A1").Paste をすると、 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438)」 と言うエラーになってしまいます。 それに、 「 Range("A1")」を入力して、「.」を入力すると、ヒントが出ますが そこにCopyはあるけど、Pasteは出てきません。 Pasteは特別な扱いなのでしょうか? そもそもPasteはメソッドではないのでしょうか? ちなみに Sub test() Range("A1").Copy Range("A2").PasteSpecial End Sub なら問題なくできました。 どなたか Range("A1").Paste がエラーになる理由を教えてください。 ご回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

オブジェクトブラウザでpasteを検索して確認してみると、pasteはワークシートオブジェクト他の配下にあるメソッドであることが分かります。 正しい書き方その1) range("A1").copy range("A2").pastespecial 正しい書き方その2) range("A1").copy range("A2").select activesheet.paste 正しい書き方その3) range("A1").copy activesheet.paste destination:=range("A2") 正しい書き方その4) range("A1").copy destination:=range("A2") コピーするときは「これをコピーする」と指定してコピーしますが、貼り付ける際には「何がコピーされてきたのを」貼り付けようとしているのかは保証されない(たとえば「図形」をコピーしたのを貼りつけるのもpasteです)ので、シートなどで受ける設計になっていると考えるのが妥当です。

a32143223
質問者

お礼

ありがとうございました。大変参考になりました。

関連するQ&A

  • VBA Pasteで教えて下さい!

    Book1で指定したセル範囲(C2:C41)を Book2のSheet1の(AB4:AB43)とSheet2の(AU10:AU49)にペーストを行うに あたり、ボタン押下にて実行する下記コードをBook1に作成しましたが、 2番目のPasteで実行時エラー1004「アプリケーション定義または オブジェクト定義のエラーです」と出ます。 複数Sheetの別々のセルにペーストする方法を 教えていただけないでしょうか? Book1とBook2は共に開いた状態です。 Book2のシートは、それぞれVBAで保護をかけていますが、 .protect UserInterfaceOnly:=Trueで変更可能な状態に しています。 Private Sub copy_Click()  Range("C2:C41").Copy  Windows("Book2").Activate  Sheets("Sheet1").Range("AB4:AB43").PasteSpecial Paste:=xlPasteValues  Sheets("Sheet2").Range("AU10:AU49").PasteSpecial Paste:=xlPasteValues  (↑ここでエラーが出ます) End sub

  • 値の貼り付け

    Range("A1").Copy Range("B2").PasteSpecial Paste:=xlPasteAll, _ Operation:=xlPasteSpecialOperationNone 上記の値の貼り付けを行うプログラムがあったときに これを一行にまとめることは出来ますか? Range("A1").Copy Range("B2").PasteSpecial Paste:=xlPasteAll, _ Operation:=xlPasteSpecialOperationNone このように書くとエラーになってしまいます。 PasteSpecialがある時は一行にならないのでしょうか?

  • 助けてください!!VBA初心者なんですが、複数範囲をコピーして指定列に貼り付けたいのですが

    助けてください!!VBA初心者なんですが、複数範囲をコピーして指定列に貼り付けたいのですが、エラーが出てしまいます。 説明が下手なので図のようなもので 下図1  ABCDE 1あいうえお 2あいうえお 3あいうえお 4あいうえお 下図2  ABCDEFGHIJ 1あ い う  え お 2あ い う  え お 3あ い う  え お 4あ い う  え お まずは下図1のように下図2の様に指定した列に貼りたいのですが。 Range("A1:E5").Copy Range("A1,C1,E1,H1").PasteSpecial Paste:=xlValues でエラーになり別々にと考えて Range("A1:A5,B1:B5,C1:C5,D1:D5,E1:E5,").Copy Range("A1,C1,E1,H1").PasteSpecial Paste:=xlValues でも無理でした…なにかいい方法があれば教えてください。 単純に Range("A1:A5").Copy Range("A1").PasteSpecial Paste:=xlValues Range("B1:B5").Copy Range("C1").PasteSpecial Paste:=xlValues Range("C1:C5").Copy Range("E1").PasteSpecial Paste:=xlValues Range("D1:D5").Copy Range("H1").PasteSpecial Paste:=xlValues Range("E1:E5").Copy Range("a1").PasteSpecial Paste:=xlValues とするしかないんでしょうか? なにかいい方法があればお教えください!!

  • 値の貼り付けをするVBA

    セルA1をコピーして、セルA2に値の貼り付けをするVBAを作っています。 下記のように記述しているのですが、 セルA2に値の貼り付けをするときに小数点第3ケタ目以下はデータを捨てることは出来ますでしょうか? セルの設定で小数点2桁目まで表示するのではなくて、セルに入力するデータを小数点2桁の数字にしたいです。 range("A1").Copy Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

  • VBA初心者です。値を貼り付け について質問です。

    VBA初心者です。 値を貼り付け について教えてください。 Sub test() With Workbooks("A.xls").Worksheets("sheet1") .Range("A1").Copy Workbooks("Bxls").Worksheets("sheet1").Range("B2") .Range("A2").Copy Workbooks("B.xls").Worksheets("sheet1").Range("B4") End With End Sub コピーする方に計算式が入っているので 値を貼り付け したいのですが、どうすればいいのでしょうか? PasteSpecial Paste:=xlPasteValues を使ったらよいというところまではわかったのですが・・・。 教えてください!よろしくお願いします!

  • 指定セルをコピー

    A2~A5,D2~D5,G2~G5をコピーしJ~P列2~5行に値を貼付け続いて9~13行、16~20行もJ~P列に貼り付けたいのですが7~8,14~15行にはセル結合されているところもあります。VBAで下記コードを入力しましたがあまりにデータが多く何か良い方法VBAコードはありますか。(For~Nextなど使用すれば良いのでしょうか) 環境はoffice2013です。 Range("A2:A6").Select Selection.Copy Range("J2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("D2:D6").Select Selection.Copy Range("M2").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False  Application.CutCopyMode = False

  • Excel2000/VBA:値と書式のみ貼り付けたい。

    Excel2000のVBAで値と書式のみ貼り付けたいのですが、可能でしょうか。2Excel2003なら Range("A1:Y100").PasteSpecial Paste:=xlPasteValuesAndNumberFormats でうまくいくのですが、Excel2000だとエラーがでます。「Range クラスの PasteSpecial メソッドは、失敗しました」とでます。これが、Paste:=xlPasteValues ならちゃんと貼り付けできますのでコピー範囲がセレクトされていない原因のエラーではないようです。

  • VBA Copy/Paste メソッド

    エクセル2002使用です。 sheet1のA7からD19セルの値を sheet2のB列の一列に転記をしたいのですが、 コピーが上手くできません。 Copy、Pasteメソッドを使用するときの セルの選択が良くわからないのですが、 よろしくお願いします。 Sub tenki() Dim i As Integer Dim j As Integer For i = 7 To 19 For j = 1 To 4 Cells(i, j).Copy Worksheets("sheet2").Activate Range("B65536").End(xlUp).Select ActiveCell.past ←ここでエラー(注) Next j Next i End Sub (注) エラー  オブジェクトは、このプロパティーまたはメソッドをサポートしていません。

  • VBA 値のみ貼り付け

    VBAで質問です。 選択したセルへ他のセルをコピーして値のみを貼り付けしたいのですが、うまくできません。 貼り付け先のセルはその都度異なります。貼り付ける値は特定されたセルでその都度変わることはありません。  <例> A1の商品名は固定。ボタンを設けマクロを登録します。         A      B      C      D    1 商品あああ    2    3     4       ボタンを押すと選択したセルにA1の商品名が貼り付けされるようにしたい。       貼り付け先がA3と特定されている場合は以下の式でできますが、       選択するセルがその都度異なる場合はどうしたら良いのでしょうか?        Range("A1").Copy      Range("A3").PasteSpecial Paste:=xlValues       いい方法があれば教えてください。

  • エクセルのマクロ 選択したセルを指定した範囲へ値貼

    お世話になります。 自動記録したものをどのように修正したら、実行時に選択しているセルの値を、3行下、1つ左のセルから8行目までに貼り付けることができるよう書き変えられますでしょうか。 初心者で何に手を付けて良いのか分からず。どなたかご教示いただけませんでしょうか。どうぞよろしくお願い致します。 Sub 選択したセルを指定した範囲へ値貼り付け() ' ' Macro1 Macro ' ' Range("I9").Select Selection.Copy Range("H12:H19").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub

専門家に質問してみよう