【Excel VBA】最終行の下にデータを追加する方法!別シートからのコピーも可!

【Excel VBA】最終行の下にデータを追加する方法!別シートからのコピーも可!

VBAで最終行の下にデータを追加したいときはないでしょうか。

けど、そんな中で悩むことは、

・VBAで最終行の下にデータを追加したいが方法がよくわからない
・VBAで最終行の下に別シートのデータを追加したいが方法がよくわからない

ですよね。

今回はそんなお悩みを解決する

・VBAで別シートのデータを元シートの最終行の下に追加する方法

についてまとめます!

VBAで別シートのデータを元シートの最終行の下に追加するイメージ

VBAで別シートのデータを元シートの最終行の下に追加するイメージについて説明をします。

Excelに追加データを入力するシートと、

そのデータを追加したい表があるシートを用意します。

VBAを実行すると、追加データがコピーされ、反映したいシートの表の最終行の下に追加されます。

また、追加データの内容を変更し、

再度VBAを実行すると、前回追加したデータの最終行の下に追加されていきます。

それぞれのシートの最終行数は自動的に取得され、データ量に応じていちいちセルの範囲を設定する必要がないのでとても便利です!

それでは早速試してみましょう。

VBAで別シートのデータを元シートの最終行の下に追加する

VBAで別シートのデータを元シートの最終行の下に追加する方法について説明をします。

シートを準備する

Excelに追加データを入力する”追加データ”シートと、そのデータを追加したい表がある”元表”シートを用意し、適当なデータを入力していきます。
サンプルデータはA列~C列の3列構成となり、追加データは2行目以降が対象となります。

Excelに追加データを入力するシート

データを追加したい表があるシート

VBAコード

サンプルのVBAコードは以下の通りです。

Sub 最終行の下にデータを追加する()
    Dim intLastRowNum1 As Integer
    Dim intLastRowNum2 As Integer
    Dim intRowsCount As Integer
    
    With Sheets("追加データ")
        '最終行数を取得します。
        intLastRowNum1 = 最終行取得関数(.Name)
        '追加データの範囲をコピーします。
        .Range(.Cells(2, 1), .Cells(intLastRowNum1, 3)).Copy
        '追加データの範囲の行数をカウントし変数へ代入します。
        intRowsCount = .Range(.Cells(2, 1), .Cells(intLastRowNum1, 3)).Rows.Count
    End With
    
    With Sheets("元表")
        '最終行数を取得します。
        intLastRowNum2 = 最終行取得関数(.Name)
        '元表シートへ値のみ貼り付けします。
        .Range(.Cells(intLastRowNum2 + 1, 1), .Cells(intLastRowNum2 + intRowsCount, 3)).PasteSpecial Paste:=xlPasteValues
    End With
    
   '範囲選択を解除します。
    Application.CutCopyMode = False
    
    
End Sub

Function 最終行取得関数(varSheet As Variant)
    '最終行数を取得します。
    With Worksheets(varSheet).UsedRange
        最終行取得関数 = .Cells(1.1).Row + .Rows.Count - 1
    End With

End Function

VBAを設定する

シート名を変更する場合は以下を変更してください。
現在の設定は追加データを入力する”追加データ”シートと、そのデータを追加したい表がある”元表”シートをを設定していきます。

With Sheets("追加データ")
With Sheets("元表")

タカヒロ
タカヒロ
シート名は名前以外に左からの位置の順番である数値での指定も可能です。たとえば1シート目であれば「1」、2シート目であれば「2」を指定します。

対象となる表の列を変更したい場合は以下のCellsオブジェクトの列番号を変更してください。
現設定ではA~C列が対象なので1列目の1と3列目の3の設定となっています。

'追加データの範囲をコピーします。
.Range(.Cells(2, 1), .Cells(intLastRowNum1, 3)).Copy
'追加データの範囲の行数をカウントし変数へ代入します。
intRowsCount = .Range(.Cells(2, 1), .Cells(intLastRowNum1, 3)).Rows.Count
'元表シートへ値のみ貼り付けします。
.Range(.Cells(intLastRowNum2 + 1, 1), .Cells(intLastRowNum2 + intRowsCount, 3)).PasteSpecial Paste:=xlPasteValues

VBAの実装

VBAの実装方法については
VBAの実装手順
をご参照ください。

VBAを実行する

VBAを実行してみましょう。

元表の最終行の下に追加データ3行分が挿入されましたね!

追加データを変更して再度実行してみましょう。
次は4件となります。

はい!先ほど追加した最終行の下に4件が追加されましたね!

VBAの説明

VBAについて説明をします。

最終行数を取得する関数を別に設定しています。
この関数は引数にシート名またはシート番号(1,2,3…)を指定すると、シートにある表の最終行数を取得します。

<code>Function 最終行取得関数(varSheet As Variant)
'最終行数を取得します。
With Worksheets(varSheet).UsedRange
最終行取得関数 = .Cells(1.1).Row + .Rows.Count - 1
End With
End Function

タカヒロ
タカヒロ
最終行数取得のロジックについては以下の記事の方法⑤を採用しています。
それ以外の最終行数を取得する方法もありますので、よろしければご参照ください。
【Excel VBA】最終行を取得する方法5選!取得できない対処法も!

 

追加データシートの追加分のデータをコピーします。先ほどの最終行取得関数に”追加データ”シート名を指定し、”追加データ”シートの表の最終行数を取得します。

つづいて追加データの範囲をコピーします。
次の処理に使う追加データの行数を変数に代入します。

With Sheets("追加データ")
'最終行数を取得します。
intLastRowNum1 = 最終行取得関数(.Name)
'追加データの範囲をコピーします。
.Range(.Cells(2, 1), .Cells(intLastRowNum1, 3)).Copy
'追加データの範囲の行数をカウントし変数へ代入します。
intRowsCount = .Range(.Cells(2, 1), .Cells(intLastRowNum1, 3)).Rows.Count
End With

“元表”シートの最終行の下に追加データを値貼り付けします。
最終行取得関数に”元表”シート名を指定し、”元表”シートの表の最終行数を取得します。
次に元表の最終行のひとつ下の行へ追加データを値貼り付けします。

With Sheets("元表")
'最終行数を取得します。
intLastRowNum2 = 最終行取得関数(.Name)
'元表シートへ値のみ貼り付けします。
.Range(.Cells(intLastRowNum2 + 1, 1), .Cells(intLastRowNum2 + intRowsCount, 3)).PasteSpecial Paste:=xlPasteValues
End With

仕上げにコピーの範囲選択状態を解除します。

Application.CutCopyMode = False

タカヒロ
タカヒロ
別シートへ値のみコピーする方法については以下の記事を参考にして作成しています。
よろしければご参考ください。
【Excel VBA】別シートへ値のみコピーする方法!

VBAの実装手順

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

さいごに

いかがでしょうか。

今回は、

・VBAで別シートのデータを元シートの最終行の下に追加する方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です