[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オートフィルタ後のコピペ』(じょあ)
5枚目のDataをオートフィルタでAB2セルのデータで絞り、1枚目のシートの既存データの下に張り付けたく以下のように記載したのですが、コピー領域と貼り付け領域が異なるというエラーが出てしまいます。
貼り付けの記載をどのように修正すればよいか教えて頂けないでしょうか。
Sub シート5のデータをシート1の下に張り付け()
Dim LrowP As Integer With Sheets(5) LrowP = .Cells(Rows.Count, "A").End(xlUp).Row
Dim PRRM As String PRRM = .Cells(2, "AB") .Range("$A$1:$AB$" & LrowP).AutoFilter Field:=28, Criteria1:=PRRM
Sheets(5).Range("A1").CurrentRegion.Offset(1).Resize(.Rows.Count - 1).Copy Sheets(1).Cells(Sheets(1).Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial xlPasteAll End With End Sub
< 使用 Excel:Office365、使用 OS:Windows10 >
問題部分ではないですが、気になる点としては、AB2セルにキーワードが入力されているようですが、この列はオートフィルタに入っているという事。 まぁ、必ず自分自身1件以上はヒットしますけど、これは意図したものなのでしょうか?
あと、動くけど無意味に思うのが、LrowP で行末を得ているのに、コピーするのは (.Rows.Count - 1) と、1行目以外最下端まで全部対象にしていること。 Resize(LrowP - 1).Copy で良いのでは?
(???) 2020/08/31(月) 14:54
セル結合などはしていないです。
オートフィルタは意図したものになります。
行末のご指摘もありがとうございました。まだ勉強中で何度か書き直しているので不要な記載が残ってしまっていました。
(じょあ) 2020/08/31(月) 16:15
〜.Resize(.Rows.Count - 1).Copy ↓ 〜.Resize(Sheets(5).Rows.Count - 1).Copy ↓ 〜.Resize(1048576 - 1).Copy ↓ 〜.Resize(1048575).Copy
なので「Sheets(1)」の3行目以降に貼り付けようとすると、そのエラーが出るとおもいます。
本当は「オートフィルタで抽出されている範囲を【項目行を除いて】コピーしたいってことだったりしませんか?
そうであれば、単純にオートフィルタが設定されている範囲を1行ずらしてコピーしちゃえばよいとおもいます。
Sub 整理() Dim LrowP As Integer
Stop 'ブレークポイントの代わり
With Sheets(5)
'▼A列最終行を取得 LrowP = .Cells(.Rows.Count, "A").End(xlUp).Row
'▼オートフィルタを一旦解除 .AutoFilterMode = False
'▼オートフィルタを設定&抽出 .Range("A1:AB" & LrowP).AutoFilter Field:=28, Criteria1:=.Range("AB2").Value
'▼オートフィルタが設定されている範囲を1行ずらして(抽出されているデータを)コピーして ' Sheets(1)のA列最終行の下に貼付 .AutoFilter.Range.Offset(1).Copy Sheets(1).Cells(.Rows.Count, "A").End(xlUp).Offset(1) End With End Sub
(もこな2 ) 2020/08/31(月) 19:58
Sheets(5).Range("A1").CurrentRegion
↑で取得できる範囲でいいなら↓でもよくないです?
Sheets(5).Range("A1").Range("A1").AutoFilter
(もこな2) 2020/09/01(火) 04:51
いえ、そうじゃなくて、繰り返しになりますが、
【コピーする範囲】が1〜1048575行目になっているので
例えば、【貼付先】が3行目だと、1048575行目があふれちゃってエラーになりませんか?ということです。
(貼付先が2行目までなら、ギリギリセーフ)
ポイントとして、
With Sheets(5).Range("A1").CurrentRegion .Offset(1).Resize(.Rows.Count - 1).Copy End With Sheets(1).Cells(Sheets(1).Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial xlPasteAll
のようであれば問題ないので、注目すべきは「Resize」するときに使っている「.Rows.Count」が何の行数を返しているか考えることだとおもいます。
今回は、シート全体の行数としてしまったために、膨大な行をコピー対象にしてしまい、貼付時にあふれちゃったというのが真相じゃないでしょうか?
ちなみに、???さんが指摘されているように、LrowPを使うのもアリですね。
(もこな2) 2020/09/01(火) 10:55
(じょあ) 2020/09/01(火) 14:54
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.