Sử dụng vòng lặp để xóa trùng (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

phihndhsp

Thành viên gạo cội
Tham gia
26/12/09
Bài viết
3,363
Được thích
2,488
Giới tính
Nam
Nghề nghiệp
Giáo Viên
Giải pháp tìm duy nhất để thay thế DIC( cái này để học hành và tư duy thôi)
Nếu bạn nào muốn tìm hiểu thuật toán ở dạng đơn sơ nhất không sử dụng hàm trong VBA thì có thể tham khảo bài này tôi không bẫy bất cứ lỗi gì nên code cũng ngắn gọn, tốc độ xem ra cũng được so với DIC (kém chừng 5-6s so với dữ liệu 60000 dòng)

Mã:
Sub DIC_01()
    Dim Rng As Range
    Dim Arrd()
    Dim Arrn()
    Dim DongCuoi As Long
    Dim i As Long, j As Long
    Dim DongHienTai As Long
    DongCuoi = Sheet1.Range("A150000").End(xlUp).Row
    Arrn = Sheet1.Range("A2:A" & DongCuoi)
     ReDim Arrd(1 To DongCuoi, 1 To 1)
     Arrd(1, 1) = Arrn(1, 1)
     DongHienTai = 1
     flag = True
    For i = 1 To UBound(Arrn, 1)
        For j = 1 To DongHienTai
             If (Arrn(i, 1) = Arrd(j, 1)) Then
               flag = False
               Exit For
             End If
        Next j
            If (flag = True) Then
                DongHienTai = DongHienTai + 1
                Arrd(DongHienTai, 1) = Arrn(i, 1)
            End If
            flag = True
     Next
     Sheet1.Range("J2:Z10000").Clear
     Sheet1.Range("J2").Resize(DongHienTai, 1) = Arrd
End Sub
 

File đính kèm

Trước đây mình cũng có lần nghiên cứu cách viết lọc duy nhất không dùng Dic, cũng bị anh NDU đưa ra cái vụ 65000 dòng không có ông nào trùng nhau. Kết quả treo máy luôn. Từ đấy không dại gì đụng đầu vào tường nữa. Cái gì có sẵn thì dùng cho khỏe tấm thân tàn.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom