Dengan menggunakan VBA ada beberapa metode atau cara yang digunakan untuk mengambil data duplikat pada data tertentu dan menampilkannya pada sheet atau Range Lain
Misalnya disini ada sebuah data yang memiliki duplikat seperti pada kolom B dibawah ini. dan hasilnya ingin seperti pada kolom E.
Ada beberapa metode logika yang digunakan untuk mencapai hasil seperti diatas, diantaranya :
Sub AmbilDuplikat1() Dim Rng As Range, Sel As Range Dim Baris As Long Set WF = WorksheetFunction With Sheet1 Set Rng = .Range("B3", .Cells(.Rows.Count, "B").End(xlUp)) Baris = 3 For Each Sel In Rng If WF.CountIf(Rng, Sel) > 1 Then If WF.CountIf(Columns(5), Sel) = 0 Then Cells(Baris, 5) = Sel Baris = Baris + 1 End If End If Next Sel End With End Sub
Sub AmbilDuplikat2() Dim Sel As Variant Dim TmpData As Variant Dim x As Long, y As Long Set WF = WorksheetFunction ReDim TmpData(x) With Sheet1 With .Range("B3", .Cells(.Rows.Count, "B").End(xlUp)) For Each Sel In .Value If WF.CountIf(.Cells, Sel) > 1 Then For y = 0 To UBound(TmpData) If TmpData(y) = Sel Then Exit For Next If y = UBound(TmpData) + 1 Then ReDim Preserve TmpData(x) TmpData(x) = Sel x = x + 1 End If End If Next End With .Range("E3").Resize(UBound(TmpData) + 1).Value = Application.Transpose(TmpData) End With End Sub
Sub AmbilDuplikat3() Dim LData As Object, LDups As Object Dim Rng As Range, Sel As Range Set LData = CreateObject("System.Collections.ArrayList") Set LDups = CreateObject("System.Collections.ArrayList") With Sheet1 Set Rng = .Range("B3", .Cells(.Rows.Count, "B").End(xlUp)) For Each Sel In Rng If LData.Contains(Sel.Value) Then If Not LDups.Contains(Sel.Value) Then LDups.Add Sel.Value End If End If LData.Add Sel.Value Next .Range("E3").Resize(LDups.Count).Value = Application.Transpose(LDups.ToArray) End With End Sub
Sub AmbilDuplikat4() Dim Dic As Object Dim rng As Range, Sel As Range Dim Baris As Long Set Dic = CreateObject("Scripting.Dictionary") Dic.comparemode = vbTextCompare With Sheet1 Set rng = .Range("B3", .Cells(.Rows.Count, "B").End(xlUp)) Baris = 3 For Each Sel In rng If Not Dic.exists(Sel.Value) Then Dic.Add Sel.Value, 0 Else If Dic(Sel.Value) = 0 Then Dic(Sel.Value) = 1 .Cells(Baris, "E").Value = Sel.Value Baris = Baris + 1 End If End If Next Sel End With End Sub
Sub AmbilDuplikat5() Dim rs As Object, Rng As String Set rs = CreateObject("ADODB.Recordset") With Sheet1 Rng = .Name & "$" & .Range("B2", .Cells(.Rows.Count, "B").End(xlUp)).Address(False, False) End With rs.Open "SELECT [Data User] FROM [" & Rng & "] GROUP BY [Data User] HAVING COUNT([Data User]) > 1", _ "Provider=MSDASQL;DSN=Excel Files;DBQ=" & ThisWorkbook.FullName If Not rs.EOF Then Range("E3").CopyFromRecordset rs rs.Close Set rs = Nothing End Sub