ExcelやVBAではコピペは必須項目ですよね。
コピーした内容をペーストしようとして Paste メソッドを使用したときに「実行時エラー’438’オブジェクトは、このプロパティまたはメソッドをサポートしていません。」が発生してしまい途方に暮れる人も多いはずです。
今回は、Pasteを使って「エラー’438’オブジェクトは・・・」になるときの対処方法について徹底的に説明していきます。
Pasteを使って「エラー’438’オブジェクトは・・・」になるときの対処方法
Pasteメソッドを使えば貼り付けできるはずなのに・・・原因は以下の項目で解説していきます。
Pasteを使って「エラー’438’」になる原因
「エラー’438’オブジェクトは・・・」は、オブジェクトに対して存在しないプロパティやメソッドを使用したときに発生します。
それを踏まえて、Pasteメソッドを使って「エラー’438’オブジェクトは・・・」になる原因は、以下のことが考えられます。
- Select メソッドを使っていない
- Paste メソッドと PasteSpecial メソッドを混同して使っている
以下に少し詳しく説明します。
Select メソッドを使っていない
これは Pasteメソッドを使う際に、よくある間違いです。
Pasteメソッドを使う前に、Selectメソッドを使ってデータの貼り付け先を選択する必要があります。
なぜなら、Paste メソッドは、ワークシートオブジェクトに付随するメソッドなので、あくまで「ワークシートに貼り付ける(※セルに貼り付けるわけではない!)」という動作をするからです。
つまり、Pasteメソッドは、「ワークシート」を選択して貼り付けることができても、「セル」を選択して貼り付けることはできないのです。
したがって、Pasteメソッドを使う前に、あらかじめSelectメソッドを使ってセルを選択する必要があるのです。
Paste メソッドと PasteSpecial メソッドを混同して使っている
これもよくある間違いです。
PasteメソッドとPasteSpecialメソッドは、どちらもコピペに使うメソッドであり、スペルも似ているため、大きな差異が無いと思ってしまいがちですが、両者には決定的な違いがあります。
それは、
Pasteメソッド ・・・ WorkSheetオブジェクトのメソッド
PasteSpecialメソッド ・・・ Rangeオブジェクトのメソッド
ということです。
つまり、あるデータをコピペする際に、PasteSpecialメソッドはセルに貼り付けすることができる一方で、Pasteメソッドはあくまでワークシートに貼り付ける動作になります。(厳密には、Pasteメソッドでセルに貼り付けすることもできますが。。。)
それに伴い両者の構文・記述方法は異なりますので、PasteメソッドとPasteSpecialメソッドを同じものとして使うことはできないのです。
「エラー’438’」の対処方法
以上の原因を踏まえた上で、Pasteメソッドを使って「セルA1の値をセルA2にコピペする」という動作の正しい記述方法は、以下の2通りがあります。
記述方法1:
Range("A1").Copy
Range("A2").Select
ActiveSheet.Paste
記述方法2:
Range("A1").Copy
ActiveSheet.Paste Destination:=Range("A2")
参考で、PasteSpecialメソッドを使った場合(記述方法3)、Copyメソッドだけでコピペする場合(記述方法4)も紹介します。
記述方法3(PasteSpecialメソッドを使った場合):
Range("A1").Copy
Range("A2").PasteSpecial
記述方法4(Copyメソッドだけでコピペする場合):
Range("A1").Copy Destination:=Range("A2")
【まとめ】Pasteを使って「エラー’438’オブジェクトは・・・」になるときの対処方法
Pasteメソッドを使って「エラー’438’」になる原因は、以下のとおりです。
- Select メソッドを使っていない
- Paste メソッドと PasteSpecial メソッドを混同して使っている
それを踏まえた上で、対処方法のコードを4通り紹介しましたので、ぜひ参考にしてください。
参考:Excel VBA入門 その50:SpecialCells(xlCellTypeVisible)がエラーの場合の原因・対処方法
コメント