Tìm tên bị trùng lặp trong bảng Exel

Liên hệ QC

rsvnm

Thành viên mới
Tham gia
5/3/09
Bài viết
21
Được thích
1
Giới tính
Nữ
Minh có một bảng Exel ghi rất nhiều tên khách (khoảng 300) các tên khách do nhiều người vào nên không tránh khỏi trùng lặp. Ví dụ có người nhập vào máy tên khách là Soon Beng Yong nhưng người khác lại nhập la Beng Soon Yong và có thể ai đó nhập là Yong Beng Soon tên khách thì quá nhiều nên không thể phát hiện ra là tên bị trùng lặp. Mong các ban giúp mình tìm các tên trùng lặp này bằng cách cứ phát hiện ra 4 ký tự trùng nhau thì hiển thị ra để mình kiểm tra lại.
Mình mới tham gia diễn đàn, mong sớm nhận được sự ủng hộ của các bạn

quần áo trẻ em | quan ao tre em | quần áo sơ sinh | quần áo bé trai | quần áo bé gái | bodysuit carter | quan ao so sinh | quan ao tre em nhap khau
 
Lần chỉnh sửa cuối:
Minh có một bảng Exel ghi rất nhiều tên khách (khoảng 300) các tên khách do nhiều người vào nên không tránh khỏi trùng lặp. Ví dụ có người nhập vào máy tên khách là Soon Beng Yong nhưng người khác lại nhập la Beng Soon Yong và có thể ai đó nhập là Yong Beng Soon tên khách thì quá nhiều nên không thể phát hiện ra là tên bị trùng lặp. Mong các ban giúp mình tìm các tên trùng lặp này bằng cách cứ phát hiện ra 4 ký tự trùng nhau thì hiển thị ra để mình kiểm tra lại.
Mình mới tham gia diễn đàn, mong sớm nhận được sự ủng hộ của các bạn
Dùng công thức, hoặc dùng VBA, có thể giải quyết chuyện này. Tuy nhiên, tôi nghĩ, vấn đề bạn muốn không khả thi.

Bởi vì làm sao mà dám chắc được cái tên "bị đảo vị trí" đó là của 1 người? Lỡ có ai đó có tên (First Name) trùng với họ (Last Name) của một người khác thì sao? Bạn nhập thành một người à?

Ví dụ nhé, Lê Nguyễn Trần và Trần Lê Nguyễn là hai người khác nhau hoàn toàn đó bạn ơi, một người tên Trần, họ Lê, còn người kia tên Nguyễn, họ là Trần (cả hai đều là bạn của tôi nên tôi biết).
 
Chị ơi cột dữ liệu của em nhiều lắm em copy ra để chị xem rồi giúp em nhé, dữ liệu hàng ngày được cặp nhật. À mà ở đây chỉ được đánh 1000 ký tự thôi nên em cắt bớt đấy

