[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『コピー領域と貼付け領域のサイズが違うとエラー』(1年生)
複数シートを1シートへまとめる下記コードでエラー「コピー領域と貼付け領域のサイズが違うため、これをここに貼り付けることができません。」となります。どこを修正したら良いでしょう?教えてください。よろしくお願いいたします。
Sub TEST3()
Dim A '3つ目のシートから最終シートまでループ For i = 3 To Sheets.Count 'まとめシートの最終セルを取得 Set A = Sheets("まとめ").Cells(Rows.Count, "A").End(xlUp) With Sheets(i).Range("A1").CurrentRegion 'データ部分をコピー .Range(“6:405”).Copy A.Offset(1, 1) End With Next End Sub
< 使用 Excel:Office365、使用 OS:Windows10 >
.Range(“6:405”).Copy A.Offset(1, 0) こうしてみたら?
行全体を2列目から貼り付けようとしているので、1列足りないです (´・ω・`) 2022/08/29(月) 14:00
With Sheets(i).Range("A1").CurrentRegion 'データ部分をコピー .Rows("6:405").Copy A.Offset(1, 1) End With
あるいは、
With Sheets(i) 'データ部分をコピー Intersect(.Range("A1").CurrentRegion, .Range("6:405").Copy A.Offset(1, 1) End With (hatena) 2022/08/29(月) 14:55
?Range("A1").CurrentRegion.Range("6:405").Address $6:$405
?Range("A1").CurrentRegion.Rows("6:405").Address $A$6:$C$405
?Intersect(Range("A1").CurrentRegion, Range("6:405")).Address $A$6:$C$10
Rowsの仕様が意味不明な気がします。
(hatena) 2022/08/29(月) 15:03
>Rowsの仕様が意味不明 ドキュメントのとおりなのでは?
Range.Range プロパティ (Excel) https://docs.microsoft.com/ja-jp/office/vba/api/excel.range.range >Range オブジェクトに対して使用すると、このプロパティは Range オブジェクト基準にした相対的な範囲を返します。
Range.Rows プロパティ (Excel) https://docs.microsoft.com/ja-jp/office/vba/api/excel.range.rows >指定した範囲の行を表す Range オブジェクトを返します (´・ω・`) 2022/08/29(月) 15:47
Sub 実験() On Error Resume Next '▼Rangeプロパティ Debug.Print Range("A1:B2000").Range("6:405").Address Debug.Print Range("A1").Range("6:405").Address Debug.Print Range("B1").Range("6:405").Address '←エラーになる Debug.Print Rows(2).Range("6:405").Address Debug.Print ""
'▼Rowsプロパティ Debug.Print Range("A1:B2000").Rows("6:405").Address Debug.Print Range("A1").Rows("6:405").Address Debug.Print Range("B1").Rows("6:405").Address Debug.Print Rows(2).Rows("6:405").Address Debug.Print ""
On Error GoTo 0 End Sub
普段意識して区別してませんでしたが違いがあるんですね。
ただ、トピ主が提示されているようなケースであれば、私もhatenaさんが提示されているようにIntersectメソッドを使うと思います。
たとえばこんな感じ。
Sub 研究用() Dim i As Long
Stop
For i = 3 To Sheets.Count With Sheets(i) Intersect(.Range("A1").CurrentRegion.EntireColumn, .Rows("6:405")).Copy _ Sheets("まとめ").Cells(Rows.Count, "A").End(xlUp).Offset(1, 1) End With Next i End Sub
(もこな2) 2022/08/29(月) 18:26
?Range("A1:C10").Range("6:405").Address $6:$405
?Range("A2:C11").Range("6:405").Address $7:$406
?Range("B1:D10").Range("6:405").Address エラーになる
前のRangeの左上を基準とした相対範囲になる。 前のRangeより広い範囲を指定すると、横方向にも縦方向にも元の範囲をはみ出す。
?Range("A1:C10").Rows("6:405").Address $A$6:$C$405
?Range("A2:C11").Rows("6:405").Address $A$7:$C$406
?Range("B1:D10").Rows("6:405").Address $B$6:$D$405
前のRangeの左上を基準とした行範囲になる。 横方向にははみ出さないが、縦方向にははみだす。
?Intersect(Range("A1:C10"),Rows("6:405")).Address $A$6:$C$10
?Intersect(Range("A2:C11"), Rows("6:405")).Address $A$6:$C$11
?Intersect(Range("B1:D10"),Rows("6:405")).Address $B$6:$D$10
2つの範囲の重なった部分を返す。 つまり、横方向にも縦方向にもはみ出さない。
質問のコピーする場合は、CurrentRegionをはみ出す部分も含めてコピーするのは無意味、 あるいは想定外のものまでコピーする可能性があるので、 Intersect を使うのがいいと思います。
(hatena) 2022/08/29(月) 20:12
コピー領域と貼付け領域のサイズが違うため、これをここに貼り付けることができません。
貼り付け先は左上に当たる1セルだけしていてやれば良いので、
サイズウンヌンと出るとは思えないが、
単にセル結合してないかね?
(メンツ) 2022/08/29(月) 21:13
>貼り付け先は左上に当たる1セルだけしていてやれば良いので、
質問のコードでは、 貼り付け先の指定は1セルにしてます。
$6:$405というような行全体を2列目以降に貼り付けようとすると、 シートの最大列を超えた範囲になるので、 「コピー領域と貼付け領域のサイズが違う」 というエラーになります。
確認用コード Range("$6:$405").Copy Range("B1")
(hatena) 2022/08/29(月) 21:23
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.