スポンサーリンク

【VBA応用】新規データを別シートのテーブルに自動転記する方法

Excelで日々のデータを入力していると、入力シートから集計用シートに自動で転記したい という場面がよくあります。
特に「入力用のテーブル」と「保存用のテーブル」を分けて管理する場合、VBAを使えば ボタン1つで新規データを転記 することが可能です。

この記事では、VBAで 新規データを別シートのテーブルに転記する方法 を解説します。


スポンサーリンク

1. 処理の流れイメージ

  1. 入力シート(例:「Input」)にテーブル tblInput を用意
  2. 保存シート(例:「Database」)にテーブル tblDatabase を用意
  3. VBAで入力テーブルの最終行を取得し、保存用テーブルに追加

スポンサーリンク

2. 新規データを転記するサンプルコード

以下は、入力シートのテーブル tblInput から最後の1行を、別シートの tblDatabase に追加転記する例です。

Sub CopyNewDataToDatabase()
    Dim wsInput As Worksheet
    Dim wsDB As Worksheet
    Dim tblInput As ListObject
    Dim tblDB As ListObject
    Dim lastRow As ListRow
    Dim newRow As ListRow
    
    'シートを設定
    Set wsInput = ThisWorkbook.Sheets("Input")
    Set wsDB = ThisWorkbook.Sheets("Database")
    
    'テーブルを設定
    Set tblInput = wsInput.ListObjects("tblInput")
    Set tblDB = wsDB.ListObjects("tblDatabase")
    
    '入力テーブルの最後の行を取得
    Set lastRow = tblInput.ListRows(tblInput.ListRows.Count)
    
    '保存テーブルに新しい行を追加
    Set newRow = tblDB.ListRows.Add
    
    '値を転記(列数分ループ)
    Dim i As Long
    For i = 1 To tblInput.ListColumns.Count
        newRow.Range(1, i).Value = lastRow.Range(1, i).Value
    Next i
    
    MsgBox "最新データを保存用テーブルに転記しました。"
End Sub

スポンサーリンク

3. コードのポイント

  • tblInput.ListRows(tblInput.ListRows.Count)
    → 入力テーブルの最後の行(最新データ)を取得。
  • tblDB.ListRows.Add
    → 保存テーブルに新しい行を追加。
  • newRow.Range(1, i).Value = lastRow.Range(1, i).Value
    → 列ごとに値をコピー。

スポンサーリンク

4. 全データをまとめて転記する方法

もし「入力シートの全データをまとめて保存したい」場合は、以下のように DataBodyRange を使って一括コピーできます。

Sub CopyAllDataToDatabase()
    Dim wsInput As Worksheet
    Dim wsDB As Worksheet
    Dim tblInput As ListObject
    Dim tblDB As ListObject
    Dim newRow As ListRow
    
    Set wsInput = ThisWorkbook.Sheets("Input")
    Set wsDB = ThisWorkbook.Sheets("Database")
    
    Set tblInput = wsInput.ListObjects("tblInput")
    Set tblDB = wsDB.ListObjects("tblDatabase")
    
    '入力データを保存テーブルに順番に転記
    Dim r As Range
    For Each r In tblInput.DataBodyRange.Rows
        Set newRow = tblDB.ListRows.Add
        newRow.Range.Value = r.Value
    Next r
    
    MsgBox "入力データをすべて保存用テーブルに転記しました。"
End Sub

5. 活用シーン

  • 入力フォームの保存ボタン → 入力データを履歴として記録
  • 複数ユーザーの入力を統合 → 個別シートのデータをマスターテーブルに集約
  • 日次データ保存 → 毎日の入力をログとして保存

6. まとめ

  • テーブルを使うことで「新規行の追加」が簡単にできる。
  • ListRows.Add を利用して保存先テーブルに行を追加し、値を転記するのが基本。
  • 最新データのみ転記・全データをまとめて転記、どちらも可能。

テーブルを活用すれば、「入力 → 保存 → 集計」 の流れを効率化でき、業務の自動化に大きく役立ちます。

コメント

タイトルとURLをコピーしました