Excelで日々のデータを入力していると、入力シートから集計用シートに自動で転記したい という場面がよくあります。
特に「入力用のテーブル」と「保存用のテーブル」を分けて管理する場合、VBAを使えば ボタン1つで新規データを転記 することが可能です。
この記事では、VBAで 新規データを別シートのテーブルに転記する方法 を解説します。
1. 処理の流れイメージ
- 入力シート(例:「Input」)にテーブル
tblInputを用意 - 保存シート(例:「Database」)にテーブル
tblDatabaseを用意 - 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を利用して保存先テーブルに行を追加し、値を転記するのが基本。- 最新データのみ転記・全データをまとめて転記、どちらも可能。
テーブルを活用すれば、「入力 → 保存 → 集計」 の流れを効率化でき、業務の自動化に大きく役立ちます。
コメント