Xin chỉ giáo cách lọc dữ liệu trùng (2 người xem)

Liên hệ QC

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

bun_oc_girl

Thành viên mới
Tham gia
24/3/08
Bài viết
4
Được thích
0
Mọi người vui lòng giúp tôi xử lý database này với ạ. Tôi đã tham khảo nhiều topic về "lọc dữ liệu trùng" tại diễn đàn mình nhưng không thấy cách nào ứng dụng được với trường hợp của tôi. Mong mọi người bỏ chút thời gian xem qua file đính kèm và giúp đỡ ạ. Tôi xin chân thành cám ơn.

Đặc điểm dữ liệu: Trong khoảng 100.000 dòng dữ liệu, có rất nhiều SĐT trùng. Mỗi dòng dữ liệu bao gồm tên, SĐT, email, ngày cập nhật email và khoảng 20 cột khác. Tuy nhiên SĐT và email là quan trọng nhất.
Yêu cầu lọc dữ liệu: Lọc bỏ bớt những dòng trùng SĐT cho gọn database, nhưng phải giữ càng nhiều email càng tốt, ở vị trí tương ứng với SĐT.
Hướng xử lý: Những dòng trùng hoàn toàn thì bị bỏ hết. Những dòng trùng SĐT nhưng không trùng email thì vẫn bị bỏ nhưng những thông tin về email, ngày cập nhật tương ứng phải được ghi nhận lại tại dòng đầu tiên ghi nhận SĐT đó (cột mới).
(Vui lòng xem chi tiết trong file đính kèm ạ)
 

File đính kèm

Mọi người vui lòng giúp tôi xử lý database này với ạ. Tôi đã tham khảo nhiều topic về "lọc dữ liệu trùng" tại diễn đàn mình nhưng không thấy cách nào ứng dụng được với trường hợp của tôi. Mong mọi người bỏ chút thời gian xem qua file đính kèm và giúp đỡ ạ. Tôi xin chân thành cám ơn.

Đặc điểm dữ liệu: Trong khoảng 100.000 dòng dữ liệu, có rất nhiều SĐT trùng. Mỗi dòng dữ liệu bao gồm tên, SĐT, email, ngày cập nhật email và khoảng 20 cột khác. Tuy nhiên SĐT và email là quan trọng nhất.
Yêu cầu lọc dữ liệu: Lọc bỏ bớt những dòng trùng SĐT cho gọn database, nhưng phải giữ càng nhiều email càng tốt, ở vị trí tương ứng với SĐT.
Hướng xử lý: Những dòng trùng hoàn toàn thì bị bỏ hết. Những dòng trùng SĐT nhưng không trùng email thì vẫn bị bỏ nhưng những thông tin về email, ngày cập nhật tương ứng phải được ghi nhận lại tại dòng đầu tiên ghi nhận SĐT đó (cột mới).
(Vui lòng xem chi tiết trong file đính kèm ạ)
Cũng quái chiêu nhỉ!
Thử kết quả này xem sao.
 

File đính kèm

Hướng dẫn bạn làm một cách "đơn giản như sau"

- Bước 1: Tạo 1 cột phụ nối chuỗi SĐT vào Email và kéo hết dữ liệu

- Bước 2: chọn công cụ Data Remove Duplicates cho cột vừa tạo Expand toàn vùng dữ liệu là xong.
 
Cám ơn hai bác đã ra tay tương trợ ạ. Em đã thử file của bác Ba Tê gạo cội thấy... sao mà bác giỏi thế? Thú thực là em hỏi nhưng cũng không nghĩ là sẽ làm được, cuối cùng mà bác lại làm được. Thật là ngưỡng mộ bác!!! }}}}}

Tuy nhiên, bác có thể giúp em lọc bớt email trùng không? Hiện tại, các email đã được kéo lên cùng dòng với SĐT nhưng những email trùng thì chưa bị loại bỏ, và cứ tạo thành cột mới. Nếu bác có thể có hàm nào loại hết các email trùng nhau thì đúng là hoàn hảo rồi bác ơi.

Mà bác viết hàm thế nào mà hay quá, vì em bỏ một lúc cả hai chục ngàn dòng data mà máy chạy xíu là xong rồi. Chả bù với mấy hàm em tự viết, hàm đơn giản mà máy cũng ì ạch mãi mới xong.
 
Cám ơn hai bác đã ra tay tương trợ ạ. Em đã thử file của bác Ba Tê gạo cội thấy... sao mà bác giỏi thế? Thú thực là em hỏi nhưng cũng không nghĩ là sẽ làm được, cuối cùng mà bác lại làm được. Thật là ngưỡng mộ bác!!! }}}}}

Tuy nhiên, bác có thể giúp em lọc bớt email trùng không? Hiện tại, các email đã được kéo lên cùng dòng với SĐT nhưng những email trùng thì chưa bị loại bỏ, và cứ tạo thành cột mới. Nếu bác có thể có hàm nào loại hết các email trùng nhau thì đúng là hoàn hảo rồi bác ơi.

Mà bác viết hàm thế nào mà hay quá, vì em bỏ một lúc cả hai chục ngàn dòng data mà máy chạy xíu là xong rồi. Chả bù với mấy hàm em tự viết, hàm đơn giản mà máy cũng ì ạch mãi mới xong.
Đã sửa code lại, 1 SĐT không có email bị trùng.
Không có hàm nào trong file cả, đó là VBA, muốn đọc nó thì Alt+F11 mà xem trong Module, có Sub này:
Khi mở file nhớ Enable Macros, bấm nút là nó "rùng mình" thội
[GPECODE=vb]
Public Sub LOC_GPE()
Dim sArr(), dArr(), DTMail As Object, I As Long, J As Long, K As Long
Dim Dic As Object, Tem As Variant, N As Long, MaxN As Long, Dmail As String
Set Dic = CreateObject("Scripting.Dictionary")
Set DTMail = CreateObject("Scripting.Dictionary")
With Sheets("DATA")
sArr = .Range(.[B3], .[B3].End(xlDown)).Resize(, 5).Value2
End With
ReDim dArr(1 To UBound(sArr, 1), 1 To 1000)
For I = 1 To UBound(sArr, 1)
Dmail = sArr(I, 2) & "#" & sArr(I, 3)
If Not DTMail.Exists(Dmail) Then
DTMail.Add Dmail, ""
Tem = sArr(I, 2)
If Not Dic.Exists(Tem) Then
K = K + 1
Dic.Add Tem, K
dArr(K, 1) = 3
For J = 1 To 5
dArr(K, J + 1) = sArr(I, J)
Next J
Else
N = dArr(Dic.Item(Tem), 1) + 3
dArr(Dic.Item(Tem), 1) = N
If N > MaxN Then MaxN = N
For J = 1 To 3
dArr(Dic.Item(Tem), N + J) = sArr(I, J + 2)
Next J
End If
End If
Next I
For I = 1 To K
dArr(I, 1) = I
Next I
With Sheets("GPE")
.[A5:A1000000].Resize(, 1000).ClearContents
.[A5].Resize(K, MaxN + 3) = dArr
End With
Set Dic = Nothing
Set DTMail = Nothing
End Sub[/GPECODE]
 

File đính kèm

Web KT

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

Back
Top Bottom