📘 Excel逆引き事典

【VBA】重複データを配列を使って高速にコピーする方法

日々の業務の中で、大量のデータから重複した情報を抽出し、別のシートに移動させる作業は非常に手間がかかります。この記事では、配列を使用して高速に重複データをコピーする方法を紹介します。

サンプルコード

VBA
Option Explicit
Sub CopyDuplicateData()
    Dim wsSource As Worksheet, wsTarget As Worksheet
    Dim lastRow As Long, i As Long, j As Long
    Dim arrData() As Variant, dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    Application.ScreenUpdating = False '画面更新を停止
    Set wsSource = ThisWorkbook.Sheets("Sheet1") 'ソースシート名を指定
    Set wsTarget = ThisWorkbook.Sheets("Sheet2") 'ターゲットシート名を指定
    lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row 'データの最終行取得
    ReDim arrData(1 To lastRow, 1 To 1) '配列の初期化
    For i = 2 To lastRow 'データを読み込み
        If Not dict.exists(wsSource.Cells(i, 1)) Then '重複チェック
            dict.Add wsSource.Cells(i, 1), Nothing '辞書に追加
        Else
            arrData(dict.Count + 1, 1) = wsSource.Cells(i, 1) '重複データを配列に格納
        End If
    Next i
    ReDim Preserve arrData(1 To dict.Count, 1 To 1)
    For j = LBound(arrData) To UBound(arrData) 'ターゲットシートへのコピー
        wsTarget.Cells(j + 1, 1).Value = arrData(j + 1, 1)
    Next j
    Application.ScreenUpdating = True '画面更新を再開
End Sub

よくある質問

Q 元に戻せますか?

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

Q エラーが出たら?

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