lọc dữ liệu trùng trên nhiều file excel (2 người xem)

Liên hệ QC

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

qwerty321

Thành viên mới
Tham gia
13/9/17
Bài viết
14
Được thích
1
Giới tính
Nam
Tôi có gửi theo các file excel mẫu, trình bày trên này hơi khó.
1, Giả sử tôi có 1 file như thế này:
Tên | số điện thoại | Địa chỉ | mã hiệu xe
Trần A | 013526874 | 123 Trần Phú, Bến Nghé, Tỉnh A | wave-2648
Trần A | 013526874 | 123 Trần Phú, Bến Nghé, Tỉnh A | SH-2468, Shark 6897
Võ C | 021365464 | 344 Võ Văn Tần, Bình Trị, Tỉnh A | Vision-6975
Trần B | 013526874 | 123 Trần Phú, Bến Nghé, Tỉnh A | dream-0256
Làm sao để dựa vào số điện thoại trùng, gộp các cell khác lại với nhau thành 1 row, các value cách nhau bởi dấu "-" hoặc dấu "," . như số 013526874 sẽ được gộp thành 1 row:
Trần A - Trần B|013526874|123 Trần Phú, Bến Nghé, Tỉnh A | wave-2648 - SH-2468, Shark 6897 -dream-0256


2, Giả sử tôi có 3 file có tên: Tỉnh A, Tỉnh B, Tỉnh C như thế này
Tên | số điện thoại | Địa chỉ | mã hiệu xe
Trần A | 013526874 | 123 Trần Phú, Bến Nghé, Tỉnh A | wave-2648
Nguyễn B | 021156458 | 215 Nguyễn Văn Trỗi, Tân Định, Tỉnh A | SH-2468, Shark 6897
Võ C | 021365464 |344 Võ Văn Tần, Bình Trị, Tỉnh A | Vision-6975

Cho tôi hỏi, làm cách gì để dựa vào số điện thoại, tạo ra 1 bảng dữ liệu những đối tượng xuất hiện trên cả 2 file trở lên. Tức là những đối tượng có xuất hiện số điện thoại trên 2 file hoặc cả 3 file.
Các ô Tên, Địa chỉ, mã hiệu xe, có thể sẽ khác nhau vậy nên kết quả những đối tượng sẽ là gộp của những ô này, riêng ô mã hiệu xe có thêm chuỗi đánh dấu ở đầu VD: Tinh A - wave-2648, giữa các phần gộp có ký tự newline.
Dưới đây là các file excel VD.
Mong mọi người giúp đỡ, cảm ơn mọi người.
 

File đính kèm

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0

File đính kèm

Upvote 0
Vẫn bị lẫn những đối tượng xuất hiện 1 lần vào kết quả, dùng cái gì để làm ra ô tổng hợp đó vậy bạn ?
 
Upvote 0
Nhưng cứ chỉ mình cách làm, mình sẽ config theo ý mình, bạn dùng macros phải không ?
 
Upvote 0
Tôi có gửi theo các file excel mẫu, trình bày trên này hơi khó.
1, Giả sử tôi có 1 file như thế này:
Tên | số điện thoại | Địa chỉ | mã hiệu xe
Trần A | 013526874 | 123 Trần Phú, Bến Nghé, Tỉnh A | wave-2648
Trần A | 013526874 | 123 Trần Phú, Bến Nghé, Tỉnh A | SH-2468, Shark 6897
Võ C | 021365464 | 344 Võ Văn Tần, Bình Trị, Tỉnh A | Vision-6975
Trần B | 013526874 | 123 Trần Phú, Bến Nghé, Tỉnh A | dream-0256
Làm sao để dựa vào số điện thoại trùng, gộp các cell khác lại với nhau thành 1 row, các value cách nhau bởi dấu "-" hoặc dấu "," . như số 013526874 sẽ được gộp thành 1 row:
Trần A - Trần B|013526874|123 Trần Phú, Bến Nghé, Tỉnh A | wave-2648 - SH-2468, Shark 6897 -dream-0256


2, Giả sử tôi có 3 file có tên: Tỉnh A, Tỉnh B, Tỉnh C như thế này
Tên | số điện thoại | Địa chỉ | mã hiệu xe
Trần A | 013526874 | 123 Trần Phú, Bến Nghé, Tỉnh A | wave-2648
Nguyễn B | 021156458 | 215 Nguyễn Văn Trỗi, Tân Định, Tỉnh A | SH-2468, Shark 6897
Võ C | 021365464 |344 Võ Văn Tần, Bình Trị, Tỉnh A | Vision-6975

