Sắp xếp data và so sánh

Liên hệ QC

le_anh81

Thành viên chính thức
Tham gia
7/9/07
Bài viết
87
Được thích
4
Chào các bạn, chúc các bạn buổi sáng tốt lành.

Mình có file data như file đính kèm, mình xin sơ qua như sau:
- Sheet A, liệt kê mỗi Name có 2-3-4...số serial
- Sheet B, tương tự sheet A, cũng liệt kê mỗi Name có 2-3-4...số serial
(Name ở Sheet A và Sheet B là tương ứng, nhưng số serial của mỗi Name ở các sheet có thể khác nhau)
vd: Name 104001 như sau:
NameA dataB data
104001​
CD3N636179CD3N636179
104001​
CD3N636184CD3N636184
104001​
CD3N677224CD3N677224
104001​
CD3N636000
Sheet A chỉ có 3 serial, Sheet B có 4.
- Thứ tự số serial của mỗi Name ở các sheet đang lộn xộn, cái trên cái dưới

=> Điều mình cần ở sheet "Compare":
- Liệt kê toàn bộ Name có ở các sheet (Không phải Name chung nhé, mà là toàn bộ)
- Tương ứng các cột "A data" và "B data" sẽ liệt kê đầy đủ serial của mỗi Name
Như ví dụ bên trên đối với Name 104001, bên Sheet A chỉ có 3 serial, thì dòng thứ 4 sẽ là blank.
- Nếu serial ở các sheet của mỗi Name là giống nhau thì sẽ được liệt kê như trên (cái này ưu tiên liệt kê trước)
- Nếu serial ở các sheet của mỗi Name khác nhau, cần liệt kê đủ số serial, ở 2 cột A data và B data, nếu số serial không tương ứng thì sẽ blank
Ví dụ như sau:
220929

Mình xin gửi thêm file đính kèm có chi tiết nội dung.
Các bạn xem và xử lý giúp mình với.
Mình cảm ơn.
 

File đính kèm

  • 1562810670548.png
    1562810670548.png
    25.9 KB · Đọc: 2
  • GPE.xlsx
    298.1 KB · Đọc: 10
Có thể cách diễn giải của mình hơi phức tạp, mong các bạn đọc và giúp mình.
Mình cảm ơn
 
Thực ra cũng làm được, chủ yếu bạn muốn dung theo cách nào.
Nếu thông thường mình nghĩ dùng công thức excel + xử lý là Ok
Nếu không có thể dùng VBA xử lý cũng được.
 
Cảm ơn bạn đã reply
Thực ra data của mình sẽ nhiều hơn nữa, nếu thêm việc xử lý trong excel, mình không biết có bị nặng hay không.
Về phần VBA, mình cũng không rành nên ko biết xử lý với data lớn nó có ảnh hưởng nhiều không.
Chính vì vậy, nhờ bạn xem cách nào hợp lý và giúp mình.

Thực ra cũng làm được, chủ yếu bạn muốn dung theo cách nào.
Nếu thông thường mình nghĩ dùng công thức excel + xử lý là Ok
Nếu không có thể dùng VBA xử lý cũng được.
Bài đã được tự động gộp:

@Hieu042
Bạn có thể giúp mình qua VBA được không?

Thực ra cũng làm được, chủ yếu bạn muốn dung theo cách nào.
Nếu thông thường mình nghĩ dùng công thức excel + xử lý là Ok
Nếu không có thể dùng VBA xử lý cũng được.
 
Để mình thử xem, mình cũng ko thạo cái này, mò mẫm trên này học được chút chút.
Như cái này mấy cao thủ chắc phẩy tay là xong thôi
 

File đính kèm

  • GPE_VBA2.rar
    248.9 KB · Đọc: 23
Chào các bạn, chúc các bạn buổi sáng tốt lành.

Mình có file data như file đính kèm, mình xin sơ qua như sau:
- Sheet A, liệt kê mỗi Name có 2-3-4...số serial
- Sheet B, tương tự sheet A, cũng liệt kê mỗi Name có 2-3-4...số serial
(Name ở Sheet A và Sheet B là tương ứng, nhưng số serial của mỗi Name ở các sheet có thể khác nhau)
vd: Name 104001 như sau:
NameA dataB data
104001​
CD3N636179CD3N636179
104001​
CD3N636184CD3N636184
104001​
CD3N677224CD3N677224
104001​
CD3N636000
Sheet A chỉ có 3 serial, Sheet B có 4.
- Thứ tự số serial của mỗi Name ở các sheet đang lộn xộn, cái trên cái dưới

=> Điều mình cần ở sheet "Compare":
- Liệt kê toàn bộ Name có ở các sheet (Không phải Name chung nhé, mà là toàn bộ)
- Tương ứng các cột "A data" và "B data" sẽ liệt kê đầy đủ serial của mỗi Name
Như ví dụ bên trên đối với Name 104001, bên Sheet A chỉ có 3 serial, thì dòng thứ 4 sẽ là blank.
- Nếu serial ở các sheet của mỗi Name là giống nhau thì sẽ được liệt kê như trên (cái này ưu tiên liệt kê trước)
- Nếu serial ở các sheet của mỗi Name khác nhau, cần liệt kê đủ số serial, ở 2 cột A data và B data, nếu số serial không tương ứng thì sẽ blank
Ví dụ như sau:
View attachment 220929

Mình xin gửi thêm file đính kèm có chi tiết nội dung.
Các bạn xem và xử lý giúp mình với.
Mình cảm ơn.
Bạn thử xem đúng không nhé.
Mã:
Sub chuyendulieu()
    Dim arr(1 To 10000, 1 To 3), i As Long, lr As Long, data, dic As Object, dk As String, b As Long, a As Long
    Set dic = CreateObject("scripting.dictionary")
        With Sheets("A")
             lr = .Range("A" & Rows.Count).End(xlUp).Row
             data = .Range("A3:B" & lr).Value
             For i = 1 To UBound(data)
                 dk = data(i, 1) & data(i, 2)
                 If Not dic.exists(dk) Then
                    a = a + 1
                    dic.Add dk, a
                    arr(a, 1) = data(i, 1)
                    arr(a, 2) = data(i, 2)
                 End If
             Next i
        End With
        With Sheets("B")
             lr = .Range("A" & Rows.Count).End(xlUp).Row
             data = .Range("A3:B" & lr).Value
             For i = 1 To UBound(data)
                 dk = data(i, 1) & data(i, 2)
                 If Not dic.exists(dk) Then
                    dic.Add dk, a
                    a = a + 1
                    arr(a, 1) = data(i, 1)
                    arr(a, 3) = data(i, 2)
                 Else
                    b = dic.Item(dk)
                    arr(b, 3) = data(i, 2)
                 End If
             Next i
        End With
        With Sheets("Compare")
              lr = .Range("F" & Rows.Count).End(xlUp).Row
              If lr > 2 Then .Range("F3:H" & lr).ClearContents
              If a Then
                 .Range("F3:H3").Resize(a).Value = arr
                 .Range("F3:H3").Resize(a).Sort Key1:=.Range("F3")
              End If
       End With
End Sub
 

File đính kèm

  • GPE.xlsm
    467 KB · Đọc: 11
Bạn thử xem đúng không nhé.
Mã:
Sub chuyendulieu()
    Dim arr(1 To 10000, 1 To 3), i As Long, lr As Long, data, dic As Object, dk As String, b As Long, a As Long
    Set dic = CreateObject("scripting.dictionary")
        With Sheets("A")
             lr = .Range("A" & Rows.Count).End(xlUp).Row
             data = .Range("A3:B" & lr).Value
             For i = 1 To UBound(data)
                 dk = data(i, 1) & data(i, 2)
                 If Not dic.exists(dk) Then
                    a = a + 1
                    dic.Add dk, a
                    arr(a, 1) = data(i, 1)
                    arr(a, 2) = data(i, 2)
                 End If
             Next i
        End With
        With Sheets("B")
             lr = .Range("A" & Rows.Count).End(xlUp).Row
             data = .Range("A3:B" & lr).Value
             For i = 1 To UBound(data)
                 dk = data(i, 1) & data(i, 2)
                 If Not dic.exists(dk) Then
                    dic.Add dk, a
                    a = a + 1
                    arr(a, 1) = data(i, 1)
                    arr(a, 3) = data(i, 2)
                 Else
                    b = dic.Item(dk)
                    arr(b, 3) = data(i, 2)
                 End If
             Next i
        End With
        With Sheets("Compare")
              lr = .Range("F" & Rows.Count).End(xlUp).Row
              If lr > 2 Then .Range("F3:H" & lr).ClearContents
              If a Then
                 .Range("F3:H3").Resize(a).Value = arr
                 .Range("F3:H3").Resize(a).Sort Key1:=.Range("F3")
              End If
       End With
End Sub
Bạn chưa xét đến yêu cầu: "- Nếu serial ở các sheet của mỗi Name là giống nhau thì sẽ được liệt kê như trên (cái này ưu tiên liệt kê trước) "
Ví dụ kết quả F23, mã 104015 phải nằm phía trên F21, vì có đủ cột G và H.
 
Bạn chưa xét đến yêu cầu: "- Nếu serial ở các sheet của mỗi Name là giống nhau thì sẽ được liệt kê như trên (cái này ưu tiên liệt kê trước) "
Ví dụ kết quả F23, mã 104015 phải nằm phía trên F21, vì có đủ cột G và H.
Còn nhiều vấn đề lắm. Nhưng tôi ngại inh-gơ-lít, hông dám thử.
 
Cảm ơn các bạn đã giúp đỡ.
Quá trình sử dụng, cần support gì mình lại nhờ mọi người ah.
 
Bạn ơi, cho mình hỏi thêm chút, mình thấy code của bạn có đoạn Clearcontent đoạn D3, giờ mình muốn:
- Khi mình update data mới, bấm vào nút GPE thì chỉ vùng A3,B3,C3 xuống dưới thay đổi, còn xung quanh giữ nguyên (vì mình muốn từ cột D, mình sẽ dùng hàm để xử lý chỗ dữ liệu đó luôn).
Cảm ơn bạn.

Bạn thử xem file này, thử với dữ liệu kết quả khoảng 50000 dòng xem sao, tôi chưa thử.
 
Bạn ơi, cho mình hỏi thêm chút, mình thấy code của bạn có đoạn Clearcontent đoạn D3, giờ mình muốn:
- Khi mình update data mới, bấm vào nút GPE thì chỉ vùng A3,B3,C3 xuống dưới thay đổi, còn xung quanh giữ nguyên (vì mình muốn từ cột D, mình sẽ dùng hàm để xử lý chỗ dữ liệu đó luôn).
Cảm ơn bạn.
Dễ nhất và không phải chỉnh sửa code là: Ẩn cột D đi, bắt đầu làm gì đó từ cột E. (Vì nhờ cột D mà tôi mới sắp xếp dữ liệu theo yêu cầu của bạn, nếu không thì viết code rất mệt)
 
Mình đang làm thế rồi, hihi, tưởng đơn giản nhờ bạn chỉ giùm. Mà phức tạp thì thôi ah.
Cảm ơn bạn

Dễ nhất và không phải chỉnh sửa code là: Ẩn cột D đi, bắt đầu làm gì đó từ cột E. (Vì nhờ cột D mà tôi mới sắp xếp dữ liệu theo yêu cầu của bạn, nếu không thì viết code rất mệt)
 
Bạn ơi cho mình hỏi thêm cái này,

Thay vì tổng hợp trước đây có kết quả như sau:
NameA data (Invoiced)B data (System)
104001​
003ACU20163200403​
003ACU20163200403​
104001​
003ACU20163100670​
003ACU20163100670​
104001​
003ACU20163106561​
104001​
003ACU20163100661​

Giờ mình thay đổi chút, kết quả sẽ như sau:
NameA data (Invoiced)B data (System)
104001​
003ACU20163200403​
003ACU20163200403​
104001​
003ACU20163100670​
003ACU20163100670​
104001​
003ACU20163106561​
003ACU20163100661​
Nghĩa là ưu tiên những số giống nhau ở 2 data sẽ sắp xếp lên trên, phía dưới sẽ là những số khác nhau (mình sẽ dùng TRUE/FALSE để tìm thấy sự khác biệt này)
Cảm ơn bạn!!!

Dễ nhất và không phải chỉnh sửa code là: Ẩn cột D đi, bắt đầu làm gì đó từ cột E. (Vì nhờ cột D mà tôi mới sắp xếp dữ liệu theo yêu cầu của bạn, nếu không thì viết code rất mệt)
 
Lần chỉnh sửa cuối:
Cả nhà ơi, giúp mình với ah.
 
Lần chỉnh sửa cuối:
Dạ, cháu gửi file, kèm hình ảnh cháu muốn kết quả trả về như sau:
221545

- Cột "A data" và "B data", nếu những số liệu nào giống nhau sẽ sort và nằm cùng hàng với nhau để trả ra kết quả TRUE (ưu tiên số 1, cho lên đầu của mỗi Name)
- Số liệu khác nhau của mỗi Name ở 2 cột (nếu có), vẫn được sort và xếp cùng hàng nhau để trả kết quả FALSE (như hình).
- Nếu số liệu của 2 cột khác nhau về số lượng, cột có số lượng ít hơn sẽ có phần BLANK (ở cuối của mỗi Name)

Cũng phải có file kèm kết quả mẫu bằng thủ công vài chục dòng, họa may mọi người hiểu được bạn muốn gì.
 

File đính kèm

  • GPE.xlsx
    298.6 KB · Đọc: 4
Dạ, cháu gửi file, kèm hình ảnh cháu muốn kết quả trả về như sau:
View attachment 221545

- Cột "A data" và "B data", nếu những số liệu nào giống nhau sẽ sort và nằm cùng hàng với nhau để trả ra kết quả TRUE (ưu tiên số 1, cho lên đầu của mỗi Name)
- Số liệu khác nhau của mỗi Name ở 2 cột (nếu có), vẫn được sort và xếp cùng hàng nhau để trả kết quả FALSE (như hình).
- Nếu số liệu của 2 cột khác nhau về số lượng, cột có số lượng ít hơn sẽ có phần BLANK (ở cuối của mỗi Name)
Cũng chưa hiểu lắm, bạn xem tạm file này coi sao.
 

File đính kèm

  • GPE_VBA3.rar
    266.1 KB · Đọc: 6
Web KT
Back
Top Bottom