はじめに
複数のシートにまたがってデータを管理していると、「入力の重複」「転記ミス」「集計が大変」といった悩みがつきもの。
そんなときに便利なのが「シート間の自動転記」!
今回は、特定の条件でデータを他のシートへ自動転記する方法をVBAでご紹介します。
◆ こんなときに便利!
- 入力シートから「完了済み」のデータだけ別シートに移したい
- 部署ごとに情報を振り分けたい
- 毎月の報告シートを作るのが面倒
VBAで自動転記できれば、毎日の作業がボタン1つで完了します!
◆ サンプル構成
今回は以下のような構成を例にします:
- Sheet1(入力シート):A列〜D列にデータ
- Sheet2(完了シート):完了フラグが「済」なら転記
「済」になったデータだけをSheet2にコピーするマクロを作っていきます。
◆ コード全文
Sub データを自動転記する()
Dim srcSheet As Worksheet
Dim dstSheet As Worksheet
Dim lastRow As Long
Dim dstRow As Long
Dim i As Long
Set srcSheet = Sheets("Sheet1") ' 入力元シート
Set dstSheet = Sheets("Sheet2") ' 転記先シート
lastRow = srcSheet.Cells(srcSheet.Rows.Count, 1).End(xlUp).Row
dstRow = dstSheet.Cells(dstSheet.Rows.Count, 1).End(xlUp).Row + 1
' ヘッダーを除いて2行目からループ
For i = 2 To lastRow
' D列が「済」なら転記
If srcSheet.Cells(i, 4).Value = "済" Then
' A〜D列を転記
dstSheet.Cells(dstRow, 1).Value = srcSheet.Cells(i, 1).Value
dstSheet.Cells(dstRow, 2).Value = srcSheet.Cells(i, 2).Value
dstSheet.Cells(dstRow, 3).Value = srcSheet.Cells(i, 3).Value
dstSheet.Cells(dstRow, 4).Value = srcSheet.Cells(i, 4).Value
dstRow = dstRow + 1
End If
Next i
MsgBox "完了データを転記しました!", vbInformation
End Sub
◆ コードのポイント
- srcSheet:データの元(Sheet1)
- dstSheet:転記先(Sheet2)
- D列が「済」のときだけ転記
- dstRow:転記先の次の空き行を自動で取得
これにより、条件に合う行だけをどんどん転記できます。
◆ 応用編:転記後に元の行を削除したい場合
元のSheetから「済」の行を削除したい場合は、逆ループで処理するのがポイントです。
For i = lastRow To 2 Step -1
If srcSheet.Cells(i, 4).Value = "済" Then
' 転記処理(上と同じ)
' ...
srcSheet.Rows(i).Delete
End If
Next i
データを削除する場合は必ず事前にバックアップを取っておきましょう!
まとめ
今回のような「シート間の自動転記」は、毎日の定型作業を効率化する最強ワザです。
条件分岐やループを組み合わせれば、さらに細かい制御も可能!
ぜひ実務で活用して、“仕事の奥義”を手に入れてください!
📝 関連記事(予定)
- 【Step9】VBAでファイルを一括処理!CSVやフォルダ操作の基本
- 【Step10】実践!ボタン一つで日報を作成するツールを作ろう