Cho tôi hỏi, làm cách gì để dựa vào số điện thoại, tạo ra 1 bảng dữ liệu những đối tượng xuất hiện trên cả 2 file trở lên. Tức là những đối tượng có xuất hiện số điện thoại trên 2 file hoặc cả 3 file.
Các ô Tên, Địa chỉ, mã hiệu xe, có thể sẽ khác nhau vậy nên kết quả những đối tượng sẽ là gộp của những ô này, riêng ô mã hiệu xe có thêm chuỗi đánh dấu ở đầu VD: Tinh A - wave-2648, giữa các phần gộp có ký tự newline.
Dưới đây là các file excel VD.
Mong mọi người giúp đỡ, cảm ơn mọi người.
Mình có đoạn code để giải quyết ví dụ 1 cho bạn
Mã:
Sub GPE()
    Dim Dic As Object
    Dim sArr(), dArr()
    Dim I As Long, J As Long, K As Long
    Set Dic = CreateObject("Scripting.Dictionary")
    
    sArr = Sheet1.Range("A1", Sheet1.Range("A1").End(xlDown)).Resize(, 4).Value
    ReDim dArr(1 To UBound(sArr), 1 To 4)
    
    For I = 1 To UBound(sArr)
        If Not Dic.Exists(sArr(I, 2)) Then
            K = K + 1
            Dic.Add sArr(I, 2), sArr(I, 4)
            dArr(K, 1) = sArr(I, 1)
            dArr(K, 2) = sArr(I, 2)
            dArr(K, 3) = sArr(I, 3)
        Else
            Dic.Item(sArr(I, 2)) = Join(Array(Dic.Item(sArr(I, 2)), sArr(I, 4)), ", ")
        End If
    Next I
    For I = 1 To Dic.Count
        dArr(I, 4) = Dic.Item(sArr(I, 2))
    Next I
    Sheet1.Range("F1").Resize(K, 4) = dArr
    MsgBox "Done", vbInformation, "GPE"
End Sub
 
Upvote 0
OK hiểu rồi, cảm ơn mọi người, vậy thì tự học 1 khóa VBA để thể hiện thôi :)
cảm ơn mọi người nhiều nhé
 
Upvote 0
Ngày bạn bỏ ra 2 đến 3 tiếng vào GPE . Khoảng 2 tháng là viết Code rầm rầm rồi :D
Chi cho cực vậy? Chỉ cần học cách diễn tả vấn đề cho rõ, hỏi cho nhã nhặn (*) thì bất cứ bài gì cũng có thể đưa lên đây người ta làm giùm cho từ a đến z

(*) thực ra cái vụ "nhã nhặn" này không cần lắm. Nhiều ngừoi hỏi như muốn chửi thiên hạ mà vẫn được giải bài như thường. (mình liên tưởng đến món "cháo chửi" ở thành phố nọ...)
 
Upvote 0
Chi cho cực vậy? Chỉ cần học cách diễn tả vấn đề cho rõ, hỏi cho nhã nhặn (*) thì bất cứ bài gì cũng có thể đưa lên đây người ta làm giùm cho từ a đến z

(*) thực ra cái vụ "nhã nhặn" này không cần lắm. Nhiều ngừoi hỏi như muốn chửi thiên hạ mà vẫn được giải bài như thường. (mình liên tưởng đến món "cháo chửi" ở thành phố nọ...)
Mình làm bên system, nên xem như VBA dùng để rèn luyện tư duy lập trình, kiến thức chả bao giờ là phí cả các bạn nhể :D
 
Upvote 0
Mình làm bên system, nên xem như VBA dùng để rèn luyện tư duy lập trình, kiến thức chả bao giờ là phí cả các bạn nhể :D

Câu "kiến thức chả bao giờ là phí" chỉ giành cho bậc thông minh siêu đẳng. Có lẽ bạn là trong số này.
Một người trung bình như tôi hoặc trên trung bình chút thì chỗ chứa trong não có giới hạn. Học những cái gì quan trọng thôi. Thời buổi công nghệ thông tin siêu xa lộ thì hỏi dễ hơn làm.

Chú: cái bài 2 của bạn, nếu muốn giúp thì tôi chỉ chỗ cho hỏi. Nhưng nếu muốn rèn luyện tư duy lập trình thì tôi bó tay, không chỉ được. Hồi nào giờ tôi chỉ biết VBA dùng để ứng dụng chứ xét về tư duy lập trình thì ngừoi ta đi theo C++, Java, Delphi... (Dân system thì học Perl)
 
Lần chỉnh sửa cuối:
Upvote 0
Câu "kiến thức chả bao giờ là phí" chỉ giành cho bậc thông minh siêu đẳng. Có lẽ bạn là trong số này.
Một người trung bình như tôi hoặc trên trung bình chút thì chỗ chứa trong não có giới hạn. Học những cái gì quan trọng thôi. Thời buổi công nghệ thông tin siêu xa lộ thì hỏi dễ hơn làm.

Chú: cái bài 2 của bạn, nếu muốn giúp thì tôi chỉ chỗ cho hỏi. Nhưng nếu muốn rèn luyện tư duy lập trình thì tôi bó tay, không chỉ được. Hồi nào giờ tôi chỉ biết VBA dùng để ứng dụng chứ xét về tư duy lập trình thì ngừoi ta đi theo C++, Java, Delphi... (Dân system thì học Perl)
chỉ mình luôn bạn ơi, mình cũng lười bm ra được, nếu VBA không rèn luyện được tuy duy lập trình thì mình xin kíu :D nhưng liệu có giải quyết tận gốc được vấn đề không ? vì mình phải hỏi nhiều lắm, như câu 2 chỉ là mình viết lại ví dụ cho dễ hiểu vấn đề cho mọi người dễ trả lời, còn dữ liệu mình cần xử lý sẽ nhiều column hơn.
 
Upvote 0
Vào góc CSDL, lựa mấy cái thớt về ADO, tìm mấy bài nói về "tổng hợp từ nhiều files"...
 
Upvote 0
Web KT

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

Back
Top Bottom