Đồng bộ dữ liệu ở 2 cột trong 1 sheet (1 người xem)

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

trung78952

Thành viên mới
Tham gia
12/11/07
Bài viết
27
Được thích
3
E có 1 sheet có 2 danh mục. Danh mục ở cột 1 và danh mục ở cột 2. Em muốn đồng bộ 2 cột này thành 1 cột thứ 3 sao cho không bị trùng lặp 2 tên giống hệt nhau, hoặc đồng bộ lấy những tên ở cột 1 + cột 2 (mà cột 1 ko có), hoặc ngược lại: lấy những tên ở cột 2 + cột 1 (mà cột 2 ko có). (Do có thể có tên ở cột 1 mà ko có ở cột 2 và ngược lại, cột 2 có mà cột 1 lại ko).
Em xin gửi file đính kèm.

Các bác vui lòng chỉ giáo theo cả 2 cách: 1, Dùng hàm sẵn có của excel và 2, Dùng VBA nhé.
Trân trọng cảm ơn các bác
 

File đính kèm

Dùng công thức trước nhé, xem file đính kèm :

Cách khác bạn có thể dụng Advanced Filter để thực hiện công việc này.
 

File đính kèm

Cảm ơn bạn, đúng cái mình đang cần. Thanks nhiều nha!
 
Với cách sử dụng Advanced Filter bạn sẽ phải thiết lập 3 điều kiện:
1. Lọc dữ liệu có ở cột 2 mà không có ở cột 1, điều kiện sẽ là =COUNTIF($B$4:$B$8,C4)=0
2. Lọc dữ liệu có ở cột 1 mà không có ở cột 2, điều kiện sẽ là =COUNTIF($C$4:$C$9,B4)=0
3. Lọc dữ liệu có ở cả 2 cột, điều kiên sẽ là =COUNTIF($B$4:$B$8,C4)>0

Bạn có thể xem video này là 1 bài toán tương tự trước tôi làm giúp các anh chị trong hội kế toán lọc danh sách thành viên, hoặc tải tài liệu về advanced Filter để đọc thêm tại đây : Advanced Filter

[video=youtube;8-MWPrzCn7s]https://www.youtube.com/watch?v=8-MWPrzCn7s[/video]
 
Bạn có thể cho biết công thức này ý nghĩa gì vậy ko? có phải công thức mảng ko? vì không giống cấu trúc sẵn có của excel: INDEX(($C$4:$C$9<>"")*(COUNTIF($B$4:$B$8,$C$4:$C$9)=0)*(COUNTIF($D$3:D3,$C$4:$C$9)=0)

Thanks!
 
Bạn có thể cho biết công thức này ý nghĩa gì vậy ko? có phải công thức mảng ko? vì không giống cấu trúc sẵn có của excel: INDEX(($C$4:$C$9<>"")*(COUNTIF($B$4:$B$8,$C$4:$C$9)=0)*(COUNTIF($D$3:D3,$C$4:$C$9)=0)

Thanks!
Nó chính xác là công thức mảng và cũng chỉ là các hàm có sẵn trong Excel kết hợp lại thôi bạn ạ, chỗ đó bạn phải chép đầy đủ là :
INDEX(($C$4:$C$9<>"")*(COUNTIF($B$4:$B$8,$C$4:$C$9)=0)*(COUNTIF($D$3:D3,$C$4:$C$9)=0),0)

Bạn xem trong cuốn Ebook của diễn đàn có nói rất rõ về cách sử dụng Index() dạng mảng này, mục đích chỉ để không phải bấm tổ hợp phím Ctrl+Shift +Enter thôi.

Còn về vấn đề VBA, bạn tham khảo cách sử dụng của Dictionary object nhé, nó có thể giải quyết tốt bài toán này, hehehe
 
Bùn quá cơ.....hix
PHP:
Sub ThreesArr2()
    
    Dim i As Long, n1 As Long, n2 As Long, k1 As Long, k2 As Long, k3 As Long, k As Long
    Dim t As Variant
    Dim Dic1 As Object, Dic2 As Object
    Dim sArr1() As Variant, sArr2() As Variant, dArr() As Variant
    
    sArr1 = Range([B4], [B65000].End(xlUp)).Value
    sArr2 = Range([C4], [C65000].End(xlUp)).Value
    n1 = UBound(sArr1)
    n2 = UBound(sArr2)
    
    Set Dic1 = CreateObject("Scripting.Dictionary")
    Set Dic2 = CreateObject("Scripting.Dictionary")
    For i = 1 To n1
        Dic1(sArr1(i, 1)) = ""
    Next i
    
    For i = 1 To n2
        Dic2(sArr2(i, 1)) = ""
    Next i
        
    ReDim dArr(1 To IIf(n1 > n2, n1, n2), 1 To 3)
    k1 = 0
    k3 = 0
    For Each t In Dic2.keys
        If Dic1.exists(t) Then  'co ca 2 COT
            k3 = k3 + 1
            dArr(k3, 3) = t
            Dic1.Remove (t)
        Else   'co o COT 2 khong co o COT 1
            k1 = k1 + 1
            dArr(k1, 1) = t
        End If
    Next t
    
    k2 = 0
    For Each t In Dic1.keys  'co o COT 1 khong co o COT 2
        k2 = k2 + 1
        dArr(k2, 2) = t
    Next t
    
    Set Dic1 = Nothing
    Set Dic2 = Nothing
    
    k = k1
    If k < k2 Then k = k2
    If k < k3 Then k = k3
    
    [D10].Resize(65000, 3).ClearContents
    [D10].Resize(k, 3) = dArr
End Sub
 
Lần chỉnh sửa cuối:

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

Back
Top Bottom