Lọc danh sách bằng vba

Bạn cần phải lọc một danh sách duy nhất từ một danh sách đầy thông tin trùng lắp với nhau, bạn có thế sử dụng chức năng "remove duplicates" để giải quyết nó. Nhưng phải làm thế nào với trường hợp dùng VBA để lọc.

 

Dưới đây sẽ là code để bạn biết cách làm thế nào để có thể lọc ra danh sách duy nhất từ một danh sách có các giá trị trùng lắp với nhau.

Sub LocDuLieu_Duynhat()



    Dim vaData As Variant

    Dim colUnique As Collection

    Dim aOutput() As Variant

    Dim i As Long

    Dim LastRow As Long

    LastRow = Worksheets(Sheet1.Name).Cells(2, "A").End(xlDown).Row


    'Lay du lieu can loc dua vao mang

    vaData = Sheet1.Range("A2:G" & LastRow).Value


    'Create a new collection

    Set colUnique = New Collection

    'Loop through the data

    For i = LBound(vaData, 1) To UBound(vaData, 1)

        'Collections can't have duplicate keys, so try to

        'add each item to the collection ignoring errors.

        'Only unique items will be added

        On Error Resume Next

            colUnique.Add vaData(i, 1), CStr(vaData(i, 1))

        On Error GoTo 0

    Next i


    'size an array to write out to the sheet

    ReDim aOutput(1 To colUnique.Count, 1 To 1)


    'Loop through the collection and fill the output array

    For i = 1 To colUnique.Count

        aOutput(i, 1) = colUnique.Item(i)

    Next i


    'Write the unique values to column B

    Sheet1.Range("B2").Resize(UBound(aOutput, 1), UBound(aOutput, 2)).Value = aOutput


End Sub


Code function để sử dụng cho nhiều trường hợp cần lọc duy nhất.

Public Function LocDuyNhat(Rng As Range)
    Dim vaData As Variant
    Dim colUnique As Collection
    Dim aOutput() As Variant
    Dim i As Long
    
    'Lay du lieu can loc dua vao mang

    vaData = Rng.Value

    'Create a new collection

    Set colUnique = New Collection
   
    'Loop through the data

    For i = LBound(vaData, 1) To UBound(vaData, 1)

        'Collections can't have duplicate keys, so try to

        'add each item to the collection ignoring errors.

        'Only unique items will be added

        On Error Resume Next

            colUnique.Add vaData(i, 1), CStr(vaData(i, 1))

        On Error GoTo 0

    Next i

    'size an array to write out to the sheet

    ReDim aOutput(1 To colUnique.Count, 1 To 1)

    'Loop through the collection and fill the output array

    For i = 1 To colUnique.Count

        aOutput(i, 1) = colUnique.Item(i)

    Next i

    ' Trả giá trị lọc được về

    LocDuyNhat = aOutput()
    
End Function
Code gọi function và xuất nó ra cột để sử dụng
' Khai báo biến aOutput để lưu mảng trả về để tiện cho việc sử dụng

Dim LuuDS() As Variant

' Gọi hàm (function) và truyền dữ liệu vào để tìm

LuuDS= LocDuyNhat(Sheet2.Range("F5:F1000"))

' xuất danh sách đã lọc ra cột D bắt đầu từ D5

Sheet11.Range("D5").Resize(UBound(LuuDS, 1), UBound(LuuDS, 2)).Value = LuuDS

Đăng nhận xét

1 Nhận xét