Lọc dữ liệu trong Excel

  • Thread starter Buongbinhcom
  • Ngày gửi
B

Buongbinhcom

Guest
22/7/05
13
0
1
47
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)
 
Khóa học Quản trị dòng tiền
W

WhoamI

Cao cấp
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";"")
 
B

Buongbinhcom

Guest
22/7/05
13
0
1
47
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é!
 
DucThuan

DucThuan

Tè lè ra rồi !
4/12/04
173
4
18
Đầu đường xó chợ
WhoamI nó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";"")

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

luongvanluyen

Guest
2/9/05
27
0
0
HCM CITY
Buongbinhcom nói:
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)
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
 
W

workman

Guest
22/7/05
372
2
0
52
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.
 
L

luongvanluyen

Guest
2/9/05
27
0
0
HCM CITY
workman nói:
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.
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
 
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
582
103
43
67
HCM city
luongvanluyen nói:
Set bRange=Range("DuLieu")
Sub XXXAAA
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 đó
'...

End Sub 'Lương Văn Luyện
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:
 
Sửa lần cuối:
N

Nguyen Thach Xuyen

Guest
24/2/06
1
0
1
46
66 Pho Quang, Q.Tan Binh
Buongbinhcom nói:
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)
 
N

Ng Ha Anh Tuan

Guest
2/8/06
76
0
0
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
 
hieu1563

hieu1563

Guest
Buongbinhcom nói:
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)

Đâ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!
 
L

langdu117726

Guest
26/8/07
9
0
0
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
 
T

Tran Chau

Guest
23/11/04
149
0
0
65
TP Ho Chi Minh
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.
.......

Lương Văn Luyện
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
 
M

maisuong79

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

vu thi nhu

Guest
16/4/07
1
0
0
Cau Giay
cac ham co ban trong excel

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

hue hue

Cao cấp
7/1/10
226
1
18
Bắc ninh
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.

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 đó
 
T

THUYDB43

Guest
25/2/09
3
0
0
40
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
 
T

THUYDB43

Guest
25/2/09
3
0
0
40
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
 
levanton

levanton

Cao cấp
Ðề: 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

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

Xem nhiều

Webketoan Zalo OA