Giúp hàm tìm các từ duplicate và trả về kết quả các từ bị duplicate (1 người xem)

Liên hệ QC

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

ginkgo36

Thành viên mới
Tham gia
13/12/12
Bài viết
38
Được thích
7
Chào cả nhà. Em có 1 bài toán thế này, mong mọi người giúp đỡ.
Em muốn kiểm tra xem các dữ liệu trong 1 hàng, các header có tên là "cột 1" đến "cột 48" của e có bị duplicate lẫn nhau hay ko? Nếu có thì sẽ trả về cho e các từ bị duplicate

Sau khi chạy cái hàm, e có kết quả như sau:
STT 1: có các từ bị duplicate là: OD 26 MM, 26 MM, ABSORBABLE
STT 2: có các từ bị duplicate là: 13, 5, DOUBLE ARM, MONOFILAMENT, NON-BSORBABLE, NONABSORBABLE
STT 3: có các từ bị duplicate là: NON-BSORBABLE, NONABSORBABLE
STT 4: có các từ bị duplicate là: 7-0, 7.0
STT 5: có các từ bị duplicate là: MAYO, TROCAR POINT

Ở STT 1: OD 26 MM và 26 MM sẽ được tính là duplicate với nhau. Vì em muốn bỏ 1 số từ không cần thiết như khoảng trắng, dấu chấm, dấu phẩy, dấu -, và một số kí tự đặc biệt khác, để đưa những từ về chung 1 format. Từ đó thì xác định duplicate chính xác hơn và tránh tình trạng bị lọt sổ. Như vậy sau khi bỏ OD, khoảng trắng thì sẽ chỉ còn 26MM. ---> duplicate

Tương tự như vậy NON-BSORBABLE, NONABSORBABLE được tính là duplicate, 7-0, 7.0

Trong STT 2: MONOFILAMENT xuất hiện 2 lần ở "Côt 27" và "Cột 48"


Trong STT 5: từ MAYO xuất hiện 2 lần ở "Cột 3" và "Cột 4". TROCAR POINT xuất hiện 2 lần ở "Cột 27" và "Cột 36".

Trong 1 cell có thể chứa nhiều từ, và được ngăn cách bằng dấu ;.

Kết quả mong muốn em có để trong file đính kèm.

Như vậy em tóm lại bài toán của e như thế nào:
Tìm các từ bị duplicate trong 1 hàng. Trước khi kiểm tra có dupl hay không thì sẽ clean các từ trong đó bằng cách bỏ khoảng trắng, dấu chấm, dấu phẩy, dấu -, và một số kí tự đặc biệt khác ( ở đây e mới chỉ nêu ra được 1 vài cái).
Clean để map cho dễ nhưng kết quả trả về thì phải từ chính xác để mình có thể search cho dễ dàng. Ví dụ OD 26 MM sau khi clean sẽ là 26MM. Nhưng kết quả trả về vẫn là OD 26 MM.
Em đang dùng excel 2k7.
Mong mọi người giúp đỡ. Thanks cả nhà
 

File đính kèm

