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