Mr.Richard Zuercher
Mr.Koichiro YamamotoMr.Minoru YamamotoStephan WijnsbergheMr.Federico VoglinoSylvia VliegenFrancis VanderhaeghenJean Van Der HaegenMr.Asao TsujiMs.Teresina TonioloClaire TillekaertsMarta TalensDr.Gabor Szeplaki-NagyMyriam SchepersMr.Volker SchenkMr.Fernando RocchiaMr.Giuseppe PortaMs.Maria PillitteriMs. Pham Minh DucMs.Donatella PellizzariMr.Takaharu OmiMr. Nguyen Quang LuanMr. Nguen Van LeMr.Osamu NakanishiMr.Satoshi NakamuraFernando Mosquera MartinezMr.Yoshiyuki MoriyamaElena Montoro Garcia Mohammed AlohaliSteve MattensMr.Toshiaki MasudaMs.Valeria MassaraniMr.Gerard MartinMr.Richard MartinRobert LopezBernard LenssensMr.Takashi KoyamaMr.Hiroshi KosoSpyridon KintziosLance KhooLoannis KakavoutisMs.Akiko IshiPaul HuybrechtsJean Pierre HeirmanDr.Rolf HahnDr.Dieter GenskeMr.Gilles GarciaMr.Tadashi FujiwaraMr. Fahad AljarbouDr.Thomas ErtelMr.Dominique DoculotMr.Michel DewanckeleHerman De SchamphelaereMr.Paul CorbeelMr. Chiang Kuo HuaMr. Chiang 2Ms.Marcella BressanMr.Yuji AokiMr.Wendy AltobelloMr.Bertolon KaposvariMr.Stefano GandiniMr.Ryan CollinsMr.Javier CasasnovasMr.Terrence BillsMr.Enlisted AideCaptain.Flag AideMr.Mike AdamsMr.Andy ZiardisMrs.Doris Wohlschlaegl AschbergerIsabel Van WaesMr. Trinh Hoai GiangMr. Sng Cheng HuiMr.John SmithMr.Rudolf SchumachersHerman SchepersSergio Jose SanchezMr.William PowerMs.Ginette PomminvilleMr.Ian PegingtonEnric PedrosMs. Pang Wee PingRene OlsenMr.Johan NyveneDr.Claus NowakMr. Ng Kok HweeMr.Simon MogfordMr.Garry MahlbergVeerle LisabethMs. Le Lan ChiJane LambertMs.Evon LamM. KuritaMr.Ilan KeidarAdam JosephMs.Debra JohnstonMr.John King Jeremy StuartMr. Hoang Trong KimKarl GranovMr.Eric Rene Jean GourmelonMs.Helen GohMr.Jeremy GaillardMr.Steve DowerMr.Carlos Dominguez AgulleiroGeert DomMrs.Monnik DesmethMr.Denis DaubneyMr.Emiel CornelisMs.Lynette ButlerGert BorritsJean BlondeelMr.Peter BlaszykMs.Paula Maria BennettMrs.Janice BaileyMr.Puikau Peter AuyeungC. AnMr.George TangoOrtwin SchmidtMr.Hiroyasu MiyazakiMr.Atsushi GamoMr.Jonathan VillannuevaMr.Mike SmithMr.Patel Rajat LalbhaMr.Jason QuinlogMr.Gerard NajmanMr.Scott McQuillenMr.Kenneth MaustMr.Vince LowellMr.Ramsay Garrison LatimerMs.Virginia Ramsey HutchenMr.Louis HuachacheMs.Angela EdwardsMr.Toshihiro KaihoshiMr.Bourgeois JacquesMr.Jimmy CheungMs.Ann Auta-JonesMr. Ang Kiam ChongMr.Nicolas YongMr.Joseph Wong Chi KeungMr.M Van Der VoortFrank Van CampenhoutMr.Noel TrustrumMr. Tiong Kuok ThaiMs.Adeline Teo Ah LahLersak TejayanMr.Steven Tay Beng KuanMr.Linus TanMr.Ariff SultanMr.Mark StirlingMr.John SmithMr. Siti Safina SufianMr.Joseph Sim Soo ChyeMr.Shinichi SakaiTina Radford Pankaj MehraMs. Nguyen Ngoc TrangMr. Nguyen HungMr. Ng Hua ChongMr. Ng Beng LimMr.Alex NgMr.Nobuyuki Matsumoto



quần áo trẻ em | quan ao tre em | quần áo sơ sinh | quần áo bé trai | quần áo bé gái | bodysuit carter | quan ao so sinh | quan ao tre em nhap khau
 
Lần chỉnh sửa cuối:
Lần chỉnh sửa cuối:
Trời! Cái mình cần là 1 file Excel chứ có bảo bạn paste lên như vậy đâu?
Cái hình thức thể hiện và các tình huống trong file sẽ giúp ít rất nhiều cho việc tạo code. Chứ đống dữ liệu này nhìn vào hoa cả mắt thì làm gì nỗi hả em.
Em nhấn vào nút "Đổi sang khung lớn" rồi tìm ở dưới nút "Tải file Từ máy" rồi nạp file đó vào nha!
Thân.
 
