- ベストアンサー
VBA 最終行を選んだシートにコピーする
- VBA初心者が最終行のデータを選んだシートにコピーする方法が分からない
- VBAで最終行のデータを他のシートにコピーする方法を教えてください
- VBAで最終行のデータを別のシートにコピーする手順を教えてください
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
Range(Cells(3, 1), Cells(GYO1, 18)).Copy から察するところ シート1はA列からR列までデータがあるのですね? Range(Cells(3, 1), Cells(GYO1, 18)).Copy ↑はシート1のA列の3行目からR列の最終行までコピーなので 最終行だけの一行コピーではなくボックスコピーになります。 貴殿のスクリプトをなるべくそのまま修正すると Sub copy_last_line2() Dim GYO1 , GYO2 As Long 'シート1の最終行 GYO1 = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row 'シート2の最終行の一行下 GYO2 = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row + 1 'シート1を選択 Sheets("Sheet1").Select 'シート1のA3からR列の最終行までコピー?このままだとボックスコピーになります。 'Range(Cells(3, 1), Cells(GYO1, 18)).Copy 'シート1のA列最終行からR列最終行を一行だけコピー Range(Cells(GYO1, 1), Cells(GYO1, 18)).Copy 'シート2を選択 Sheets("Sheet2").Select 'シート2のA列の最終行のセルを選択したい? 'Range("A" & GYO2).Select 'シート2のA列の最終行のセルを選択 Cells(GYO2, 1).Select 'コピーした行をペースト ActiveSheet.Paste Application.CutCopyMode = False End Sub となりますが、いかがでしょうか?
その他の回答 (6)
- yaritsusozai
- ベストアンサー率59% (50/84)
「シート1、シート2、共にデータがA列~R列(1列目~18列目)にあり、行数は不定。ただしA列に空白はないものとする」 という前提であれば、 Dim GYO1 As Long Dim GYO2 As Long GYO1=Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row GYO2=Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row With Worksheets("Sheet1") .Range(.Cells(GYO1,1), .Cells(GYO1,18)).Copy End With Worksheets("Sheet2").Cells(GYO2 +1,1).PasteSpecial
お礼
yaritsusozaiさん、度々の回答ありがとうございます。試してみたら、もちろんきちんとまわりました。レンジの書き方がいまいちなので、本当に助かりました。ありがとうございます!
- tom04
- ベストアンサー率49% (2537/5117)
No.1です。 >シート1で選んだ最終行だけををシート2のデータの最終行の下に(空白になっているところに)、コピーをする・・・ 結局、こういうコトでしょうか? Sub Sample1() Dim lastRow As Long, wS As Worksheet Set wS = Worksheets("Sheet2") With Worksheets("Sheet1") lastRow = .Cells(Rows.Count, "A").End(xlUp).Row .Cells(lastRow, "A").Resize(1, 18).Copy wS.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) End With End Sub ※ Sheet1の最終行のA~R列のデータを Sheet2のA列最終行の1行下へコピー&ペーストしています。 ※ いちいち選択しないようにしています。m(_ _)m
お礼
tom04さん、回答をありがとうございました。さっそく試してみました。tom04さんのようにすらすらとマクロが書けるようになりたいのですが、、、、頑張ります。本当にありがとうございました。
- yaritsusozai
- ベストアンサー率59% (50/84)
あ、失礼。 後のLOOKUPを使うやつは数値データの時のみです。
- yaritsusozai
- ベストアンサー率59% (50/84)
「シート1のA列にデータが縦に並んでおり、その最終行のデータをシート2のA1セルにコピーする」 という解釈でよろしいですか? Sub Test() Cells(Worksheets(゛sheet1゛).Rows.Count, 1).End(xlUp).Copy Worksheets(゛sheet2゛).[A1].PasteSpecial End Sub また、VBAを使わなくても、 sheet2のA1セルに、 =LOOKUP(10^10,Sheet1!A:A) と書く方法もあります。
補足
皆様、回答本当にありがとうございました。初心者なので、キチンと説明ができていませんでした。シート1で最後の行のデータを全部、コピーをしたいのですが、うまく説明できず、セルだけを選んだコードにしてしまいました。シート1で選んだ最終行だけををシート2のデータの最終行の下に(空白になっているところに)、コピーをするというのがさいしゅうもくてきなのですが、、、、下のようにコードを書くとシート1の最終行だけではなく最終行の上のデータまでコピーをしてしまいます(2行ほど)。RANGEの設定の仕方がわかりません。よろしくお願いします。 Sub copy_last_line2() GYO1 = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row GYO2 = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row + 1 Sheets("Sheet1").Select Range(Cells(3, 1), Cells(GYO1, 18)).Copy Sheets("Sheet2").Select Range("A" & GYO2).Select ActiveSheet.Paste Application.CutCopyMode = False End Sub
- kkkkkm
- ベストアンサー率66% (1719/2589)
どのシートモジュールに書かれているか不明ですがSheet2以外のモジュールでしたら Sheets("Sheet2").Cells(LastRow, 1).Select のようにシート名から指定する必要があります。それ以降のコードについても同じです。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! ざっとコードを拝見すると >LastRow.Select でエラーになるのでは? LastRowは変数の宣言をしているとおり、長整数型の整数ですので選択しようがありません。 >Cells(LastRow, 1).Select にしてみてはどうでしょうか?m(_ _)m
お礼
mogurun さん、丁寧な解説をありがとうございました。教えていただいだことをよく理解するようにして、もう少し頑張ってみます。ありがとうございました。