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("元表")
対象となる表の列を変更したい場合は以下の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
VBAの実装手順
実装手順は以下の通りです。
Excel側にVBAを実装していきます。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
さいごに
いかがでしょうか。
今回は、
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す