Lọc dữ liệu trong Excel

Thảo luận trong 'Ứng dụng Excel' bắt đầu bởi Buongbinhcom, 7 Tháng chín 2005.

72,986 lượt xem

  1. Buongbinhcom

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

    Bài viết:
    13
    Đã được thích:
    0
    Nơi ở:
    Ha Noi
    Cho mình hỏi là trong Excel, có lọc dữ liệu theo 2 cột được không? Ví dụ tìm trong cả 2 cột A và B nếu thấy giá trị xyz thì liệt kê ra ( với giả thiết là trên cùng một dòng thì giá trị xyz chỉ xuất hiện hoặc trên cột A, hoặc trên cột B)
     
    #1
  2. WhoamI

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

    Bài viết:
    534
    Đã được thích:
    0
    Nơi ở:
    Cố lên, cứ đi rồi sẽ tới!
    Cả autofilter lẫn advanced filter đều không làm được. Chỉ có mỗi cách thêm cột phụ rồi kết hợp điều kiện hoặc trên hai cột A và B thôi.VD: If (or( cột A= "XYZ"; cột B= "XYZ");"XYZ";"")
     
    #2
  3. Buongbinhcom

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

    Bài viết:
    13
    Đã được thích:
    0
    Nơi ở:
    Ha Noi
    Cảm ơn bạn nhiều! Đơn giản vậy, đôi khi mình vẫn làm mà không nhớ ra chứ! Cảm ơn nhiều nhiều nhé!
     
    #3
  4. ForestC

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

    Bài viết:
    377
    Đã được thích:
    1
    Nơi ở:
    E'rywhere
    If ya merci W, U 'll must merci her all day
    If ya praise W, U 'll praise her full ur life.
    W is very good, so pzl give me your .. head, Pretty W, I'll softly rub your hairs, so sweet. :p
     
    #4
  5. DucThuan

    DucThuan Tè lè ra rồi !

    Bài viết:
    173
    Đã được thích:
    4
    Nơi ở:
    Đầu đường xó chợ
    WhoamI ơi, hình như dùng Advanced filer vẫn được mà.
    Criteria range: Ở đây điều kiện sẽ ở 2 hàng, 2 cột thay vì 1 cột.
    Hàng 1: XYZ ở cột A
    Hàng 2: XYZ ở cột B.
    Bạn thử coi, tôi nhớ vậy.
     
    #5
  6. luongvanluyen

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

    Bài viết:
    27
    Đã được thích:
    0
    Nơi ở:
    HCM CITY
    To: Buongbinhcom,
    Theo tôi nghĩ, tất cả các yêu cầu thì có thể đều làm được. Nếu yêu cầu hơi khó thì bạn dùng VBA.
    Giả sử tôi có một database tên là DuLieu (Range trong excel). Khi muốn lọc dữ liệu thì tôi làm như sau:

    Sub LocDuLieu()
    Dim bRange as Range
    Dim i as Long, Hang as Long, Cot as Integer

    Set bRange=Range("DuLieu")
    Hang=bRange.Rows.Count
    Cot=bRange.Columns.Count
    'Bắt đầu tôi dùng vòng lập quét qua khối dữ liệu đó
    'và làm theo các điều kiện lọc mà yêu cầu đề ra
    For i=1 to Hang
    With bRange
    If(.Cells(i,Cot1)= Bạn đưa điều kiện cần xem xét vào đây Then
    'Bạn muốn xuất dữ liệu ra thì đưa vào đây
    'Giả sử tôi muốn xuất dữ liệu ra Sheet tên Xuat
    WorkSheets("Xuat").Cells(HangBatDauXuat,CotA)=.Cells(i,Cot1)
    WorkSheets("Xuat").Cells(HangBatDauXuat,CotB)=.Cells(i,Cot2)
    '...Cứ thế

    End If

    End With

    Next i
    'Với chú ý là nếu bạn dùng vòng lập For Next thì bạn phải quét hết
    'Khối dữ liệu, đây là điều đôi khi không nên
    '...
    'Giải phóng biến
    Set bRange=Nothing

    End Sub

    Và thế là bạn giải quyết được bài tóan lọc rồi. Bạn muốn lọc theo hàng thì lọc, muốn lọc theo cột thì cũng tương tự cách trên.

    Lương Văn Luyện
     
    #6
  7. workman

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

    Bài viết:
    372
    Đã được thích:
    0
    Nơi ở:
    Ho Chi Minh
    Nhiều người lọc quá nên cái bài toán đã trong veo rồi. Nói túm lại có các cách lọc như sau:

    1. Lọc bằng hàm if hoặc sumproduct. Cái này dễ làm khỏi phải suy nghĩ nhiều, lại chạy nhanh hơn cả. Ai khoái mảng thì cũng có mấy function mảng xài đỡ như Dsum, Dcount...Tôi thú thực thuộc về nhóm này.

    2. Lọc bằng filter: Thực ra filter excel làm được khối thứ mà bình thường ta ít xài tới. Điều qua trọng là lập cái bảng Criterial như thế nào thôi. Các bạn vào Advance fiter sẽ thấy nó làm được nhiều cách lọc phức tạp ra phết đấy.

    3. Lọc bằng VBA: cái này dành cho dân ghiền lập trình. Dân user bình thường đừng quan tâm nhiều quá nhức đầu lắm. Cùng lắm lên trên này nhờ các cao thủ VBA viết code.
     
    #7
  8. luongvanluyen

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

    Bài viết:
    27
    Đã được thích:
    0
    Nơi ở:
    HCM CITY
    Vâng, Sumproduct thì đã đủ rồi ! Chẳng cần gì VBA. VBA chỉ khi nào muốn chương trình của mình tự động mà thôi !

    Lương Văn Luyện
     
    #8
  9. SA_DQ

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

    Bài viết:
    419
    Đã được thích:
    28
    Nơi ở:
    HCM city
    Nhưng cho hỏi thêm B. Luyện một tí tẹo: nếu một trường nào đó trong DuLieu chứa hàm Rnd() & các trường /Cột khác tham chiếu đến hàm Rnd() này thì Lúc đó tôi thấy nó chép số khác à nha! Hình như do hàm này nó cho lại số mới! B. Luyện cho biết cách khắc phục, được hỉ?! :two: :dzo:
     
    Last edited: 13 Tháng chín 2005
    #9
  10. Nguyen Thach Xuyen

    Nguyen Thach Xuyen Thành viên sơ cấp

    Bài viết:
    1
    Đã được thích:
    0
    Nơi ở:
    66 Pho Quang, Q.Tan Binh
     
    #10
  11. Ng Ha Anh Tuan

    Ng Ha Anh Tuan Thành viên sơ cấp

    Bài viết:
    76
    Đã được thích:
    0
    Nơi ở:
    TP HCM
    Bạn xem lại bài #5 và #7 trong phần này, còn không phải dùng index(match(offset)), theo tôi phàn này khó dùng sumproduct
     
    #11
  12. hieu1563

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

    Bài viết:
    123
    Đã được thích:
    0
    Nơi ở:
    Đang đăng ký !!
    Đây là vấn đề liệt kê dữ liệu chứ không phải là tính tổng theo ĐK hay đếm theo ĐK, nên dùng hàm sumproduct không được.
    Theo tôi nghĩ nên dùng DSUM; DCOUNT hoặc chuyên nghiệp hơn thì dùng Advance Filter. (Dùng Auto Filter phải dùng thêm cột phụ)

    Thân!
     
    #12
  13. langdu117726

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

    Bài viết:
    9
    Đã được thích:
    0
    Nơi ở:
    HUE
    câu hỏi của bạn thật hay, giúp mình thực tập được từ trả lời của mọi người. Thanks
     
    #13
  14. Tran Chau

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

    Bài viết:
    149
    Đã được thích:
    0
    Nơi ở:
    TP Ho Chi Minh
    Rất nhiều tài liệu trong và ngoài nước đều nói là khg thể dùng Advanced Filter với vùng Criteria, vùng data, vùng Filter là 3 file Excel riêng biệt, tôi mày mò và đã làm được điều nầy, các bạn xem thử đoạn code này thử

    Mã:
    Option Explicit
    Option Private Module 'De Pubilc chi co tac dung trong all module in this project only
        Public WbColecRgn As Workbook, WbCopyRng As Workbook, WbCriteriaRng As Workbook
        'MyWks As Worksheet
        Public MyRngColection As Range, MyFilterAction As String
        Public iRow As Integer
        Public tRgColecWbDir As String, tRgColecWb As String, tRgColecWks As String, tRgColec As String
        Public MyCriteriaDir As String, MyCriteriaWb As String, MyCriteriaWk As String, MyCriteriaRng As String
        Public MyCopyToRangeDir As String, MyCopyToRangeWb As String, MyCopyToRangeWk As String, MyCopyToRangeRng As String
        Public Const MyFilterActionCopy As Integer = 2
        Public Const MyFilterActionInPlace As Integer = 1
        Public MyCriteriaRange As Variant, MyCopyToRange As Variant, MyUnique As Variant
    Sub FilterInKTTT_Main1()
    iRow = 3
    Call Main(iRow)
    End Sub
    
      
    Sub Main(iRow As Integer)
    Application.ScreenUpdating = False
    
    Call SetColectionRangeSource
    Call SetCriteriaAndCopyToRange
    'Can than khi dung InPlace va xoa Name, se co cac dong an hoi kho nhin de nham la kg co, phai unhide BANG Cells.Height
    If MyFilterAction = "xlFilterCopy" Then
        Call MyAdvancedFilter(MyFilterActionCopy, MyCriteriaRange, MyCopyToRange, MyUnique)
    Else
        Call MyAdvancedFilter1(MyFilterActionInPlace, MyCriteriaRange, MyCopyToRange, MyUnique)
    End If
    On Error Resume Next
    WbCopyRng.Names("Extract").Delete
    WbColecRgn.Names("_FilterDatabase").Delete
    'Call DeleteFilterName
    WbColecRgn.Close True
    WbCriteriaRng.Close True
    Set WbColecRgn = Nothing
    Set WbCriteriaRng = Nothing
    Set WbCopyRng = Nothing
    Application.ScreenUpdating = True
    End Sub
    Sub SetColectionRangeSource()
    With ThisWorkbook.Worksheets("Sheet1")
        tRgColecWbDir = .Cells(iRow, 2)
        tRgColecWb = .Cells(iRow, 3)
        tRgColecWks = .Cells(iRow, 4)
        tRgColec = .Cells(iRow, 5)
        
    If bIsBookOpen(.Cells(iRow, 3)) Then
            Set WbColecRgn = Workbooks(tRgColecWb)
            'Set MyWks = Worsheets(tRgColecWks)
        Else
            Set WbColecRgn = Workbooks.Open(tRgColecWbDir & tRgColecWb)
            'Set MyWks = Worsheets(tRgColecWks)
        End If
        Set MyRngColection = WbColecRgn.Worksheets(tRgColecWks).Range(tRgColec)
        
    
    
    End With
    
    
    'MyRngColection.AdvancedFilter MyFilterActionCopy, MyCriteriaRange, MyCopyToRange, MyUnique ok
    
    'Call DeleteFilterName
    '
    
    End Sub
    Sub SetCriteriaAndCopyToRange()
    
        With ThisWorkbook.Worksheets("Sheet1")
        
            MyCriteriaDir = .Cells(iRow, 6)
            MyCriteriaWb = .Cells(iRow, 7)
            MyCriteriaWk = .Cells(iRow, 8)
            MyCriteriaRng = .Cells(iRow, 9)
            If bIsBookOpen(MyCriteriaWb) Then
                Set WbCriteriaRng = Workbooks(MyCriteriaWb)
            Else
                Set WbCriteriaRng = Workbooks.Open(MyCriteriaDir & MyCriteriaWb)
            End If
        
            MyCopyToRangeDir = .Cells(iRow, 10)
            MyCopyToRangeWb = .Cells(iRow, 11)
            MyCopyToRangeWk = .Cells(iRow, 12)
            MyCopyToRangeRng = .Cells(iRow, 13)
            If bIsBookOpen(MyCopyToRangeWb) Then
                Set WbCopyRng = Workbooks(MyCopyToRangeWb)
            Else
                Set WbCopyRng = Workbooks.Open(MyCopyToRangeDir & MyCopyToRangeWb)
            End If
            
            Set MyCriteriaRange = Workbooks(MyCriteriaWb).Worksheets(MyCriteriaWk).Range(MyCriteriaRng)
            Set MyCopyToRange = Workbooks(MyCopyToRangeWb).Worksheets(MyCopyToRangeWk).Range(MyCopyToRangeRng)
            'MyCopyToRange.Select
            MyUnique = .Cells(iRow, 15)
            MyFilterAction = .Cells(2, 14)
                
    
        End With
        
     
        Application.ScreenUpdating = True
      
    End Sub
    Sub MyAdvancedFilter(MyFilterActionCpy As Integer, MyCriteriaRange As Variant, MyCopyToRange As Variant, MyUnique As Variant)
    
    'Khi vung Extract va Database cung 1 wb va sua Public bi loi? KHG
    'xOA bot name trong file KTTT_Main
        MyRngColection.AdvancedFilter MyFilterActionCopy, MyCriteriaRange, MyCopyToRange, MyUnique
       
    End Sub
    Sub MyAdvancedFilter1(MyFilterActionInPlace As Integer, MyCriteriaRange As Variant, MyCopyToRange As Variant, MyUnique As Variant)
    
        MyRngColection.AdvancedFilter1 MyFilterActionInPlace, MyCriteriaRange, MyCopyToRange, MyUnique
        
    End Sub
    
    Sub DeleteFilterName()
    On Error Resume Next
    With ActiveWorkbook
    .Names("_FilterDatabase").Delete
    .Names("Criteria").Delete
    .Names("Extract").Delete
    End With
    End Sub
    
    Function bIsBookOpen(ByRef szBookName As String) As Boolean
    ' Rob Bovey
        On Error Resume Next
        bIsBookOpen = Not (Application.Workbooks(szBookName) Is Nothing)
    End Function  
     
    #14
  15. maisuong79

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

    Bài viết:
    2
    Đã được thích:
    0
    Nơi ở:
    quận gò vấp, tp. hồ chí minh
    làm cách nào để số liệu tự cập nhật đến các sổ liên quan

    Cho em hỏi, làm cách nào để khi em nhập số liệu vào Số Nhật ký chung, số liệu tự cập nhập tới các sổ liên quan. Hiện tại em phải mở từng sổ để nhập số liệu nên công việc của em hơi vất vả và dễ sai sót, và em cũng ko rành các kiểm tra như thế nào? Giúp em với. Anh chị biết hãy liên lạc với em theo mail: maisuong79@yahoo.com hoặc hayrinh2009@yahoo.com
     
    #15
  16. vu thi nhu

    vu thi nhu Thành viên sơ cấp

    Bài viết:
    1
    Đã được thích:
    0
    Nơi ở:
    Cau Giay
    cac ham co ban trong excel

     
    #16
  17. hue hue

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

    Bài viết:
    229
    Đã được thích:
    1
    Nơi ở:
    Bắc ninh
    làm như bác này là được. nhưng chú ý khi lọc các tiêu đề trên cột (hàng tiêu của bảng) bạn viết thường là ok. Trước tớ học excel vậy đó
     
    #17
  18. THUYDB43

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

    Bài viết:
    3
    Đã được thích:
    0
    Nơi ở:
    thành phố hồ chí minh
    Ðề: Lọc dữ liệu trong Excel

    Tôi đang có vấn đề về lọc dữ liệu xin các bạn hướng dẫn dùm mình.
    tôi có một file có một số đối tượng giống nhau, vì thế tôi muốn lọc các đối tượng giống nhau ra rồi tôi dùng hàm sumif để tổng hợp giá trị của các đối tượng giống nhau, nhưng tôi không biết dùng hàm gì? Ví dụ
    A: 10
    B: 5
    A: 12
    B: 11
    Tôi muốn khi lọc xong sẽ ra như sau:
    A
    B
    rồi tôi dùng hàm sumif để ra tổng giá trị của A, B
    Tôi xin chân thành cảm ơn
     
    #18
  19. THUYDB43

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

    Bài viết:
    3
    Đã được thích:
    0
    Nơi ở:
    thành phố hồ chí minh
    Ðề: Lọc dữ liệu trong Excel

    Tôi đã tìm ra câu trả lời của tôi vừa hỏi rồi các bạn à, nếu bạn nào có cần thì tham khảo đây nha
    - Quét chọn vùng dử liệu gốc
    - vào menu Data\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 cell trên bảng tính, nơi đặt dử liệu sau khi lọc
    - Đánh dấu Unique Records Only ---> OK
     
    #19
  20. levanton

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

    Bài viết:
    3,924
    Đã được thích:
    138
    Giới tính:
    Nam
    Nơi ở:
    Thành phố mang tên Bác Hồ kính yêu
    Ðề: Lọc dữ liệu trong Excel

    KHi dùng hàm sumif bạn không cần lọc cũng co kết quả như mong muốn.
     
    #20

Chia sẻ trang này