dポイントプレゼントキャンペーン実施中!

VBA初心者で勉強中の者です。
『工事台帳シート』からオートフィルタで抽出したものを、『工事別表示シート』にコピペするコードをつくりました。
以下のものです。

Sub 工事抽出コピペ()
Dim Obj As Object
With Sheets("工事台帳")
Set Obj = .Range("E5:E65536").Find(.Range("E2"), LookAt:=xlWhole)
If Obj Is Nothing Then
MsgBox "見つかりませんでした。"
Sheets("工事別表示").Range("B11:F65536").ClearContents
Exit Sub
Else
.Range("B6").AutoFilter Field:=4, Criteria1:=.Range("E2").Value
.Range("F5:J65536").Copy
End If
End With
Sheets("工事別表示").Range("B11").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub

これを起動させると、

Sheets("工事別表示").Range("B11").PasteSpecial Paste:=xlPasteValues

の部分が黄色くなり、
実行時エラー'1004'「コピー領域と貼付領域の形が違うため、情報を貼り付けることができません」
という表示が出てきます。
これはどういう意味なのでしょうか?
ちなみにコピー領域セルも貼付領域セルも結合はなく、行・列の幅も同じです。
このコードもいろいろな本やサイトで教えてもらったのを参考に作っているので、私自身深く理解せずに書いているところもあります。

どなたか教えてくださる方、よろしくおねがいします。

A 回答 (1件)

原因は、この「.Range("F5:J65536").Copy」の部分の65536です。


コピーした範囲は65532行あるのに、貼り付け先がB11であるから、65526行分しか貼り付け出来ないというエラーとなっているのです。

Sheets("工事別表示").Range("B11").PasteSpecial Paste:=xlPasteValues
のB11をB5に変更すれば問題ないのですが、様式を変更せずにするには、65536ではなく、最終行をちゃんと取得してあげればOKです。

で、B列で最終行を取得する場合、

「.Range("F5:J65536").Copy」の部分を以下の様に修正すればOKです。

.Range("F5:J" & .Range("B65536").End(xlUp).Row).Copy
    • good
    • 0
この回答へのお礼

>65536ではなく、最終行をちゃんと取得してあげればOKです。

分かりました。

出来ました~!(^^)!
ありがとうございました!

お礼日時:2011/06/03 11:01

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