【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.
ソースファイルやターゲットファイルのパス、列番号が正しいか確認してください。