Bạn thử đoạn mã sau xem nhé.
PHP:
Sub TrungTen()
    Columns(1).Select
    Dim I As Long, J%
    Dim A1() As String
    I = 1
    Dim Ten As String
    On Error Resume Next
    While Cells(I, 1).Value <> ""
        A1 = Split(Trim(Cells(I, 1).Value), " ")
        For J = 0 To UBound(A1)
            Ten = ""
            Cells(1, 1).Activate
            Ten = Selection.Find(What:=A1(J), After:=ActiveCell, LookIn:=xlFormulas, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Value
            If IsError(Err) Then Err.Clear
            If Ten <> "" And Ten <> Cells(I, 1).Value Then
                If MsgBox("Có khả năng trùng tê giữa: " & Chr(34) & Cells(I, 1).Value & Chr(34) & " và " & Chr(34) & Ten & Chr(34) & "." & vbCrLf & _
                "Có tiếp tục tìm nữa không?", vbYesNo) = vbNo Then Exit Sub
            End If
        Next
        I = I + 1
    Wend
End Sub
 
Các anh/chị ơi em muốn hiển thị tất cả các tên có vẻ là trùng lặp sang cột bên cạnh cơ, em thử đoạn mã của chị mà không được. Em gắn file của em vào các chị thử giúp em với.
À sao em gắn file lần nào cũng bị fail các anh/chị cho em địa chỉ email để em gửi file địa chỉ của em là rsvnm@meliahanoi.com.vn
Em đã tìm được địa chỉ email của chị tuyetbay và chị hoa35ktxd va gửi file rồi các chị mở email ra rồi giúp em với


quần áo trẻ em | quan ao tre em | quần áo sơ sinh | quần áo bé trai | quần áo bé gái | bodysuit carter | quan ao so sinh | quan ao tre em nhap khau
 
Lần chỉnh sửa cuối:
Từ Data tên sao ta không tạo mã các tên này nhỉ?
Khi ấy bài toán sẽ dễ hơn
 
Lần chỉnh sửa cuối:
Đây là vấn đề "nhất quán dữ liệu" do dữ liệu được nhiều người nhập.
Tùy đặc điểm của công việc mà nhập là xx được hiểu là nhập yy. Như vậy bạn phải sửa trực tiếp.

Để hỗ trợ quá trình sửa trực tiếp, bạn có thể làm theo cách sau (nói đại thể, nếu bạn không hiểu thể hiện cái đại thể đó thì hỏi lại)
Bước 1. Lọc duy nhất "cột dữ liệu gốc cần sửa" ra 1 chỗ và chép thêm thành cột bên cạnh (gọi là vùng XXX).
Bước 2. Đối chiếu dữ liệu trên cột 1 sai thì sửa lại trên cột 2 (đây là sửa trực tiếp đó).
Bước 3. Dùng hàm VLOOKUP (1 ô của cột dữ liệu gốc cần sửa, vùng XXX, 2, 0 ) để chuyển dữ liệu ở cột 2 về ngang hàng với ô của cột dữ liệu gốc (có thể thêm cột cạnh cột dữ liệu gốc cần sửa). Và chép xuống cho đến hết
Bước 4. Sao chép "value" cột có hàm VLOOKUP sang "cột dữ liệu gốc cần sửa"
 
Lần chỉnh sửa cuối:
Chị ơi cột dữ liệu của em nhiều lắm em copy ra để chị xem rồi giúp em nhé, dữ liệu hàng ngày được cặp nhật. À mà ở đây chỉ được đánh 1000 ký tự thôi nên em cắt bớt đấy

Thì bạn cứ trích hay giả mạo, đưa file lên mới xem xét được;
Cứ nói qua nói lại tốn thời gian của nhiều người, trong đó có bạn!
Trong file thì tha hồ dài, chứ 10^4 từ bỏ bèn gì!
 
Lần chỉnh sửa cuối:
hỏi về cách tìm số trùng lặp.

Mình đang tìm bài có nội dung tương tự như thắc mắc của mình, cho mình hỏi ké nha các bạn.
Ở ô A1 có nội dung 65-86-79-100
Ở ô A2 có nội dung 65
Ở ô A3 mình muốn lặp công thức sao cho nếu tìm trong ô A1 mà có nội dung của ô A2 thì ô A3 có kết quả = A2

Cảm ơn các bạn và xin lỗi vì chen ngang
 
du lieu dang so

Ban Oi cho minh hoi 1 chut vi minh chua biet nhieu lam.
Cụ thể lam mình có 1 côt dữ liệu dạng số trong excel ( VD : 1,2,3,4,4,4,5,7,8,9,10)
làm thế nào để tìm ra và thông báo con sô bị lặp lại trong cột dãy số trên ( cụ thể là sô 4 bị lặp lại 3 lần) và con số bị nhây cách ( cụ thể là số 6 không có trong cột số trên).
nếu có thể viết giup mình đoạn mã chương trình trong VB dể mình tham khảo vi minh đang tim hiểu sách hương dẫn nhưng khó hiểu quá với lai mình không phai đân IT ma chỉ tim hiểu đôi chút xem kha năng cua minh
Thanks Bạn nhiều
Bạn thử đoạn mã sau xem nhé.
PHP:
Sub TrungTen()
    Columns(1).Select
    Dim I As Long, J%
    Dim A1() As String
    I = 1
    Dim Ten As String
    On Error Resume Next
    While Cells(I, 1).Value <> ""
        A1 = Split(Trim(Cells(I, 1).Value), " ")
        For J = 0 To UBound(A1)
            Ten = ""
            Cells(1, 1).Activate
            Ten = Selection.Find(What:=A1(J), After:=ActiveCell, LookIn:=xlFormulas, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Value
            If IsError(Err) Then Err.Clear
            If Ten <> "" And Ten <> Cells(I, 1).Value Then
                If MsgBox("Có khả năng trùng tê giữa: " & Chr(34) & Cells(I, 1).Value & Chr(34) & " và " & Chr(34) & Ten & Chr(34) & "." & vbCrLf & _
                "Có tiếp tục tìm nữa không?", vbYesNo) = vbNo Then Exit Sub
            End If
        Next
        I = I + 1
    Wend
End Sub
 
Sửa giúp macro

Mình mới copy được macro để chạy chương trình delete các dữ liệu trùng lắp nhưng nó hơi bị hạn chế ở chỗ nếu có 01 dữ liệu cùng trùng lắp 03 -04 dòng thì nó delete được 01 hoặc 02 dòng.Mình muốn nó delete hết và chỉ giử lại 01 dòng thôi. Mọi người giúp e với. Cả nhà tham khảo cái macro này nhé

Sub DelDups_OneList()
Dim iListCount As Integer
Dim iCtr As Integer
' Turn off screen updating to speed up macro.
Application.ScreenUpdating = False
' Get count of records to search through.
iListCount = Sheets("Sheet1").Range("A1:A100").Rows.Count
Sheets("Sheet1").Range("A1").Select
' Loop until end of records.
Do Until ActiveCell = ""
' Loop through records.
For iCtr = 1 To iListCount
' Don't compare against yourself.
' To specify a different column, change 1 to the column number.
If ActiveCell.Row <> Sheets("Sheet1").Cells(iCtr, 1).Row Then
' Do comparison of next record.
If ActiveCell.Value = Sheets("Sheet1").Cells(iCtr, 1).Value Then
' If match is true then delete row.
Sheets("Sheet1").Cells(iCtr, 1).Delete xlShiftUp
' Increment counter to account for deleted row.
iCtr = iCtr + 1
End If
End If
Next iCtr
' Go to next record.
ActiveCell.Offset(1, 0).Select
Loop
Application.ScreenUpdating = True
MsgBox "Done!"
End Sub
 
Mình mới copy được macro để chạy chương trình delete các dữ liệu trùng lắp nhưng nó hơi bị hạn chế ở chỗ nếu có 01 dữ liệu cùng trùng lắp 03 -04 dòng thì nó delete được 01 hoặc 02 dòng.Mình muốn nó delete hết và chỉ giử lại 01 dòng thôi. Mọi người giúp e với. Cả nhà tham khảo cái macro này nhé
Code trên lằng nhằng quá
Gữi bạn code khác, dùng AdvancedFilter, chẳng cần vòng lập nào
PHP:
Sub RemoveDuplicate()
  On Error Resume Next
  With Application.InputBox("Chon vung du lieu" & vbLf & _
       "Bao gom ca tieu de", Type:=8)
    If .Cells Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    .AdvancedFilter 1, , , True
    .SpecialCells(12).Select
    .Parent.ShowAllData
    Selection.EntireRow.Hidden = True
    .SpecialCells(12).Delete 2
    .Parent.Cells.EntireRow.Hidden = False
    .Cells(1, 1).Select
  End With
  Application.ScreenUpdating = True
End Sub
Thuật toán:
- Dùng AdvancedFilter lọc tại chổ những phần tử duy nhất
- Chọn các cell đang hiện (tại vùng dữ liệu) bằng cách Ctrl + G\Special\Visible cells only
- ShowAll Data
- Ẩn dòng toàn bộ các cell đã Select
- Xóa dòng (hoặc xóa cell) trên toàn bộ các cell đang hiện của vùng dữ liệu
- Cho hiện toàn bộ dữ liệu đã ẩn
Bảo đảm tốc độ như "tia chớp"
 

File đính kèm

  • Remove Duplicate.xls
    24 KB · Đọc: 221
Lần chỉnh sửa cuối:
Code trên lằng nhằng quá
Gữi bạn code khác, dùng AdvancedFilter, chẳng cần vòng lập nào
PHP:
Sub RemoveDuplicate()
  On Error Resume Next
  With Application.InputBox("Chon vung du lieu" & vbLf & _
       "Bao gom ca tieu de", Type:=8)
    If .Cells Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    .AdvancedFilter 1, , , True
    .SpecialCells(12).Select
    .Parent.ShowAllData
    Selection.EntireRow.Hidden = True
    .SpecialCells(12).Delete 2
    .Parent.Cells.EntireRow.Hidden = False
    .Cells(1, 1).Select
  End With
  Application.ScreenUpdating = True
End Sub
Thuật toán:
- Dùng AdvancedFilter lọc tại chổ những phần tử duy nhất
- Chọn các cell đang hiện (tại vùng dữ liệu) bằng cách Ctrl + G\Special\Visible cells only
- ShowAll Data
- Ẩn dòng toàn bộ các cell đã Select
- Xóa dòng (hoặc xóa cell) trên toàn bộ các cell đang hiện của vùng dữ liệu
- Cho hiện toàn bộ dữ liệu đã ẩn
Bảo đảm tốc độ như "tia chớp"
Hi Chào bạn ,đoạn Code này chạy tốt quá, cho mình hỏi thêm nếu không lấy phần tiêu đề chi lấy giá trị duy nhất của phần nội dung không bao gôm tiêu đề mình phải điều chỉnh phần nào của đoạn code nay vậy bạn ,chỉ mình với ,cảm ơn bạn nhiều nhé
 
Code trên lằng nhằng quá
Gữi bạn code khác, dùng AdvancedFilter, chẳng cần vòng lập nào
PHP:
Sub RemoveDuplicate()
  On Error Resume Next
  With Application.InputBox("Chon vung du lieu" & vbLf & _
       "Bao gom ca tieu de", Type:=8)
    If .Cells Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    .AdvancedFilter 1, , , True
    .SpecialCells(12).Select
    .Parent.ShowAllData
    Selection.EntireRow.Hidden = True
    .SpecialCells(12).Delete 2
    .Parent.Cells.EntireRow.Hidden = False
    .Cells(1, 1).Select
  End With
  Application.ScreenUpdating = True
End Sub
Thuật toán:
- Dùng AdvancedFilter lọc tại chổ những phần tử duy nhất
- Chọn các cell đang hiện (tại vùng dữ liệu) bằng cách Ctrl + G\Special\Visible cells only
- ShowAll Data
- Ẩn dòng toàn bộ các cell đã Select
- Xóa dòng (hoặc xóa cell) trên toàn bộ các cell đang hiện của vùng dữ liệu
- Cho hiện toàn bộ dữ liệu đã ẩn
Bảo đảm tốc độ như "tia chớp"
Lâu lắm rồi mới thấy thầy lên diễn đàn. Cho em hỏi cái lọc trùng này em thấy lọc ít thì nó nhanh em có file Log nó khoảng 80000 dòng thì chạy nó treo máy luôn ạ. Có cách lọc trùng nhanh với dữ liệu lớn không ạ. Em cảm ơn
 
Web KT

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

Back
Top Bottom