📘 Excel逆引き事典

【VBA】重複データを開かずに(外部参照で)コピーする方法

日々の業務で、他のワークブックから特定のデータをコピーすることが多いですよね。特に重複しているデータだけを取り出す場合、手作業では時間がかかります。この記事では、VBAを使って簡単に重複データのみをコピーし、業務効率化を図ります。

サンプルコード

VBA
Option Explicit
Sub CopyDuplicateData()
    Dim wbSource As Workbook, wsSource As Worksheet
    Dim wbTarget As Workbook, wsTarget As Worksheet
    Dim lastRowS As Long, i As Long, j As Long
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    Application.ScreenUpdating = False
    ' ソースワークブックとターゲットワークブックを指定
    Set wbSource = Workbooks.Open("C:\path\to\source.xlsx")
    Set wsSource = wbSource.Sheets(1)
    Set wbTarget = ThisWorkbook
    Set wsTarget = wbTarget.Sheets(1)
    ' ソースワークシートの最終行を取得
    lastRowS = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row
    ' データコピー処理
    For i = 2 To lastRowS
        If dict.exists(wsSource.Cells(i, 1)) Then
            wsTarget.Cells(dict(wsSource.Cells(i, 1)), 2) = wsSource.Cells(i, 2)
        Else
            dict.Add wsSource.Cells(i, 1), wsTarget.Cells(wsTarget.Rows.Count, 1).End(xlUp).Row + 1
        End If
    Next i
    wbSource.Close False
    Application.ScreenUpdating = True
End Sub

よくある質問

Q 元に戻せますか?

A.
VBAの実行結果は「元に戻す」が効きません。必ずバックアップを取ってから実行してください。

Q エラーが出たら?

A.
シート名や列番号が正しいか確認してください。