アプリ版:「スタンプのみでお礼する」機能のリリースについて

Sub テスト()
Workbooks("テスト1.xlsm").Worksheets("転記").Range("C3:J7").value = _
Workbooks("テスト1.xlsm").Worksheets("データ1").Range("C3:J7").value
End Sub

↑これではデータ1シートのC3:J7の文字や数字だけが転記シートのC3:J7にコピーされるだけで、
セルの色や罫線、フォントの大きさや色、などの設定情報が無視されてしまいます。

なので、文字や数字だけでなく設定情報もコピーできるように
↑のコードを↓のコードに修正していました。

Sub テスト()
Workbooks("テスト1.xlsm").Worksheets("転記").Range("C3:J7").PasteSpecial Paste:=xlPasteAll, _
Operation:=xlPasteSpecialOperationNone = _
Workbooks("テスト1.xlsm").Worksheets("データ1").Range("C3:J7").PasteSpecial Paste:=xlPasteAll, _
Operation:=xlPasteSpecialOperationNone
End Sub

しかし、エラーがでてしまいます。なぜなのでしょうか?

A 回答 (4件)

こんにちは。



PasteSpecialはRangeに対して「形式を指定して貼り付け」を行うメソッドです。
なので、
 (1)コピー元のRangeを「Copy」
 (2)コピー先のRangeに「PasteSpecial」
と、2つの命令が最低でも必要になります。

ご提示のコードは、コピーする命令がなく、コピー元にもコピー先にも「PasteSpecial」を行っていて、なおかつ1行の命令に無理やりまとめてる的な...申し訳ないですが、文法がメチャメチャです(気を悪くしたらごめんなさい)


値だけでなく、書式等を全てコピー&貼り付けということでしたら

Workbooks("テスト1.xlsm").Worksheets("転記").Range("C3:J7").Copy _
Destination:=Workbooks("テスト1.xlsm").Worksheets("データ1").Range("C3:J7")

で良いかと思います。「PasteSpecial」にこだわる必要は、あまりないかなと。
外してたら、ごめんなさい。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2011/09/05 16:30

>しかし、エラーがでてしまいます。

なぜなのでしょうか?
 ⇒ご質問者は、「PasteSpecial」をwebで一度でも検索したのだろうか?
  文法エラー(赤印字)なのだからでPasteSpecialメソッドのリファレンスをみれば一目瞭然ですのでお試し下さい。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2011/09/05 16:30

代入とコピーの違いが判ってないようだ。


代入はセルの値(Value)  だけを写すことを問題にする。
これはコンピュターソフト発祥以来の原初的な処理で、ビジネスではほとんどこれで済む。昔はこれしかなかった。
だんだん発達して、セルRangeの属性が多様化している。
後者は、マクロの記録でどういうコードになるか判るのでは。
(1)基本は
Sub Macro5()
Range("A1:A3").Select
Selection.Copy
Sheets("Sheet2").Select
Range("B2").Select
ActiveSheet.Paste
End Sub
(2)外にDestinationを使う方法 これは書き方や見るものには簡潔で判りやすい。
(3)PasteSpecialを使う方法
Paste:=xlPasteAll以外では(3)を使はないとならない場合があるので使い分ける必要がある場合はある。
ーー
エラーが出る原因は、=を使って代入でやるので無く、(2)、(3)では引数として情報を書くのだ。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2011/09/05 16:30

PasteSpecialメソッドで代入はできません。


元をCopyして、貼り付け先でPasteSpecialです。

今回の例では普通にCopyして貼り付けで良いと思います。
Workbooks("テスト1.xlsm").Worksheets("データ1").Range("C3:J7").Copy _
Destination:=Workbooks("テスト1.xlsm").Worksheets("転記").Range("C3")
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2011/09/05 16:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!