Loại bỏ dữ kiệu trùng (2 người xem)

  • Thread starter Thread starter Kh Biet
  • Ngày gửi Ngày gửi
Liên hệ QC

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

Có nhiều người không có mộ bạn à ? Chẳng hạn người ta chỉ có dữ liệu" chết tại bệnh xá Trung đoàn ..." và có thể trùng số mộ vì như thày 2 lúa nói : tức là từ nhiều nghĩa trang .

Vậy thử code này xem sao, hơi tà đạo tí
PHP:
Sub copy_khongtrung()
Dim Dulieu(), i, j
Sheet2.Range(Sheet2.[A4], Sheet2.[A65536].End(3)).Resize(, 8).Copy
With Sheet1
   .[A65536].End(3).Offset(1).PasteSpecial 1
   Dulieu = .Range(.[A4], .[A65536].End(3)).Resize(, 9).Value
   For i = 1 To UBound(Dulieu)
      For j = 2 To 8
         Dulieu(i, 9) = Dulieu(i, 9) & Dulieu(i, j)
      Next
   Next
   .[A4].Resize(i - 1, 9) = Dulieu
   .[A4].Resize(i - 1, 9).RemoveDuplicates 9
   .[I4].Resize(i - 1).Clear
End With
End Sub
 
Cái vụ Advanced Filter hoặc Remove Duplicate muốn áp dụng cho mấy cột mà chẳng được, tùy theo anh quét chọn dữ liệu nguồn thôi
----------------

Chỗ màu đỏ sao không là .AdvancedFilter xlFilterCopy, , ShTemp.[B3], True vậy anh? Tức lọc thẳng sang sheet mới luôn chứ đâu cần lọc tại chỗ rồi lại mất công copy
Thêm nữa: Chỗ màu xanh hình như không đúng??? Người ta chỉ lọc 7 cột thôi (cột STT không tính)

Cảm ơn Ndu!
.AdvancedFilter xlFilterCopy, , ShTemp.[B3], True - mình không nghĩ ra. Còn vụ ".a3" màu xanh chắc chắn chứ không phải "hình như" không đúng và cách khắc phục là xoá STT trước khi lọc.

Vậy xin sửa lại như sau:
Mã:
Sub LocLS()
    Application.ScreenUpdating = False
    On Error Resume Next
    [a4:a65000].ClearContents
    ShTemp.Cells.Clear
    With Range("a3:h" & [b65536].End(3).Row)
        .AdvancedFilter xlFilterCopy, , ShTemp.[a3], True
        ActiveSheet.ShowAllData
        .ClearContents
    End With
    With ShTemp
        .Range("b4:b" & .[b65536].End(3).Row).Offset(, -1) = Evaluate("=Row(R:R)")
        .[a3:h65000].Copy [a3]
    End With
End Sub

@ Bác Kh biet Code này lọc tất cả các cột mà bác. Bác thử copy dữ liệu paste tiếp vào Sheet1 rồi chạy code thử xem.
 

File đính kèm

Lần chỉnh sửa cuối:
Cảm ơn Ndu!
.AdvancedFilter xlFilterCopy, , ShTemp.[B3], True - mình không nghĩ ra. Còn vụ ".a3" màu xanh chắc chắn chứ không phải "hình như" không đúng và cách khắc phục là xoá STT trước khi lọc.

Vậy xin sửa lại như sau:
Mã:
Sub LocLS()
    Application.ScreenUpdating = False
    On Error Resume Next
    [a4:a65000].ClearContents
    ShTemp.Cells.Clear
    With Range("a3:h" & [b65536].End(3).Row)
        .AdvancedFilter xlFilterCopy, , ShTemp.[a3], True
        ActiveSheet.ShowAllData
        .ClearContents
    End With
    With ShTemp
        .Range("b4:b" & .[b65536].End(3).Row).Offset(, -1) = Evaluate("=Row(R:R)")
        .[a3:h65000].Copy [a3]
    End With
End Sub

@ Bác Kh biet Code này lọc tất cả các cột mà bác. Bác thử copy dữ liệu paste tiếp vào Sheet1 rồi chạy code thử xem.
Cám ơn các thày và các bạn đã quan tâm . Chiều mình đi vắng chút nên phúc đáp chậm, mình sẽ text thử với dữ liệu thực ( do nhiều quá mình cắt bớt ) . Nếu vướng mình xin hỏi lại sau . Mình muốn text thử theo gợi ý của thày NDU và hướng dẫn của thày Hai Lúa Remove Duplicate mà cái office 2010 của mình nó lỗi , chán quá,
 
