📘 Excel逆引き事典

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

手作業で他のワークブック内の重複データを削除するのは時間がかかります。この記事では、VBAを使って簡単に重複データの値をクリアする方法を紹介します。

サンプルコード

VBA
Option Explicit
Sub ClearDuplicateValues()
    Dim wb As Workbook, ws As Worksheet
    Dim lastRow As Long, i As Long
    Dim refWb As Workbook, refWs As Worksheet
    Dim refLastRow As Long
    
    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Sheet1")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    
    ' 外部ワークブックを開く(パスは適宜変更してください)
    Set refWb = Workbooks.Open("C:\path\to\externalWorkbook.xlsx")
    Set refWs = refWb.Sheets("Sheet1")
    refLastRow = refWs.Cells(refWs.Rows.Count, 1).End(xlUp).Row
    
    ' データクリア処理
    Application.ScreenUpdating = False
    For i = lastRow To 1 Step -1
        If IsInRefWb(ws.Range("A" & i), refWs) Then
            ws.Range("B" & i).ClearContents
        End If
    Next i
    
    ' 外部ワークブックを閉じる
    refWb.Close SaveChanges:=False
    Application.ScreenUpdating = True
End Sub

' ユーティリティ関数:値が外部ワークブックに存在するか確認します。
Function IsInRefWb(cell As Range, ws As Worksheet) As Boolean
    Dim lastRow As Long, i As Long
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    For i = 1 To lastRow
        If cell.Value = ws.Range("A" & i).Value Then
            IsInRefWb = True
            Exit Function
        End If
    Next i
    IsInRefWb = False
End Function

よくある質問

Q 元に戻せますか?

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

Q エラーが出たら?

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