Excel VBAで最終行までコピーする方法
実務の現場でマクロを動かしていると、
「先月は50行だったデータが、今月は120行に増えている……!」
という、データの行数が毎回変わるパターンにぶつかります。
毎回コードを開いて「Range(“A1:A120”)」なんて手動で範囲を書き換えていたら、せっかく自動化した意味がなくなってしまいますよね。
データ行数に増減があっても、ボタンひとつでピタッと最後の行まで自動でコピペするには、マクロに「ここからここまで」と範囲を教えてあげる必要があります。
コピー範囲が変動しても、データが入っている範囲をピタッとコピペする、実務の定番コードの書き方を詳しくご紹介します!
ダウンロードしたファイルは、通常のExcel形式(.xlsx)になっています。
そのままマクロを書いて保存すると、せっかく書いたコードがすべて消えてしまいます!
💡練習用ファイルを使う前の準備
- ファイルをダウンロードして開く
- マクロ有効ブック(.xlsm)形式で保存し直す
データの最終行を自動で取得してコピペする(基本の書き方)
データの量が毎回変わるコピペを実現するには、あらかじめ変数に取得しておいた「最終行の番号」を、コピペのコードの中に正しく合体させる必要があります。
ここでは、取得した最終行の変数を使用して、コピー範囲を動的に指定する実務の定番コードを見ていきましょう。

最終行の取得スニペットは【こちら】
データの範囲に合わせてコピペするコード
Sub Copy()
Dim LastRow As Long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
Range("A2:A" & LastRow).Copy Range("C2")
End Subコードの解説
Range("A2:A" & LastRow).Copy
これはコピー元を指しています。
“A2:A” という文字列の後ろに、最終行の番号が入った「LastRow」を「&」でつなげることで、データ量に応じたコピー範囲を自動で作っています。
例えば、LastRow が 120 の場合は 「A2:A120」、50 の場合は 「A2:A50」 という文字列が作られ、その範囲がコピーされます。
続いて、
Range("C2")
は、コピー先を指定しています。
つまり、このコードは「A列のデータを最終行までコピーして、C2セルから貼り付ける」という処理になります。
まとめ
今回は、データの行数が毎回変わっても対応できる「可変範囲のコピペ技」をご紹介しました。
実務で本当に役立つマクロを作るためには、今回ご紹介した
「文字列の “A2:A” と 変数の LastRow を & で合体させる書き方」
が絶対に欠かせません。
この組み合わせ方さえマスターしてしまえば、どんなにデータ量が増減する業務でも、ボタン一つで完璧に自動化できるようになります。
まずは今回の練習用ファイルを使って、実際に行数を増減させ「 & LastRow」 の動きをその目で確かめてみてくださいね。



