【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.
シート名や列番号が正しいか確認してください。