Excel VBAで最終行までコピーする方法

実務の現場でマクロを動かしていると、

「先月は50行だったデータが、今月は120行に増えている……!」

という、データの行数が毎回変わるパターンにぶつかります。

毎回コードを開いて「Range(“A1:A120”)」なんて手動で範囲を書き換えていたら、せっかく自動化した意味がなくなってしまいますよね。

データ行数に増減があっても、ボタンひとつでピタッと最後の行まで自動でコピペするには、マクロに「ここからここまで」と範囲を教えてあげる必要があります。

コピー範囲が変動しても、データが入っている範囲をピタッとコピペする、実務の定番コードの書き方を詳しくご紹介します!

マクロを動かすための重要なお願い

ダウンロードしたファイルは、通常のExcel形式(.xlsx)になっています。
そのままマクロを書いて保存すると、せっかく書いたコードがすべて消えてしまいます!

💡練習用ファイルを使う前の準備

データの最終行を自動で取得してコピペする(基本の書き方)

データの量が毎回変わるコピペを実現するには、あらかじめ変数に取得しておいた「最終行の番号」を、コピペのコードの中に正しく合体させる必要があります。

ここでは、取得した最終行の変数を使用して、コピー範囲を動的に指定する実務の定番コードを見ていきましょう。

最終行の取得スニペットは【こちら

データの範囲に合わせてコピペするコード

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」 の動きをその目で確かめてみてくださいね。