Lần chỉnh sửa cuối:
HIx, bài toán này khó hen moi người :(. E dùng postgresql 2,3 bước mới lấy ră dược các từ bị duplicate :(
 
Upvote 0
bạn muốn tìm từ trùng trong một hàng hay một cột (từ cột 1 đến cột 48)?
theo minh họa trong file của bạn thì có vẻ là dò trong từng cột, mình hỏi cho chắc để làm khỏi mất công.
bạn phải cô động câu hỏi lại, viết dài như vậy người ta đọc vô đã ngán rôi...hihhii
 
Upvote 0
Em có bài khác mong mọi người giúp trước:
em có dữ liệu trong các cell như thế này:
A1 dữ liệu: "1;1;2;3;4;5;7;3;6;3"
A2 dữ liệu: "23;3453;AA;23;45645,AA"
A3 dữ liệu: "3452;7695756;2;1;432;3452"

Dùng hàm gì để có thể trả về các từ dupl ở trong các Cell. Sau khi chạy hàm thì kết quả ở các Cell sẽ như sau(Kết quả trả ở cột B1,B2 và B3):
B1: 1;3
B2: 23;AA
B3: 3452

Thanks cả nhà
 
Upvote 0
Dữ liệu của bạn không đồng nhất
"23;3453;AA;23;45645,AA" => Dấu phẩy và dấu 2 chấm đan xen
Nếu dữ liệu của bạn đòng nhất dấu 2 chấm bạn tham khảo Code này
Mã:
Mã:
Function Tach(Chuoi As String)
Dim Arr
Dim i, j, k, t As Integer
    Arr = Split(";" & Chuoi, ";")
        With CreateObject("scripting.dictionary")
            For i = 1 To UBound(Arr)
                For j = 1 To UBound(Arr)
                    If Arr(i) = Arr(j) Then
                        k = k + 1
                    End If
                Next
                    If k > 1 And Not .exists(Arr(i)) Then
                        t = t + 1
                        .Add Arr(i), t
                        Tach = Tach & Arr(i) & ";"
                    End If
                    k = 0
            Next
        End With
Tach = Left(Tach, Len(Tach) - 1)
End Function

Không biết bài này có thể giải quyết bằng
VBScript.RegExp được không?
 
Lần chỉnh sửa cuối:
Upvote 0
Dữ liệu của bạn không đồng nhất
"23;3453;AA;23;45645,AA" => Dấu phẩy và dấu 2 chấm đan xen
Nếu dữ liệu của bạn đòng nhất dấu 2 chấm bạn tham khảo Code này
Mã:
[/COLOR][COLOR=#000000]
Không biết bài này có thể giải quyết bằng [/COLOR]VBScript.RegExp được không?[/QUOTE]
Bài này nếu dùng Split thì bạn phải biết tất cả các ký tự phân cách trong cell chứa dữ liệu để thay thế hết
Nếu dùng RegExp thì có thể bỏ qua công đoạn này, không quan tâm tới các ký tự phân cách & không dùng Split
Đại khái code như thế này:
[CODE]Public Function Trung(Cll)
    Dim Re, ReTim, d, Cl, Kq
    Set d = CreateObject("scripting.dictionary")
    Set Re = CreateObject("vbscript.regexp")
        With Re
            .Global = True
            .Pattern = "[0-9]+|[A-Za-z]+"
            Set ReTim = .Execute(Cll)
        End With
            For Each Cl In ReTim
                If Not d.exists(Cl.Value) Then
                    d.Add Cl.Value, 1
                Else
                    If d.Item(Cl.Value) = 1 Then Kq = Kq & "; " & Cl.Value
                    d.Item(Cl.Value) = d.Item(Cl.Value) + 1
                End If
            Next Cl
    If Kq = "" Then
        Trung = "Cóc có em nào trùng"
    Else
        Trung = Right(Kq, Len(Kq) - 2)
    End If
End Function
Nhưng theo mình thì bài này là bài mà chủ Topic muốn dẫn sang bài số 1 thôi. Híc

ginkgo36
HIx, bài toán này khó hen moi người :(. E dùng postgresql 2,3 bước mới lấy ră dược các từ bị duplicate :(
To ginkgo36:
Thật ra bài đó hổng có "khó hen khó suyễn" gì hết
Trong câu hỏi, bạn sử dụng tiếng nước trong nước ngoài đan xen nhau "búa xua", giải thích rất nhiều nhưng đọc xong ....hổng hiểu gì ráo
Hãy giải thích thế nào thì được tinh là ...."duplicate", thí dụ ở hàng 2, hãy giải thích tại sao số 13 được tính là duplicate
Thân
 

File đính kèm

Upvote 0
Bác Cò cho dhn hỏi thêm 1 câu nữa. Từ Topic http://www.giaiphapexcel.com/forum/showthread.php?69985-Thử-nghiệm-VBScript-RegExp/page5 dhn thấy rằng, regexp có khả năng tìm kiếm đánh dấu các dữ liệu trùng trong 1 chuỗi và bằng thuật toán nào đó có thể lấy các chuỗi $1, $2 ... ra (hiện nay bài toán của bác Siwtom đang bỏ ngỏ).
Vậy có cách giải bài này theo suy nghĩ của dhn không? Nếu có thì mong các bác chỉ giáo.
 
Upvote 0
Web KT

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

Back
Top Bottom