📘 Excel逆引き事典

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

日々の業務で大量のデータを取り扱っていると、同じデータが複数存在していることに気づくことがあります。手作業でこれらの重複データを探すのは時間がかかります。そこで、この記事ではVBAを使用して他のファイルから重複データを簡単に抽出する方法を紹介します。

サンプルコード

VBA
Option Explicit
Sub ExtractDuplicateData()
    Dim wb As Workbook, wsSource As Worksheet, wsTarget As Worksheet
    Dim lastRowSrc As Long, lastRowTgt As Long, i As Long, j As Long
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    
    ' ソースワークブックを開く
    Set wb = Workbooks.Open(Filename:="C:\path\to\source.xlsx", UpdateLinks:=False)
    Set wsSource = wb.Sheets(1) ' 1番目のシートを対象とする
    lastRowSrc = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row
    
    ' ターゲットワークブックの作成または開く
    Set wb = Workbooks.Add
    Set wsTarget = wb.Sheets(1)
    
    Application.ScreenUpdating = False
    For i = 2 To lastRowSrc ' A列から重複をチェックする(A1はヘッダー行と仮定)
        If Not dict.exists(wsSource.Cells(i, "A").Value) Then
            dict.Add wsSource.Cells(i, "A").Value, Nothing
        Else
            lastRowTgt = wsTarget.Cells(wsTarget.Rows.Count, "A").End(xlUp).Row + 1
            wsTarget.Cells(lastRowTgt, "A").Value = wsSource.Cells(i, "A").Value
        End If
    Next i
    
    Application.ScreenUpdating = True
    wb.SaveAs Filename:="C:\path\to\target.xlsx"
End Sub

よくある質問

Q 元に戻せますか?

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

Q エラーが出たら?

A.
ソースファイルやターゲットファイルのパス、列番号が正しいか確認してください。