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