📘 Excel逆引き事典

【VBA】重複データを配列を使って高速に値をクリアする方法

手作業で重複データを削除するのは時間がかかります。この記事では、配列を使用して高速に重複データを削除するVBAマクロの作り方を紹介します。

サンプルコード

VBA
Option Explicit
Sub ClearDuplicateValues()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' 最終行取得
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' 配列にデータを読み込み
    Dim data() As Variant
    data = ws.Range("A1:A" & lastRow)
    
    ' 重複削除用配列
    Dim uniqueData() As String
    ReDim uniqueData(0 To lastRow - 1)
    
    ' データの初期化と重複チェック
    Application.ScreenUpdating = False
    Dim i As Long, j As Long, k As Long
    For i = LBound(data) To UBound(data)
        If Not IsInArray(uniqueData, data(i, 1)) Then
            uniqueData(k) = data(i, 1)
            k = k + 1
        End If
    Next i
    
    ' 配列のサイズ調整と書き込み
    ReDim Preserve uniqueData(0 To k - 1)
    ws.Range("A2:A" & lastRow).ClearContents
    For i = LBound(uniqueData) To UBound(uniqueData)
        ws.Cells(i + 1, "A").Value = uniqueData(i)
    Next i
    
    Application.ScreenUpdating = True
End Sub

' 配列内に値が存在するかチェック
Function IsInArray(arr As Variant, valueToFind As String) As Boolean
    Dim i As Long
    For i = LBound(arr) To UBound(arr)
        If arr(i) = valueToFind Then
            IsInArray = True
            Exit Function
        End If
    Next i
    IsInArray = False
End Function

よくある質問

Q 元に戻せますか?

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

Q エラーが出たら?

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