Lọc ra danh sách duy nhất từ những dữ liệu trùng?

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi cachep87, 27 Tháng sáu 2011.

139,150 lượt xem

  1. cachep87

    cachep87 chief accounting

    Bài viết:
    1,213
    Đã được thích:
    12
    Giới tính:
    Nam
    Nơi ở:
    TP Hà Nội
    Em có 1 danh sách các nhà cung cấp hàng hóa cho 1 công trình trong 1 tháng. Một nhà cung cấp có thể xuất hiện 1 hay nhiều ngày khác nhau trên bảng kê. Em muốn lọc ra danh sách các nhà cung cấp trong 1 tháng thì phải làm như thế nào? (Ví dụ: A,B,C,B,C,D, --> lọc ra: A,B,C,D). Mong anh chị và các Bạn tư vấn giúp! Em xin cảm ơn!
     
    #1
    Dongphutaosen.com thích bài này.
  2. nguoiconxunui

    nguoiconxunui Khách vãng lai

    Bài viết:
    1,236
    Đã được thích:
    215
    Nơi ở:
    Bình Định
    Dùng chức năng có sẵn của excel đó: Data->consolidate
     
    #2
    Dongphutaosen.com thích bài này.
  3. IChiNoVa

    IChiNoVa Phu cà phê

    Bài viết:
    134
    Đã được thích:
    4
    Nơi ở:
    Sòn Gài
    Để làm việc này trước hết bảng dữ liệu của bạn phải được nhập theo 1 quy luật nhất định, bạn phải tự đặt ra quy luật nhập dữ liệu này:
    tất cả khách hàng phải lấy từ Danh mục khách hàng, để chắc chắn là 1 khách hàng thì chỉ có 1 cách viết duy nhất (tránh trường hợp 1 KH bạn lại ghi 3 cách: Ngân hàng An Bình, An bình bank, hay ngân hàng AB). Nếu ko có danh mục KH cũng ko sao nhưng phải đảm bảo yêu cầu trên.

    Cái này nhiều người ko để ý, đến lúc lọc dữ liệu sẽ bị sót (bạn lọc cho Ngân hàng An Bình, thì sẽ sót An bình bank, và ngân hàng AB).

    Có nhiều cách cho bạn lựa chọn:
    cách 1: nếu ít khách hàng, bạn làm thủ công cho nhanh, nhìn thấy cái nào giống nhau thì bạn xoá đi, để lại 1 thôi.

    cách 2: nhiều khách hàng, cũng dùng thủ công, bạn sort lại, khi đó bạn thấy KH giống nhau sẽ đứng thành 1 group, giúp cho bạn xoá dễ hơn.

    cách 3: (xem file att): quá nhiều KH, ko thể làm thủ công,
    bạn sort trước.
    sau đó tạo 1 cột tạm, gõ công thức: =IF(A2=A1,0,1) với ý nghĩa công thức là nếu KH ở ô A2 giống KH ở ô A1 thì kết quả là 0, còn khác thì là 1
    Lọc theo cột tạm vừa tạo, lấy giá trị là 1
    Sau khi lọc bạn sẽ có list KH theo yêu cầu, copy sang 1 sheet khác để sử dụng.
    Lưu ý cách 3 này bạn phải sort trước,
     
    #3
    Dongphutaosen.com and huanlv2812 like this.
  4. cachep87

    cachep87 chief accounting

    Bài viết:
    1,213
    Đã được thích:
    12
    Giới tính:
    Nam
    Nơi ở:
    TP Hà Nội
    consolidate là tính năng kết hợp thông tin từ nhiều nguồn khác nhau, với các phép tính khác nhau ( cộng, đếm ...... ). Ở đây mình chỉ lọc danh sách nhà cung cấp thôi. Nếu sử dụng consolidate sẽ phải có cột phụ.


    - C1 & C2: Nhập thủ công thì rất đơn giản, nhưng khi có phát sinh thêm nhà cung cấp thì lại nhập thêm Bạn ah.

    - Cách 3: Cũng là 1 cách để lọc được danh sách nhà cung cấp. Nhưng ý mình muốn lọc ra cột riêng (hình 1), vậy có thể đặt công thức được không?
    hình:
    [​IMG]

    Cảm ơn nguoiconxunuiIChiNoVa đã tư vấn giúp mình!:015:
     
    #4
  5. IChiNoVa

    IChiNoVa Phu cà phê

    Bài viết:
    134
    Đã được thích:
    4
    Nơi ở:
    Sòn Gài
    Bạn xem file att,
    nhưng cột kết quả: KH không đứng thành 1 khối được, sẽ có những ô trắng xen vào giữa.
    Do đó bạn lọc chọn khác rỗng.

    Còn nếu bạn muốn kết quả tự động loại những ô trống thì hỏi bác Bill thử xem nhé.
     
    #5
  6. 170987

    170987 先生になりたい。 。

    Bài viết:
    282
    Đã được thích:
    0
    Giới tính:
    Nữ
    Nơi ở:
    cạnh nhà hàng xóm
    Nếu chỉ lọc thông tin tên khác hàng thì bạn làm như sau:
    Quét chọn vùng dử liệu gốc (cột tên hàng)
    - Vào menu Date\Filter\ Advanced Filter
    - Trong cửa sổ Advanced Filter, chọn mục "Copy to another location"
    - Nhấp chuột vào khung "Copy to" rồi dùng chuột chọn 1 ô trên bảng tính, nơi đặt dử liệu sau khi lọc=> đánh dấu check vào ô Unique Records Only =>OK
    Cách này chỉ lọc ra được tên các nhà cung cấp trong tháng không lọc được các dữ liệu khác đi cùng. Không biết có phải là cái Bạn cần hỏi không??
    [​IMG]
     
    #6
  7. quick87

    quick87 Thành viên thân thiết

    Bài viết:
    94
    Đã được thích:
    17
    Nơi ở:
    35
    Bạn này dùng thử cái chức năng Remove Duplicates trong Excel có tích hợp sẵn đó bạn.. nó nằm trong Tab Data ấy..
     
    #7
    kororo thích bài này.
  8. Thanh Nam

    Thanh Nam Admin

    Bài viết:
    2,937
    Đã được thích:
    745
    Giới tính:
    Nam
    Nơi ở:
    HCM
    Cách của quick là nhanh nhất rồi, nhưng hình như ẽxcel 2007 mới có chức năng này.
     
    #8
  9. nguoiconxunui

    nguoiconxunui Khách vãng lai

    Bài viết:
    1,236
    Đã được thích:
    215
    Nơi ở:
    Bình Định
    tui nói làm theo cách tui mà he he, 65.000 tui làm mất 3s he he
    không thì viết cái vòng lặp là được, hình như hôm trước có đọc bài của bác Duyệt như thế này:
    Mã:
    Sub FilterUniqueNumbers3()
       Dim vValue As Variant, vVals As Variant
       Dim myRange As Range
       Dim i As Long
       Dim dArr() As Variant
       Dim oDic As Object
       Set myRange = Worksheets(1).Range("A1:A10")
       'The Dictionary object is always present in Windows so it can always be created
       Set oDic = CreateObject("scripting.dictionary")
       oDic.comparemode = vbTextCompare
       'Read the values from a range into vVals
       vVals = myRange.Value
       'ReDim dArr and make it two dimensional by adding the second argument 1 To 1
       'otherwise you can't dump it in a worksheet later.
       ReDim dArr(UBound(vVals) - 1, 1 To 1)
       For Each vValue In vVals
          'Note the use of the Dictionary object to exclude double values
          If Not IsEmpty(vValue) And Not oDic.exists(vValue) Then
             dArr(i, 1) = vValue
             oDic.Add vValue, Nothing
             i = i + 1
          End If
       Next vValue
       'Free memory by removing the Dictionary object and vVals from memory
       Set oDic = Nothing
       Erase vVals
       'Remove old data
       myRange.Clear
       'Dump dArr values in worksheet
       myRange.Resize(i).Value = dArr
    End Sub
    
     
    #9
  10. Trai Tim Kho

    Trai Tim Kho Thành viên hoạt động

    Bài viết:
    19
    Đã được thích:
    0
    Nơi ở:
    Trái Tim
    Em đọc hoa cả mắt mà không hiểu được công thức. (Chắc tị dốt quá). Trường hợp của cachep87 xử lý như cách của 170987 là đúng ý rồi.
     
    #10
  11. minhthien321

    minhthien321 Thành viên hoạt động

    Bài viết:
    6
    Đã được thích:
    2
    Nơi ở:
    TPHCM
    Bạn không hiểu cũng phải thôi bởi chưa được hướng dẫn sử dụng trước khi dùng. Dưới đây là Hàm Lọc Duy Nhất của Thầy NDU của GPE đây:

    Mã:
    Function Unique2DArray(ByVal sArray, ByVal ColIndex As Long, ByVal HasTitle As Boolean)
        Dim TmpArr, KeyArr, Tmp, i As Long, j As Long, Arr
        On Error Resume Next
        TmpArr = sArray
        ColIndex = ColIndex + LBound(TmpArr, 2) - 1
        With CreateObject("Scripting.Dictionary")
            For i = LBound(TmpArr, 1) - HasTitle To UBound(TmpArr, 1)
                Tmp = TmpArr(i, ColIndex)
                If Not .Exists(Tmp) And Tmp <> "" Then .Add Tmp, i
            Next
            If .Count Then
                KeyArr = .Keys
                ReDim Arr(LBound(KeyArr) + LBound(TmpArr, 1) To UBound(KeyArr) - HasTitle + LBound(TmpArr, 1), LBound(TmpArr, 2) To UBound(TmpArr, 2))
                For i = LBound(KeyArr) To UBound(KeyArr)
                    For j = LBound(TmpArr, 2) To UBound(TmpArr, 2)
                        Arr(i - HasTitle + LBound(TmpArr, 1), j) = TmpArr(.Item(KeyArr(i)), j)
                    Next
                Next
                If HasTitle Then
                    For j = LBound(TmpArr, 2) To UBound(TmpArr, 2)
                        Arr(LBound(TmpArr, 1), j) = TmpArr(LBound(TmpArr, 1), j)
                    Next
                End If
                Unique2DArray = Arr
            End If
        End With
    End Function
    
    Và dưới đây là cách sử dụng:

    Mã:
    Sub Test1()
        Dim sArray, Arr, TG As Double
       [COLOR="#006400"] 'TG = Timer[/COLOR]
        sArray = Range(Sheet1.[A3], Sheet1.[A65536].End(xlUp)).Resize(, 7)
        Arr = Unique2DArray(sArray, 2, False) '<< Neu True thi co tieu de, nhung lay luon hang tieu de, nguoc lai.
        If IsArray(Arr) Then Sheet1.Range("J2").Resize(UBound(Arr, 1), 7).Value = Arr
       [COLOR="#006400"] 'MsgBox Format(Timer - TG, "0.000000")[/COLOR]
    End Sub
    
    Các bạn không hiểu thì xin hỏi tiếp nhé! Tốc độ nhanh hơn của Anh Duyệt luôn đó! Đặc biệt nó có tiện ích là có tiêu đề và không tiêu đề!
     
    #11
    vacandem thích bài này.
  12. vacandem

    vacandem Thành viên sơ cấp

    Bài viết:
    2
    Đã được thích:
    0
    Nơi ở:
    Hà nội
    Cho em hỏi sau khi copy đoạn mã trên vào file rồi thì sử dụng thế nào ạ
     
    #12
  13. bo ngang

    bo ngang Thành viên thân thiết

    Bài viết:
    49
    Đã được thích:
    9
    Nơi ở:
    hà nội
    @@ em thấy các bác viết lằng nhằng khó hiểu quá, em đang dùng Add-in A-Tools lọc ra để làm báo cáo thanh toán với các nhà cung cấp, rất nhanh mà dễ cực ỳ luôn, bác thử liên hệ với bên đấy xem họ hỗ trợ cho, dùng cái đó nhanh mà hiệu quả lắm
    link đây bác nhé
    http://bluesofts.net/giai-phap-phan...-thao-va-quan-tri-du-lieu-excel-qua-mang.html
     
    #13
  14. Bảoan150892

    Bảoan150892 Thành viên sơ cấp

    Bài viết:
    1
    Đã được thích:
    0
    Giới tính:
    Nam
    mọi người cho mình hỏi mình có một bảng tính về số ngày đi công tác của những người trong cơ quan, nhưng mình muốn lọc ra các giá trị trùng nhau thì làm như thế nào? Vd: Nguyễn Văn A có số ngày đi công tác là: 10/12/2014-13/12/2014 và 11/12/2014. Vì ngày 11/12/2014 lại nằm trong khoảng từ ngày 10 đến ngày 13 nên mình muốn loại bỏ.
    PS: một người có rất nhiều ngày đi công tác, mỗi lần đi trong các khoảng từ ngày này đến ngày kia.
    xin cảm ơn mọi người
     
    #14
  15. nguoiconxunui

    nguoiconxunui Khách vãng lai

    Bài viết:
    1,236
    Đã được thích:
    215
    Nơi ở:
    Bình Định
    đang bùa tiền công tác à, chứ thực tế sao có trùng được
     
    #15
  16. Loan Nguyễn 1990

    Loan Nguyễn 1990 Thành viên sơ cấp

    Bài viết:
    1
    Đã được thích:
    0
    Giới tính:
    Nữ
    Bạn thử dùng cách này nhé:
    Bạn bôi đen vùng dữ liệu (ví dụ màu xanh theo file đính kèm)
    Sau đó vào Data -> Remove Duplicates, xuất hiện bảng ->Chọn unselect all-> Tích vàoTên hàng. là sẽ tự động lọc cho bạn rồi đó.
     

    Các file đính kèm:

    #16
  17. thutrang1905

    thutrang1905 Thành viên thân thiết

    Bài viết:
    141
    Đã được thích:
    12
    Giới tính:
    Nữ
    Nơi ở:
    Linh Đàm, Hà Nội
    consolidate là báo cáo tổng hợp rồi
     
    #17
  18. thutrang1905

    thutrang1905 Thành viên thân thiết

    Bài viết:
    141
    Đã được thích:
    12
    Giới tính:
    Nữ
    Nơi ở:
    Linh Đàm, Hà Nội
    Lịch công tác sao lại trùng nhau như vậy được nhỉ , ngay từ khâu nhập dữ liệu đã không có chuyện trùng nhâu như vậy rồi chứ bạn?
     
    #18
  19. ngochoidong

    ngochoidong Thành viên sơ cấp

    Bài viết:
    3
    Đã được thích:
    0
    Nơi ở:
    vung tau
    Nếu bạn dùng excel2007 thì có sẵn trong menu đó. Vào Data/Remove duplicates
    Còn nếu bạn dùng excel 2003 thì có thể dùng pivot hoặc filter advance- tích vào unique
     
    #19
  20. ngochoidong

    ngochoidong Thành viên sơ cấp

    Bài viết:
    3
    Đã được thích:
    0
    Nơi ở:
    vung tau
    Để theo dõi ngày đi công tác nhằm khỏi thanh toán trùng thì bạn nên chịu khó làm một cái bảng chấm công cho dễ chịu.
     
    #20

Chia sẻ trang này