- ベストアンサー
sheetの末尾にコピーする方法
- エクセルVBAで売上帳を作っています。入力用sheetから売上帳sheetへコピーする際に、売上帳sheetが3行目で終わっていたら、次は4行目から、というふうにしたいのですが、できません。
- Sub 売上()のコードで実行すると、売上帳sheetの表の最終行からの貼付けになってしまいます。
- どなたか教えてください。宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1,2のmerlionXXです。 CurrentRegionとは空白行と空白列に囲まれたデータが隣接する四角いセル範囲です。 仮にG4とH5の2つだけに入力があるシートの場合、CurrentRegionはG4:H5という4つのセルの範囲になります。 With Range("G4").CurrentRegion 行 = .Cells(.Count).Row + 1 End With は、G4が所属するそのCurrentRegionの最後(一番右かつ一番下)のセルの行(Row)+1、つまり貼り付ける先頭行を取得させています。 なお、CurrentRegionでは、UsedRangeやLastCellと違い、一旦入力したけどその後クリアしたセルを記憶するようなことはありません。 Cells(Rows.Count, "G").End(xlUp).Row + 1 は、G列の一番下のセル(2003ならG65536)からCtrl+↑キーで飛ぶセルの行(G列に記入のある最終行)+1ということです。 全く記入していない状態で、記入欄の1行目に貼り付けるときだけ、エラーがでるとのことですが、売上帳シートのG列にまったく何も記入がないとG列の一番下のセルからCtrl+↑キーで飛ぶセルはG1であり、行 = Cells(Rows.Count, "G").End(xlUp).Row + 1は、2 を返すはずです。したがって、Range("G" & 行).SelectでG2セルが選択され、そこに入力用シートでコピーした範囲、つまりあなたが書いたRange("B8:" & セル)のデータが値貼り付けされるだけのはずです。 そこにエラーNo.1004で、貼り付け領域が違う と出るのは、その場所に結合セルがあるのではないでしょうか?
その他の回答 (2)
- merlionXX
- ベストアンサー率48% (1930/4007)
#1です。 よく考えたら、G列に必ず最終行まで入力があるとは限らないのですよね? ならば、 行 = Range("G4").CurrentRegion.Rows.Count + 1 'アクティブセル領域の行数 + 1 の部分を With Range("G4").CurrentRegion 行 = .Cells(.Count).Row + 1 End With にしてみてください。
お礼
先ほどの#1の方法で、できました。 このコードに変えると、最終行の下へ貼りつけるようになりました。 また、クリアしたセルも記憶しているらしく、そのセルの下へ貼り付けています。 このコードはどういう意味を表しているのでしょうか? 先ほどのコードとの違いを教えてください。
- merlionXX
- ベストアンサー率48% (1930/4007)
> 行 = Range("G4").CurrentRegion.Rows.Count + 1 'アクティブセル領域の行数 + 1 ここを 行 = Cells(Rows.Count, "G").End(xlUp).Row + 1 にしてみてください。
お礼
できました! ありがとうございました~♪
補足
すみません! もう一つ教えてください。 全く記入していない状態で、記入欄の1行目に貼り付けるときだけ、エラーがでます。 エラーNo.1004で、貼り付け領域が違うとの内容です。 どうすればよいのでしょう?
お礼
良く分かりました。 詳しい説明をありがとうございます。 エラーの原因ですが、表の見出しとしているG2とG3のセルを結合して使っていました。 結合を解いてやると、うまくいきました。