Lần chỉnh sửa cuối:
Cám ơn các thày và các bạn đã quan tâm . Chiều mình đi vắng chút nên phúc đáp chậm, mình sẽ text thử với dữ liệu thực ( do nhiều quá mình cắt bớt ) . Nếu vướng mình xin hỏi lại sau . Mình muốn text thử theo gợi ý của thày NDU và hướng dẫn của thày Hai Lúa Remove Duplicate mà cái office 2010 của mình nó lỗi , chán quá,

Lỗi như thế nào vậy bạn? Lưu ý là trong vùng dữ liệu của bạn không được trộn ô nhé.
 
Vậy xin sửa lại như sau:
Mã:
Sub LocLS()
    Application.ScreenUpdating = False
    On Error Resume Next
    [a4:a65000].ClearContents
    ShTemp.Cells.Clear
    With Range("[COLOR=#ff0000]a3[/COLOR]:h" & [b65536].End(3).Row)
        .AdvancedFilter xlFilterCopy, , ShTemp.[a3], True
        [COLOR=#ff0000]ActiveSheet.ShowAllData[/COLOR]
        .ClearContents
    End With
    With ShTemp
        .Range("b4:b" & .[b65536].End(3).Row).Offset(, -1) = Evaluate("=Row(R:R)")
        .[a3:h65000].Copy [a3]
    End With
End Sub
Hình như cũng còn vài chỗ chưa ổn anh à!
 
Hình như cũng còn vài chỗ chưa ổn anh à!
Đúng là không lọc thẳng thì sao phải ActiveSheet.ShowAllData (câu này thừa quên chưa xóa)
Còn vụ a3 trong
With Range("a3:h" & [b65536].End(3).Row) là để Copy tên cột vì bên trên mình dùng câu lệnh ShTemp.Cells.Clear

Không biết đã hết lỗi chưa ?
 
Đúng là không lọc thẳng thì sao phải ActiveSheet.ShowAllData (câu này thừa quên chưa xóa)
Còn vụ a3 trong
With Range("a3:h" & [b65536].End(3).Row) là để Copy tên cột vì bên trên mình dùng câu lệnh ShTemp.Cells.Clear

Không biết đã hết lỗi chưa ?
Tôi có chút việc chưa text với dữ liệu thực anh à . Mới text code của Bác Lê duy Thương và Quang Hải giảm đi được 71 tên trùng . Xin cám ơn tất cả các thày và các bạn .
 
Lần chỉnh sửa cuối:
Vậy bài 11 đã đáp ứng yêu cầu của bạn chưa?
Bây giờ nhà em mới sử lý xong office và làm theo hướng dẫn của thầy và nhận ra rằng có những điều thật đơn giản, nhưng không có thày chỉ thì vẫn không làm được . Xin cám ơn thày và tất cả các bạn .
 

Còn vụ a3 trong
With Range("a3:h" & [b65536].End(3).Row) là để Copy tên cột vì bên trên mình dùng câu lệnh ShTemp.Cells.Clear

Không biết đã hết lỗi chưa ?

Ah! Ý em là nên lấy từ cột B mới đúng chứ. Anh lấy cột A hóa ra lấy luôn STT?
 
Ah! Ý em là nên lấy từ cột B mới đúng chứ. Anh lấy cột A hóa ra lấy luôn STT?

Đúng là mình định lấy STT nhưng chỉ lấy tên cột thôi còn STT mình đã xóa trước rồi. Nhưng nghĩ lại thì chỉ cần lọc từ cột B rồi paste vào cột B của ShTemp là được.

... Bã xã "lão"Thay bị xuất huyết não anh à ! anh gọi động viên "lão"tý ĐT:0912087679...

Tôi vừa gọi điện cho Bác Thay, tình hình là Bác gái đã đỡ, đang tập đi lại, cầu chúc cho bác gái sớm bình phục.
 
Lần chỉnh sửa cuối:
Đúng là không lọc thẳng thì sao phải ActiveSheet.ShowAllData (câu này thừa quên chưa xóa)
Còn vụ a3 trong
With Range("a3:h" & [b65536].End(3).Row) là để Copy tên cột vì bên trên mình dùng câu lệnh ShTemp.Cells.Clear

Không biết đã hết lỗi chưa ?
Dữ liệu giả định thì code chạy tốt anh Chính à ! Nhưng tôi chép vào dữ liệu chính thì lỗi tôi không sửa code của anh được vì sheet 2 của tôi còn lọc tên hoặc địa danh nữa , mà code của anh tôi tôi không thấy có tên sheet nên không biết cách sửa . Để làm đến cùng thì anh chọn "Danh sách 30000 liệt sĩ tại các Nghĩa trang từ Quảng trị trở vào " và giúp tôi để tôi học các anh về kiến thức VBA luôn .
 
Dữ liệu giả định thì code chạy tốt anh Chính à ! Nhưng tôi chép vào dữ liệu chính thì lỗi tôi không sửa code của anh được vì sheet 2 của tôi còn lọc tên hoặc địa danh nữa , mà code của anh tôi tôi không thấy có tên sheet nên không biết cách sửa . Để làm đến cùng thì anh chọn "Danh sách 30000 liệt sĩ tại các Nghĩa trang từ Quảng trị trở vào " và giúp tôi để tôi học các anh về kiến thức VBA luôn .

Trong code trên thừa 1 dòng lệnh như Ndu đã nói nhưng không ảnh hưởng gì đến kết quả và tốc độ.

Tôi đã dowload danh sách 30.000 liệt sỹ chạy thử không thấy có lỗi gì. Kết quả trùng chưa kiểm tra kỹ nhưng về số lượng danh sách gốc là 30.337 sau khi lọc là 30.270 (giảm 67 người) không hiểu vì sao không up file lên được.

Code tôi viết theo yêu cầu của Bác là chép dữ liệu vào Sheet1 và lọc không trùng tại 7 cột không liên quan gì đến sheet khác.

Do đề phòng người dùng đổi tên sheet nên tôi đã đổi code name Sheet1 là ShDaTa và code name Sheet3 là ShTemp (sheet này là sheet trung gian nên ẩn đi) để viết code theo code name Sheet.

Lưu ý không được xóa Sheet1 Sheet3 còn việc đổi tên sheet1, sheet3 hoặc thêm bớt các sheet khác tùy ý.

Với Sheet2 hiện nay tôi chưa động tới, nếu bác có yêu cầu gì thêm thì cứ đưa lên, khả năng đến đâu tôi sẽ giúp đến đó.
 
Lần chỉnh sửa cuối:
Trong code trên thừa 1 dòng lệnh như Ndu đã nói nhưng không ảnh hưởng gì đến kết quả và tốc độ.

Tôi đã dowload danh sách 30.000 liệt sỹ chạy thử không thấy có lỗi gì. Kết quả trùng chưa kiểm tra kỹ nhưng về số lượng danh sách gốc là 30.337 sau khi lọc là 30.270 (giảm 67 người) không hiểu vì sao không up file lên được.

Code tôi viết theo yêu cầu của Bác là chép dữ liệu vào Sheet1 và lọc không trùng tại 7 cột không liên quan gì đến sheet khác.

Do đề phòng người dùng đổi tên sheet nên tôi đã đổi code name Sheet1 là ShDaTa và code name Sheet3 là ShTemp (sheet này là sheet trung gian nên ẩn đi) để viết code theo code name Sheet.

Lưu ý không được xóa Sheet1 Sheet3 còn việc đổi tên sheet1, sheet3 hoặc thêm bớt các sheet khác tùy ý.

Với Sheet2 hiện nay tôi chưa động tới, nếu bác có yêu cầu gì thêm thì cứ đưa lên, khả năng đến đâu tôi sẽ giúp đến đó.
Thế tôt rồi anh Chính ! Cám ơn anh . Vậy anh thức suốt đêm để làm à ? Anh làm tôi ngại quá . Vì vừa rồi có bạn Phuc_USC ở Gia lai thấy chủ đề có up lên danh sách liệt sĩ ở Nghĩa trang liệt sí Gia lai, nên nếu bạn ở nơi khác up lên nữa mình sợ trùng nên mới tính đến kiểm tra trùng . Thôi thì mình có tâm, còn tác dụng đến đâu, có ai tìm được người thân không ? còn nhờ may rủi nữa . Lần trước tôi vào các trang liệt sĩ trên Google tìm mờ cả mắt hàng tháng trời mới nghĩ giúp bạn đọc tiết kiệm thời gian bằng cách này . Họ chỉ cần nhập tên , hoặc xã Enter một cái, người thân có trong số 30000 này sẽ hiện ra . Không thì đi làm việc khác . Chứ ngồi dò hết danh sách , biết đến bao giờ . Thôi thì tôi nhờ các anh giúp vì bạn bè, vì đồng đội và vì một thời không thể quên : "Những con người mãi mãi tuổi hai mươi " ấy còn đang tha hương sứ người, nếu họ nhờ chúng ta mà về được quê hương, về được với gia đình thì mình bỏ chút sưc cũng đáng lắm anh ạ ! tôi đã từng gặp những người mẹ cả đời chờ con trong vô vọng, cứ nghĩ đến đã thấy mủi lòng ! Cám ơn anh .
 
Lần chỉnh sửa cuối:
Dù là thủ công thì với công cụ Advanced Filter hoặc Remove Duplicate cũng có thể ra kết quả trong nháy mắt thôi
Từ hôm trước, biết rằng không phải tự dưng Thày nói vậy, nhưng do nhận thức về công dụng của chức năng Advanced Filter chưa hết nên nhà em cứ phân vân mãi . Lâu rồi "ngộ" ra vấn đề và cố gắng thực hiện nó trong "2 nháy mắt" . Cám ơn thày ! lần này học thêm được mấy "chiêu" be bé của các thày và các bạn, cũng thấy hay lắm !
 
... Họ chỉ cần nhập tên , hoặc xã Enter một cái, người thân có trong số 30000 này sẽ hiện ra . Không thì đi làm việc khác . Chứ ngồi dò hết danh sách , biết đến bao giờ...

Tâm nguyện của Bác thật đáng trân trọng nhưng tôi thấy còn khá nhiều việc phải làm.

Trước hết là dữ liệu nguồn còn rất luộm thuộm nên phải làm trước một số việc để thống nhất dữ liệu trước khi lọc như:
- Font;
- Chữ hoa, chữ thường;
- Xóa ký tự trắng thừa;
- Xóa ký tự Chr(10) do xuống dòng bằng Alt + Enter (cái này phải dùng VBA);
- Thống nhất ký tự phân cách ("," ; "-" ; "/"...) trong quê quán; tỉnh, thành phố...
....vv...vv...
 
Lần chỉnh sửa cuối:
Tâm nguyện của Bác thật đáng trân trọng nhưng tôi thấy còn khá nhiều việc phải làm.

Trước hết là dữ liệu nguồn còn rất luộm thuộm nên phải làm trước một số việc để thống nhất dữ liệu trước khi lọc như:
- Font;
- Chữ hoa, chữ thường;
- Xóa ký tự trắng thừa;
- Xóa ký tự Chr(10) do xuống dòng bằng Alt + Enter (cái này phải dùng VBA);
- Thống nhất ký tự phân cách ("," ; "-" ; "/"...) trong quê quán; tỉnh, thành phố...
....vv...vv...
Đúng thế anh Chính ! Tôi lang thang trên mạng, cái cần tìm không thấy . Lũ bạn học ngày xưa, Anh em trong họ, ngoài làng chẳng thấy ai, nhưng nếu nghi vấn là dữ liệu mới thì tải về, so sánh xem có đúng là mình chưa có không ? nếu đúng thì bắt đầu xem xét để cắt, xén đưa chúng về theo khuôn mẫu của mình rồi up thêm lên thay tệp cũ . Vì dữ liệu hổ lốn của tất cả các trang khác nhau khi tải về nên việc tách chúng rồi dồn theo ý mình cũng mất khối thời gian . Trước riêng việc so sánh dữ liệu đã quá ngán rồi ( giờ nhờ các anh nên chắc đỡ cực hơn ) . các ký tự kèm theo thông tin thì mỗi chỗ dùng mỗi khác ( Dạo này tôi cũng cố vận dụng kiến thức của diễn đàn để cắt các ký tự thừa, như hàm tự tạo tách tên, trim, clean ... Nhưng cái cần là nội dung thông tin anh ạ : Nếu đúng họ tên , ngày sinh, quê quán, nơi hy sinh... thì bản thân người tìm thông tin phải xác minh lại chứ . Nhiều lúc nghĩ mình không biết mình làm cái việc "vô bổ" mà mệt người này có nên không nhỉ ?! Nhưng sau nghĩ có thể có người cần thì lại thôi , cố một tý vậy ! Mình nhớ có lần có bạn trên diễn đàn mở topic khai báo thông tin, tuổi tác để dễ xưng hô trên diễn đàn, mình khai :"Cái này hay, mình mới ...ngoài sáu mươi ." thế là người ta tá hỏa chạy chí chết ! Không biết tay này học VBA để sang "bên kia" sao ? Có thể "bên ấy " chắc gì đã có VBA nên trước mắt cứ cố học cái đã ! Nói chung tôi sẽ cố gắng cho dữ liệu chỉnh chu hơn . Kể hơi lan man, thôi chào anh nhé!
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom