Sắp xếp data và so sánh (3 người xem)

Liên hệ QC

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

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
    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

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

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

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

Cô/Chú ơi, hôm qua cháu không kiểm tra kỹ, giờ mới thấy kết quả có chút vấn đề như sau ah, xem giúp cháu với, cháu cảm ơn!

1. Hiện kết quả như sau:
Name: 241125 lại nằm ngang hàng với Name: 105039
221596

2. Cháu muốn kết quả xuất hiện như sau:
- 2 cột data cùng Name thì được liệt kê cùng hàng, ví dụ Name 105038 số liệu A data ít hơn B data thì sẽ có BLANK ở cuối
Ngược lại với Name 241125, BLANK sẽ ở cột B data
221597


Cũng chưa hiểu lắm, bạn xem tạm file này coi sao.
 
Cháu vừa thấy là: với 1 Name nào đó, nếu A data ít hơn B data thì macro chạy đúng, nhưng nếu A data nhiều hơn B data thì kết quả ra sai
 
Cháu vừa thấy là: với 1 Name nào đó, nếu A data ít hơn B data thì macro chạy đúng, nhưng nếu A data nhiều hơn B data thì kết quả ra sai
Oải luôn! Càng giải thích càng rối.
Tôi hiểu như vầy phải không?
- Bước 1: Nhặt từng cặp Name và Data trùng nhau của 2 Bảng thành 1 dòng.
- Bước 2: Nhặt tiếp từng cặp Name giống nhau của 2 Bảng thành 1 dòng.
- Bước 3: Nhặt từng Name Bảng A không có trong Bảng B - Cột Bảng B để trống.
- Bước 4: Nhặt từng Name bảng B không có trong Bảng A - Cột Bảng A để trống.
- Cuối cùng Sort lại, Các Name giống nhau nằm gần nhau, ưu tiên các Name và Data của A và B giống nhau nằm trên.
Nếu tôi hiểu đúng thì do từ đầu đến cuối bạn chưa nêu rõ được yêu cầu.
----------------------------------------
Cho Code chạy lung tung mới vui.
 

File đính kèm

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

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

Back
Top Bottom