Excel VBA 特定の行をコピーして別の場所に複製して加工する方法

 

ExcelVBA  行をコピーして特定の行を別の場所に複製することで、データの複製や加工が簡単に行えます。 使い方や注意点など、サンプルコードをもとに具体的に解説します。

 

Excel VBAの資格でキャリアアップ!
就活や転職で有利になるVBAエキスパート資格を解説!
👉 VBAエキスパート資格のメリットを詳しく知る

 

Excel VBA  行コピーと複製|シーン

以下のシーンで利用します。

1.データのバックアップを作成する(例: 元のデータを保持しつつ、別のシートにコピー)

2.特定の条件に合う行だけをコピーする(例: 金額が一定以上の行を別のシートにコピー)

3.テンプレート行を複製する(例: 既存のフォーマットを維持しつつ新しいデータを追加)

4.定期的にデータを転記する(例: 当日のデータを履歴シートにコピー)

 

Excel VBA 行コピーと複製サンプルコード

指定した行を別の行にコピー

Option Explicit

Sub CopyRow5to10() '標準モジュール
    Rows(5).Copy Destination:=Rows(10)
End Sub

・Rows(5).Copy Destination:=Rows(10) で5行目を10行目にコピー
・値、書式、数式もそのままコピーされる

指定した行を別のシートにコピー

Option Explicit

Sub CopyRowToAnotherSheet() '標準モジュール
    Sheets("Sheet1").Rows(5).Copy Destination:=Sheets("Sheet2").Rows(2)
End Sub

・Sheets("Sheet1").Rows(5).Copy でSheet1の5行目をコピー
・Destination:=Sheets("Sheet2").Rows(2) でSheet2の2行目に貼り付け

選択した行を別の行にコピー

Option Explicit

Sub CopySelectedRow() '標準モジュール
    If Not TypeOf Selection Is Range Then
        MsgBox "セルを選択してください。", vbExclamation, "エラー"
        Exit Sub
    End If
    
    Selection.EntireRow.Copy Destination:=Rows(10)
End Sub

・Selection.EntireRow.Copy で選択した行をコピー
・Destination:=Rows(10) で10行目に貼り付け

特定の条件に合う行を別のシートにコピー

Option Explicit

Sub CopyImportantRows() '標準モジュール
    Dim wsSrc As Worksheet, wsDst As Worksheet
    Dim i As Long, lastRow As Long, dstRow As Long

    Set wsSrc = Sheets("Sheet1")
    Set wsDst = Sheets("Sheet2")
    
    lastRow = wsSrc.Cells(Rows.Count, 1).End(xlUp).Row
    dstRow = 1 ' コピー先の最初の行

    For i = 1 To lastRow
        If wsSrc.Cells(i, 1).Value = "重要" Then
            wsSrc.Rows(i).Copy Destination:=wsDst.Rows(dstRow)
            dstRow = dstRow + 1
        End If
    Next i
End Sub

・lastRow でA列の最終行を取得
・If wsSrc.Cells(i, 1).Value = "重要" で条件判定
・条件に合う行を wsDst.Rows(dstRow) にコピー

A列が空白でない行だけをコピー

Option Explicit

Sub CopyNonEmptyRows() '標準モジュール
    Dim wsSrc As Worksheet, wsDst As Worksheet
    Dim i As Long, lastRow As Long, dstRow As Long

    Set wsSrc = Sheets("Sheet1")
    Set wsDst = Sheets("Sheet2")
    
    lastRow = wsSrc.Cells(Rows.Count, 1).End(xlUp).Row
    dstRow = 1

    For i = 1 To lastRow
        If wsSrc.Cells(i, 1).Value <> "" Then
            wsSrc.Rows(i).Copy Destination:=wsDst.Rows(dstRow)
            dstRow = dstRow + 1
        End If
    Next i
End Sub

指定した行をコピーして新しい行に挿入

Option Explicit

Sub CopyRowAndInsert() '標準モジュール
    Rows(5).Copy
    Rows(6).Insert Shift:=xlDown
End Sub

・Rows(5).Copy でコピー
・Rows(6).Insert Shift:=xlDown で挿入

シートの全行をコピーする

Option Explicit

Sub CopyAllRows() '標準モジュール
    Sheets("Sheet1").UsedRange.Copy Destination:=Sheets("Sheet2").Cells(1, 1)
End Sub

Excel VBAの資格でキャリアアップ!
就活や転職で有利になるVBAエキスパート資格を解説!
👉 VBAエキスパート資格のメリットを詳しく知る

注意点

・コピー先のデータが上書きされる
→ 必要なら Insert を使って行を挿入してからコピーする

・コピー元とコピー先のセル結合に注意
→ セル結合された行をコピーするとエラーになることがある

・シート名のスペルミスに注意
→ Sheets("Sheet1") の部分が実際のシート名と一致しているか確認

・処理が遅くなる場合は Application.ScreenUpdating = False を使う
→ 大量の行をコピーする場合は画面更新を一時停止すると高速化できる

高速化

Application.ScreenUpdating = False
'(コピー処理)
Application.ScreenUpdating = True

 

Excel VBA 行コピーと複製まとめ

目的 方法
指定の行をコピー Rows(5).Copy Destination:=Rows(10)
別のシートにコピー Sheets("Sheet1").Rows(5).Copy Destination:=Sheets("Sheet2").Rows(2)
選択行をコピー Selection.EntireRow.Copy Destination:=Rows(10)
行をコピーして挿入 Rows(5).Copy → Rows(6).Insert
シート全体をコピー UsedRange.Copy Destination:=Sheets("Sheet2").Cells(1,1)

 

Excel VBAの資格でキャリアアップ!
就活や転職で有利になるVBAエキスパート資格を解説!