Hỏi Lại Về Advanced Filter Bằng VBA | Giải Pháp Excel
Có thể bạn quan tâm
- Trang chủ Có gì mới Hoạt động gần nhất Tác giả
- Diễn đàn Tìm bài viết mới Tìm theo chuyên mục
- Video
Video về Excel Video về tin học khác Tin tức về tin học chung - Thông tin mới Featured content Tìm bài mới Tài Nguyên Mới Hoạt động gần nhất
- Tài nguyên Đánh giá mới nhất Tìm tài nguyên
- Đóng góp
Tìm kiếm
Mọi nơi Đề tài Diễn đàn này Đề tài này Chỉ tìm trong tiêu đề Note Tìm kiếm Tìm nâng cao…- Tìm bài viết mới
- Tìm theo chuyên mục
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
- Khách ơi! GPE thông tin đến bạn ấn phẩm "lập trình VBA trong Excel": - Phần cơ bản - Phần Nâng Cao - VBA trong Excel - Cải thiện và tăng tốc
- Trang chủ
- Diễn đàn
- Lập Trình với Excel
- Thread starter Thread starter MinhKhai
- Ngày gửi Ngày gửi 9/11/13
Người dùng đang xem chủ đề này
Đang trực tuyến: 2 (Thành viên: 0, Khách: 2)MinhKhai
Giải pháp Ếc-xào
Tham gia 16/4/08 Bài viết 941 Được thích 574 Xin các anh chị em hướng dẫn lại em cái advanded filter bằng VBA như file đính kèm với. Chỉ là lọc với theo 2 chỉ tiêu và đưa danh sách kết quả ra chỗ khác mà em loay hoay mãi vẫn lỗi. Mong được các ACE giúp đỡ để học hỏi.File đính kèm
- Book2.rar Book2.rar 30.5 KB · Đọc: 111
Quang_Hải
Thành viên gạo cội



Tham gia 21/2/09 Bài viết 6,079 Được thích 8,019 Nghề nghiệp Làm đủ thứ MinhKhai đã viết: Xin các anh chị em hướng dẫn lại em cái advanded filter bằng VBA như file đính kèm với. Chỉ là lọc với theo 2 chỉ tiêu và đưa danh sách kết quả ra chỗ khác mà em loay hoay mãi vẫn lỗi. Mong được các ACE giúp đỡ để học hỏi. Nhấp chuột vào đây để mở rộng...Cấu trúc file của bạn không thể dùng AdvancedFilter để lọc, phải dùng mảng để lọc thôi Tạo mảng nguồn và dùng vòng lặp để duyệt, nếu em nào thoả dk thì lấy thôi. Cố thử xem Upvote 0
MinhKhai
Giải pháp Ếc-xào
Tham gia 16/4/08 Bài viết 941 Được thích 574quanghai1969 đã viết: Cấu trúc file của bạn không thể dùng AdvancedFilter để lọc, phải dùng mảng để lọc thôi Tạo mảng nguồn và dùng vòng lặp để duyệt, nếu em nào thoả dk thì lấy thôi. Cố thử xem Nhấp chuột vào đây để mở rộng...Cảm ơn anh. Lần trước cũng là anh hướng dẫn về Advandced Fiter. Anh nói cấu trúc của file không thể dùng AdvancedFilter có phải là các vị trí các cột kết quả không tuần tự như cột ở dữ liệu nguồn không ? Mong anh giúp cho cả 2 tình huống: 1. Giả sử cấu trúc này được sắp đặt giống như nguồn thì code viết thế nào ? 2. Dùng mảng và vòng lặp để thực hiện. Tôi đang tìm hiểu về VBA. Cũng đã đọc tài liệu nhưng nhưng nhận thấy không hiệu quả bằng xem các ví dụ cụ thể Upvote 0
Quang_Hải
Thành viên gạo cội



Tham gia 21/2/09 Bài viết 6,079 Được thích 8,019 Nghề nghiệp Làm đủ thứ MinhKhai đã viết: Cảm ơn anh. Lần trước cũng là anh hướng dẫn về Advandced Fiter. Anh nói cấu trúc của file không thể dùng AdvancedFilter có phải là các vị trí các cột kết quả không tuần tự như cột ở dữ liệu nguồn không ? Mong anh giúp cho cả 2 tình huống: 1. Giả sử cấu trúc này được sắp đặt giống như nguồn thì code viết thế nào ? 2. Dùng mảng và vòng lặp để thực hiện. Tôi đang tìm hiểu về VBA. Cũng đã đọc tài liệu nhưng nhưng nhận thấy không hiệu quả bằng xem các ví dụ cụ thể Nhấp chuột vào đây để mở rộng...AdvanceFilter chỉ có 1 dòng lệnh thôi nên bạn phải tự xử thôi. Code dùng vòng lặp theo file của bạn. Cột N chỉ có Trả tiền mặt là Tr thôi nha, nếu có gì mà 2 ký tự đầu giống Tr thì tèo ráng chịu PHP: Sao chép. Sub Loc() Dim Sarr(), Darr(), I, J, ngay With Sheets("BanHang") Sarr = .Range(.[B7], .[B65536].End(3)).Resize(, 13).Value End With ReDim Darr(1 To UBound(Sarr), 1 To 3) ngay = Sheets("TongKet").[C3].Value For I = 1 To UBound(Sarr) If Sarr(I, 1) = ngay Then If Left(Sarr(I, 13), 2) = "Tr" Then J = J + 1 Darr(J, 1) = Sarr(I, 5) Darr(J, 2) = Sarr(I, 3) Darr(J, 3) = Sarr(I, 11) End If End If Next Sheets("TongKet").[B6:D1000].ClearContents If J Then Sheets("TongKet").[B6].Resize(J, 3) = Darr End If End Sub Upvote 0
SA_DQ
/(hông là gì!
Thành viên danh dự Tham gia 8/6/06 Bài viết 14,797 Được thích 23,262 Nghề nghiệp U80 Muốn xài AdvancedFilter cũng được, nhưng nhiêu khê lắm: Thêm dòng tại chổ dòng 7; Tạo 1 số tên trường giả ở dòng mới thêm; Lọc lần thứ nhất, danh sách duy nhất chưa được tạo ra; Fải lọc từ kết quả đó mới ra DS duy nhất. Bạn thử đi để biết! Chỉnh sửa lần cuối bởi điều hành viên: 10/11/13 Upvote 0MinhKhai
Giải pháp Ếc-xào
Tham gia 16/4/08 Bài viết 941 Được thích 574quanghai1969 đã viết: Code dùng vòng lặp theo file của bạn. Cột N chỉ có Trả tiền mặt là Tr thôi nha, nếu có gì mà 2 ký tự đầu giống Tr thì tèo ráng chịu PHP: Sao chép. Sub Loc() Dim Sarr(), Darr(), I, J, ngay With Sheets("BanHang") Sarr = .Range(.[B7], .[B65536].End(3)).Resize(, 13).Value End With ReDim Darr(1 To UBound(Sarr), 1 To 3) ngay = Sheets("TongKet").[C3].Value For I = 1 To UBound(Sarr) If Sarr(I, 1) = ngay Then If Left(Sarr(I, 13), 2) = "Tr" Then J = J + 1 Darr(J, 1) = Sarr(I, 5) Darr(J, 2) = Sarr(I, 3) Darr(J, 3) = Sarr(I, 11) End If End If Next Sheets("TongKet").[B6:D1000].ClearContents If J Then Sheets("TongKet").[B6].Resize(J, 3) = Darr End If End Sub Nhấp chuột vào đây để mở rộng...Bác ơi, em đưa code vào nhưng không thấy hoạt động gì cả. Không biết là em thao tác sai chỗ nào ?
quanghai1969 đã viết: AdvanceFilter chỉ có 1 dòng lệnh thôi nên bạn phải tự xử thôi. Nhấp chuột vào đây để mở rộng...Đúng là AdvandedFilter chỉ có 1 dòng thôi mà em không biết nhấm chỗ nào mà không ra. Em đã thử record macro để có cú pháp chuẩn nhưng record macro chỉ cho 1 tiêu chí mà ở đây mình cần lọc >2 tiêu chí Upvote 0
Ba Tê
Cạo Rồi Khỏi Gội
Tham gia 5/5/09 Bài viết 12,123 Được thích 17,590 Giới tính NamMinhKhai đã viết: Bác ơi, em đưa code vào nhưng không thấy hoạt động gì cả. Không biết là em thao tác sai chỗ nào ? Đúng là AdvandedFilter chỉ có 1 dòng thôi mà em không biết nhấm chỗ nào mà không ra. Em đã thử record macro để có cú pháp chuẩn nhưng record macro chỉ cho 1 tiêu chí mà ở đây mình cần lọc >2 tiêu chí Nhấp chuột vào đây để mở rộng...Thử lại với file này xem sao Sửa lại giùm dòng thứ 5 từ dưới lên thành .[A6:E1000].ClearContents
File đính kèm
- GPExxx.rar GPExxx.rar 33.4 KB · Đọc: 191
Quang_Hải
Thành viên gạo cội



Tham gia 21/2/09 Bài viết 6,079 Được thích 8,019 Nghề nghiệp Làm đủ thứ MinhKhai đã viết: Bác ơi, em đưa code vào nhưng không thấy hoạt động gì cả. Không biết là em thao tác sai chỗ nào ? Nhấp chuột vào đây để mở rộng...Hic, code có rồi thì cố gắng cho nó chạy đi. AdvancedFilter mà gặp dữ liệu nhiều sẽ chậm hơn dùng mảng. Và nếu thêm bớt dk thì mảng sẽ linh hoạt hơn. ....................................... Xem bài anh Bate mới thấy mình lọc ẩu thiệt. Hic Lần chỉnh sửa cuối: 10/11/13 Upvote 0
ndu96081631
Huyền thoại GPE
Thành viên BQT Super Moderator Tham gia 5/6/08 Bài viết 30,703 Được thích 53,982 MinhKhai đã viết: Xin các anh chị em hướng dẫn lại em cái advanded filter bằng VBA như file đính kèm với. Chỉ là lọc với theo 2 chỉ tiêu và đưa danh sách kết quả ra chỗ khác mà em loay hoay mãi vẫn lỗi. Mong được các ACE giúp đỡ để học hỏi. Nhấp chuột vào đây để mở rộng...Tôi nghĩ rằng sau khi lọc xong, nếu cùng số phiếu thì phải SUM thành tiền lại, đúng không? Vậy thì bài này nên dùng PivoTable chứ không phải Advanced Filter Nhưng cho dù dùng AF hay PV thì dữ liệu sheet BanHang cũng phải sửa lại: Tiêu đề cột phải là 1 dòng duy nhất và không được merge cell Sau khi bạn chuẩn hóa dữ liệu rồi thì PivotTable mới là chọn lựa tốt nhất: Tốc độ nhanh nhất, dùng đơn giản nhất và khỏi code kiết gì ráo cho mệt người Upvote 0
MinhKhai
Giải pháp Ếc-xào
Tham gia 16/4/08 Bài viết 941 Được thích 574ndu96081631 đã viết: Sau khi bạn chuẩn hóa dữ liệu rồi thì PivotTable mới là chọn lựa tốt nhất: Tốc độ nhanh nhất, dùng đơn giản nhất và khỏi code kiết gì ráo cho mệt người Nhấp chuột vào đây để mở rộng...Em chưa bao giờ sử dụng PivotTable và cũng chưa hiểu tác dụng cũng như cách dùng nó. Vừa rồi cũng chớp nhoáng đọc Ebook của bác Ptm0412 nhưng chưa hấp thụ được gì. Em đã chuẩn hóa lại dữ liệu trong file đính kèm, bác có thể sử dụng PivotTable để "chế biến" file dữ liệu giúp em được không ? Qua kết quả em muốn biết PivotTable làm được gì và như thế nào thôi. https://dl.dropboxusercontent.com/s...AHZ8ZvAfpt3JsaC9lebWz4ClWlYb8CWNcL-VwuXNOjGTA Upvote 0 L
longlt08
Thành viên thường trực



Tham gia 23/3/08 Bài viết 322 Được thích 401 Chào bạn ! Tôi đã xem file của bạn được sắp xếp lại. Đúng như góp ý của ndu96081631 bạn nên sử dụng PivotTable. Công cụ tuyệt vời của Excel (PV) sẽ giải quyết cho bạn thật là đơn giản. Bạn nên nghiên cứu PivotTable để giải quyết các loại báo cáo, tổng hợp số liệu. Nếu bạn cần học về PivotTable thì trên GPE có rất nhiều tài liệu. Bạn gửi thêm về yêu cầu lọc dữ liệu để khai thác từ bảng dữ liệu đã có vào email của mình. Mình sẽ dùng PivotTable lọc giúp. Chào bạn !. [email protected] Upvote 0 ndu96081631
Huyền thoại GPE
Thành viên BQT Super Moderator Tham gia 5/6/08 Bài viết 30,703 Được thích 53,982 MinhKhai đã viết: Em chưa bao giờ sử dụng PivotTable và cũng chưa hiểu tác dụng cũng như cách dùng nó. Vừa rồi cũng chớp nhoáng đọc Ebook của bác Ptm0412 nhưng chưa hấp thụ được gì. Em đã chuẩn hóa lại dữ liệu trong file đính kèm, bác có thể sử dụng PivotTable để "chế biến" file dữ liệu giúp em được không ? Qua kết quả em muốn biết PivotTable làm được gì và như thế nào thôi. https://dl.dropboxusercontent.com/s...AHZ8ZvAfpt3JsaC9lebWz4ClWlYb8CWNcL-VwuXNOjGTA Nhấp chuột vào đây để mở rộng...Cũng dễ ồm hà! Bạn có thể tự mò hoặc theo dõi video click dưới đây (tôi chỉ làm sơ qua, đương nhiên có thể trang trí thêm có đẹp hơn nữa cũng được) [video=youtube;4DH51vU4pxI]http://www.youtube.com/watch?v=4DH51vU4pxI&feature=youtu.be[/video] Upvote 0
embevinhphuc
Thành viên mới 
Tham gia 13/2/15 Bài viết 20 Được thích 6 Các anh chị cho em hỏi về advanced filter. 1. Với Sub LocDL thì khi thay giá trị ở B1=1 là kết quả lọc sai, thay khác 1 thì lại đúng. Cho em hỏi nguyên nhân vì sao ạ. 2. E có tạo vòng lặp như code dưới, em xem mãi mà không hiểu vì sao code không chạy ạ? Chỉ em chỗ sai. Em cảm ơn nhiều. Sub LocDL() Range("A1:B407").AdvancedFilter 2, Range("V1:V2"), Range("V10") End Sub Sub loc() Dim i As Long Dim j As Long For i = 1 To 400 For j = 1 To 20 Step 2 Range(Cells(1, j), Cells(400, j + 1)).AdvancedFilter 2, Range(Cells(1, j + 21), Cells(2, j + 21)), Range(Cells(10, j + 21)) Next Next End Sub File đính kèm
- Advanced Filter.xlsm Advanced Filter.xlsm 19.7 KB · Đọc: 38
ChanhTQ@
0901452không62
Tham gia 5/9/08 Bài viết 4,254 Được thích 4,861 Cho mình hỏi lại bạn 1 chút xíu, rằng con số 2 trong câu lệnh PHP: Sao chép. Range("A1:B407").AdvancedFilter 2, Range("V1:V2"), Range("V10") có nghĩa là gì vậy bạn? & thêm 1 câu nữa: Bạn muốn làm gì với macro này: PHP: Sao chép. Sub loc() Dim i As Long, j As Long For i = 1 To 400 For j = 1 To 20 Step 2 Range(Cells(1, j), Cells(400, j + 1)).AdvancedFilter 2, Range(Cells(1, j + 21), Cells(2, j + 21)), Range(Cells(10, j + 21)) Next J Next I Lần chỉnh sửa cuối: 23/2/15 Upvote 0embevinhphuc
Thành viên mới 
Tham gia 13/2/15 Bài viết 20 Được thích 6 ChanhTQ@ đã viết: Cho mình hỏi lại bạn 1 chút xíu, rằng con số 2 trong câu lệnh PHP: Sao chép. Range("A1:B407").AdvancedFilter 2, Range("V1:V2"), Range("V10") có nghĩa là gì vậy bạn? & thêm 1 câu nữa: Bạn muốn làm gì với macro này: PHP: Sao chép. Sub loc() Dim i As Long, j As Long For i = 1 To 400 For j = 1 To 20 Step 2 Range(Cells(1, j), Cells(400, j + 1)).AdvancedFilter 2, Range(Cells(1, j + 21), Cells(2, j + 21)), Range(Cells(10, j + 21)) Next J Next I Nhấp chuột vào đây để mở rộng...Số 2 nào anh, sau advanced filter ạ? E cũng chỉ đọc và làm theo trên Gpe thôi, thấy mọi ng bảo advanced filter 1 là lọc tại chỗ, 2 là copy kết quả sang chỗ khác. Macro này e chỉ là muốn tạo vòng lặp cho advanced filter thôi, filter theo đk nào đó(ở file e ví dụ là OK) cho 2 cột j và j+1. Upvote 0
ndu96081631
Huyền thoại GPE
Thành viên BQT Super Moderator Tham gia 5/6/08 Bài viết 30,703 Được thích 53,982 embevinhphuc đã viết: Các anh chị cho em hỏi về advanced filter. 1. Với Sub LocDL thì khi thay giá trị ở B1=1 là kết quả lọc sai, thay khác 1 thì lại đúng. Cho em hỏi nguyên nhân vì sao ạ. 2. E có tạo vòng lặp như code dưới, em xem mãi mà không hiểu vì sao code không chạy ạ? Chỉ em chỗ sai. Em cảm ơn nhiều. Sub LocDL() Range("A1:B407").AdvancedFilter 2, Range("V1:V2"), Range("V10") End Sub Sub loc() Dim i As Long Dim j As Long For i = 1 To 400 For j = 1 To 20 Step 2 Range(Cells(1, j), Cells(400, j + 1)).AdvancedFilter 2, Range(Cells(1, j + 21), Cells(2, j + 21)), Range(Cells(10, j + 21)) Next Next End Sub Nhấp chuột vào đây để mở rộng...Cũng không hiểu bạn định làm gì nhưng với cấu trúc dữ liệu như trong file mà dùng Advanced Filter được mới... lạ đó Upvote 0
embevinhphuc
Thành viên mới 
Tham gia 13/2/15 Bài viết 20 Được thích 6 ndu96081631 đã viết: Cũng không hiểu bạn định làm gì nhưng với cấu trúc dữ liệu như trong file mà dùng Advanced Filter được mới... lạ đó Nhấp chuột vào đây để mở rộng...Dữ liệu của em đơn giản mà thầy, đây chỉ là dữ liệu e tự cho random để làm ví dụ thôi, Thực tế bài toán Advanced filter chỉ làm với 2 cột, cột đầu chỉ là giá trị "OK" và blank(), cột 2 là số ngẫu nhiên em lấy theo hàm randbetween ấy mà. Yêu cầu đặt ra là lọc theo đk nào đó (ở đây là cột 1="OK") và trả giá trị sau lọc sang bên phải. Như code ở nút Lọc chạy được rồi ạ. Nhưng em cho chạy vòng lặp để tự động lọc các cặp cột tiếp theo thì code không chạy. Em không hiểu code sai ở đâu, kính nhờ thầy và các anh chị giúp đỡ. PS. Em tô màu một chút và Add comment cho dễ hiểu hơn.
File đính kèm
- Advanced Filter.xlsm Advanced Filter.xlsm 35.5 KB · Đọc: 42
Ba Tê
Cạo Rồi Khỏi Gội
Tham gia 5/5/09 Bài viết 12,123 Được thích 17,590 Giới tính Namembevinhphuc đã viết: Dữ liệu của em đơn giản mà thầy, đây chỉ là dữ liệu e tự cho random để làm ví dụ thôi, Thực tế bài toán Advanced filter chỉ làm với 2 cột, cột đầu chỉ là giá trị "OK" và blank(), cột 2 là số ngẫu nhiên em lấy theo hàm randbetween ấy mà. Yêu cầu đặt ra là lọc theo đk nào đó (ở đây là cột 1="OK") và trả giá trị sau lọc sang bên phải. Như code ở nút Lọc chạy được rồi ạ. Nhưng em cho chạy vòng lặp để tự động lọc các cặp cột tiếp theo thì code không chạy. Em không hiểu code sai ở đâu, kính nhờ thầy và các anh chị giúp đỡ. PS. Em tô màu một chút và Add comment cho dễ hiểu hơn. Nhấp chuột vào đây để mở rộng...Thử chạy SUB này xem sao. PHP: Sao chép. Public Sub GPE() Dim I As Long For I = 1 To 19 Step 2 Cells(1, I).Resize(1000, 2).AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("A1:A2").Offset(, I + 20), CopyToRange:=Range("A1:B1").Offset(9, I + 20) Next I End Sub Upvote 0
SA_DQ
/(hông là gì!
Thành viên danh dự Tham gia 8/6/06 Bài viết 14,797 Được thích 23,262 Nghề nghiệp U80Dữ liệu của em đơn giản mà thầy, đây chỉ là dữ liệu e tự cho random để làm ví dụ thôi, Thực tế bài toán Advanced filter chỉ làm với 2 cột, cột đầu chỉ là giá trị "OK" và blank(), cột 2 là số ngẫu nhiên em lấy theo hàm randbetween ấy mà. Yêu cầu đặt ra là lọc theo đk nào đó (ở đây là cột 1="OK") và trả giá trị sau lọc sang bên phải. Như code ở nút Lọc chạy được rồi ạ. Nhưng em cho chạy vòng lặp để tự động lọc các cặp cột tiếp theo thì code không chạy. Em không hiểu code sai ở đâu, kính nhờ thầy và các anh chị giúp đỡ. Nhấp chuột vào đây để mở rộng...Đúng là macro này đã chạy được: Mã: Sao chép. Sub LocDL() Range("A1:B407").AdvancedFilter 2, Range("V1:V2"), Range("V10") End Sub Mình xin dịch câu lệnh này sang tiếng Việt như sau (dù bạn có biết hay chưa biết nghĩa tiếng Việt của nó) Thực hiện fương thức lọc mở rọng từ vùng dữ liệu[A1:B407], với vùng điều kiện là [V1:V2] & kết quả lọc được được thể hiện fía dưới của ô [V10] Giá trị đang chứa trong [V10] l1 1, ứng với iêu cầu hiễn nhiên của bạn là lọc theo cột [A] Cần nói thêm rằng, ở bài đầu, bạn nói rằng khi sửa trị tại [B1] thì kết quả lọc thay đổi (Thay đổi, chứ không nói cái nào đúng cái nào sai!) Thì mình khẳng định là không có chuyện đó! (*) Nói thêm rằng sẽ là thay đổi hay trở nên kỳ dị nếu tại [V10] chửa trị của [B1] & ta lại đi đổi [B1] (**) Nếu tại [V10] bạn nhập vô trị đang có ở [B1] lúc đó thì bạn đúng. Mình nhấn mạnh trị tại [V10] vì liên quan đến sai fạm của bạn trong macro thứ 2; đó là câu lệnh được trích ra sau đây: Mã: Sao chép. . . . ..AdvancedFilter 2, Range(Cells(1, j + 21), Cells(2, j + 21)),[b] Range(Cells(10, j + 21)[/b]) Mệnh đề mình in đậm này làm mình hiểu rằng bạn chưa thấu đáo với fương thức AdvancedFilter trong đời thường nói riêng hay trong VBA nói chung Vì để macro này khỏi lạc lối, 19 ô bên fải liền kề với [V10] cần được bạn hay ai đó cho trị tương ứng. Một sai lầm nữa là của bạn có thể là vòng lặp PHP: Sao chép. For I = 1 to 400 Next I Mình tưởng tượng là bạn cần lọc từng đôi cột từ [A].. đến [T] (20 cột) (có nghĩa chỉ 10 lần lặp chứ không fải 20 như bạn đang làm trong vòng lặp trong) Theo mình hiểu thì bạn định lọc dữ liệu 2 cột [AB] đến dưới [V10]; Sau đó lọc [CD] cho hiện kết quả đạt dưới [W10] (1) Nếu đúng vậy thì bạn dư vòng lặp ngoài (vì chưa thấu đáo AdvancedFilter) (2) Các ô bên fải của [V10] cần được gán trị tương ứng [A1], [C1], . . . .[T1] bằng 1 cách nào đó Thân ái! Upvote 0
embevinhphuc
Thành viên mới 
Tham gia 13/2/15 Bài viết 20 Được thích 6 Ba Tê đã viết: Thử chạy SUB này xem sao. PHP: Sao chép. Public Sub GPE() Dim I As Long For I = 1 To 19 Step 2 Cells(1, I).Resize(1000, 2).AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Range("A1:A2").Offset(, I + 20), CopyToRange:=Range("A1:B1").Offset(9, I + 20) Next I End Sub Nhấp chuột vào đây để mở rộng...Chạy được ngon lành rồi thầy ạ. Có lẽ em phải nghiên cứu về mảng thôi, em đang làm quen với cells và range nên mảng hơi khoai. Cảm ơn thầy nhiều. Upvote 0
embevinhphuc
Thành viên mới 
Tham gia 13/2/15 Bài viết 20 Được thích 6 SA_DQ đã viết: Đúng là macro này đã chạy được: Mã: Sao chép. Sub LocDL() Range("A1:B407").AdvancedFilter 2, Range("V1:V2"), Range("V10") End Sub Mình xin dịch câu lệnh này sang tiếng Việt như sau (dù bạn có biết hay chưa biết nghĩa tiếng Việt của nó) Thực hiện fương thức lọc mở rọng từ vùng dữ liệu[A1:B407], với vùng điều kiện là [V1:V2] & kết quả lọc được được thể hiện fía dưới của ô [V10] Giá trị đang chứa trong [V10] l1 1, ứng với iêu cầu hiễn nhiên của bạn là lọc theo cột [A] Cần nói thêm rằng, ở bài đầu, bạn nói rằng khi sửa trị tại [B1] thì kết quả lọc thay đổi (Thay đổi, chứ không nói cái nào đúng cái nào sai!) Thì mình khẳng định là không có chuyện đó! (*) Nói thêm rằng sẽ là thay đổi hay trở nên kỳ dị nếu tại [V10] chửa trị của [B1] & ta lại đi đổi [B1] (**) Nếu tại [V10] bạn nhập vô trị đang có ở [B1] lúc đó thì bạn đúng. Mình nhấn mạnh trị tại [V10] vì liên quan đến sai fạm của bạn trong macro thứ 2; đó là câu lệnh được trích ra sau đây: Mã: Sao chép. . . . ..AdvancedFilter 2, Range(Cells(1, j + 21), Cells(2, j + 21)),[B] Range(Cells(10, j + 21)[/B]) Mệnh đề mình in đậm này làm mình hiểu rằng bạn chưa thấu đáo với fương thức AdvancedFilter trong đời thường nói riêng hay trong VBA nói chung Vì để macro này khỏi lạc lối, 19 ô bên fải liền kề với [V10] cần được bạn hay ai đó cho trị tương ứng. Một sai lầm nữa là của bạn có thể là vòng lặp PHP: Sao chép. For I = 1 to 400 Next I Mình tưởng tượng là bạn cần lọc từng đôi cột từ [A].. đến [T] (20 cột) (có nghĩa chỉ 10 lần lặp chứ không fải 20 như bạn đang làm trong vòng lặp trong) Theo mình hiểu thì bạn định lọc dữ liệu 2 cột [AB] đến dưới [V10]; Sau đó lọc [CD] cho hiện kết quả đạt dưới [W10] (1) Nếu đúng vậy thì bạn dư vòng lặp ngoài (vì chưa thấu đáo AdvancedFilter) (2) Các ô bên fải của [V10] cần được gán trị tương ứng [A1], [C1], . . . .[T1] bằng 1 cách nào đó Thân ái! Nhấp chuột vào đây để mở rộng...Đúng là giờ đọc bài của anh em mới nhận ra là trong câu lệnh không hề có biến i, vậy mà vẫn cứ ...Chỉ tại em quá tập trung vào cells(i,j) nên vậy. Em mới học VBA từ 28 tết này mà, em đang viết bài tập thứ 3 đấy, làm sao mà hiểu thấu đáo ngay đk, hy vọng dần dần cũng hiểu đk. Cảm ơn anh đã chỉ bảo. Dùng cells và range nó trực quan nên dẽ hiểu hơn, chỉ buồn mỗi chuyện có những code viết xong, chạy đk mừng lắm rồi nhưng ngồi hút hết bao thuốc nó chả chạy xong. Upvote 0
SA_DQ
/(hông là gì!
Thành viên danh dự Tham gia 8/6/06 Bài viết 14,797 Được thích 23,262 Nghề nghiệp U80 Bạn thử đọc & dịch ra tiếng Việt các câu lệnh của macro sau PHP: Sao chép. Option Explicit Sub loc() Dim J As Long, Rws As Long Rws = Sheets("Loc").UsedRange.Rows.Count Columns("V:AZ").ClearContents For J = 1 To 20 Step 2 [V1].Value = Cells(1, J).Value [u10].Offset(, J).Value = Cells(1, J).Value [v2].Value = [A2].Value Cells(1, J).Resize(Rws, 2).AdvancedFilter 2, [V1:V2], Cells(10, J + 21) Next J End Sub Upvote 0 ĐĐình Phán
Thành viên thường trực



Tham gia 23/11/10 Bài viết 232 Được thích 68 Giới tính Nam Nghề nghiệp kt HYen17 đã viết: Bạn thử đọc & dịch ra tiếng Việt các câu lệnh của macro sau PHP: Sao chép. Option Explicit Sub loc() Dim J As Long, Rws As Long ' Đếm số dòng dử dụng Rws = Sheets("Loc").UsedRange.Rows.Count 'Xóa dữ liệu từ cột V đến cột AZ Columns("V:AZ").ClearContents 'Vòng lặp với J bắt đầu từ 1 đến 20, nhảy 2 bước tức là vòng lặp gồm các số lẻ For J = 1 To 20 Step 2 'Range V1 có giá trị bằng giá trị của dòng 1 tại các ô lẻ [V1].Value = Cells(1, J).Value 'Range U10, sang bên J cột bằng giá trị của dòng 1 tại các ô lẻ [u10].Offset(, J).Value = Cells(1, J).Value 'Giá trị tại ô V2 bằng giá trị tại ô A2 [v2].Value = [A2].Value ' Xuống Rws dòng và sang 2 cột, copy sang vùng khác với điều kiện lọc là tại các ô Cells(1, J).Resize(Rws, 2).AdvancedFilter 2, [V1:V2], Cells(10, J + 21) Next J End Sub Nhấp chuột vào đây để mở rộng...Em xin phép được dịch, có gì các anh chỉ thêm vì em cũng chập chững VBA được tuần nay thôi ạ. Upvote 0
SA_DQ
/(hông là gì!
Thành viên danh dự Tham gia 8/6/06 Bài viết 14,797 Được thích 23,262 Nghề nghiệp U80 Mã: Sao chép. [COLOR="#0000CD"]' Xuống Rws dòng và sang 2 cột, copy sang vùng khác với điều kiện lọc là tại các ô '[/COLOR] Cells(1, J).Resize(Rws, 2).AdvancedFilter 2, [V1:V2], Cells(10, J + 21) Next J Tiến hành lọc mở rọng từ dữ liệu của 2 cột theo vòng lặp, mà ô trái trên nhất là các ô thuộc cột lẽ bắt đầu từ [A1], mở rọng theo dòng xuống hết vùng chứa dữ liệu; Điều kiện lọc tại [V1:V2]; Kết quả hiễn thị tại các ô dưới [V10] & các ô fát triển về bên fải sau mỗi lần lặp. Upvote 0Ba Tê
Cạo Rồi Khỏi Gội
Tham gia 5/5/09 Bài viết 12,123 Được thích 17,590 Giới tính Namembevinhphuc đã viết: Chạy được ngon lành rồi thầy ạ. Có lẽ em phải nghiên cứu về mảng thôi, em đang làm quen với cells và range nên mảng hơi khoai. Cảm ơn thầy nhiều. Nhấp chuột vào đây để mở rộng...Muốn nghiên cứu mảng thì xem thử cái này, với dữ liệu như file của bạn thì xài mảng tốc độ sẽ nhanh hơn gấp 10 lần Advanced Filter như bài #18. PHP: Sao chép. Public Sub GPE_2() Dim sArr(), dArr(1 To 1000, 1 To 20), I As Long, J As Long, K As Long, R As Long sArr = Range("A1:T1000").Value2 For J = 1 To 19 Step 2 K = 0 For I = 1 To 1000 If sArr(I, J) <> Empty Then K = K + 1 dArr(K, J) = sArr(I, J) dArr(K, J + 1) = sArr(I, J + 1) End If Next I If K > R Then R = K Next J Range("V10").Resize(R, 20) = dArr End Sub Upvote 0
embevinhphuc
Thành viên mới 
Tham gia 13/2/15 Bài viết 20 Được thích 6 HYen17 đã viết: Bạn thử đọc & dịch ra tiếng Việt các câu lệnh của macro sau PHP: Sao chép. Option Explicit Sub loc() Dim J As Long, Rws As Long Rws = Sheets("Loc").UsedRange.Rows.Count Columns("V:AZ").ClearContents For J = 1 To 20 Step 2 [V1].Value = Cells(1, J).Value [u10].Offset(, J).Value = Cells(1, J).Value [v2].Value = [A2].Value Cells(1, J).Resize(Rws, 2).AdvancedFilter 2, [V1:V2], Cells(10, J + 21) Next J End Sub Nhấp chuột vào đây để mở rộng...Em đi làm rồi nên không online đk, bác Đình Phán và bác SA-DQ dịch mất rồi, em có hiểu sơ thôi, còn lại vẫn phải google hết, trc bài này e không biết cells(i,j).resize(k,l) và cells(i,j).Offset(m,n) đâu, mới đọc cũng đoán đk nhưng giờ cũng hiểu sơ sơ rồi. E cảm ơn bác Upvote 0
embevinhphuc
Thành viên mới 
Tham gia 13/2/15 Bài viết 20 Được thích 6 Ba Tê đã viết: Muốn nghiên cứu mảng thì xem thử cái này, với dữ liệu như file của bạn thì xài mảng tốc độ sẽ nhanh hơn gấp 10 lần Advanced Filter như bài #18. PHP: Sao chép. Public Sub GPE_2() Dim sArr(), dArr(1 To 1000, 1 To 20), I As Long, J As Long, K As Long, R As Long sArr = Range("A1:T1000").Value2 For J = 1 To 19 Step 2 K = 0 For I = 1 To 1000 If sArr(I, J) <> Empty Then K = K + 1 dArr(K, J) = sArr(I, J) dArr(K, J + 1) = sArr(I, J + 1) End If Next I If K > R Then R = K Next J Range("V10").Resize(R, 20) = dArr End Sub Nhấp chuột vào đây để mở rộng...Tại vì mới đọc bài thấy có Resize nên em đã nghĩ nhầm là thầy dùng mảng (đọc mấy bài trc thấy thầy viết mảng nhiều, lại thấy nhiều chữ Resize nên ...). Code này Em sẽ nghiên cứu từ từ. Ơn thầy nhiều Upvote 0
ChanhTQ@
0901452không62
Tham gia 5/9/08 Bài viết 4,254 Được thích 4,861Chạy ngon rồi thầy ạ. Có lẽ em phải nghiên cứu về mảng thôi, em đang làm quen với cells và range nên mảng hơi khoai. Cảm ơn thầy nhiều. Nhấp chuột vào đây để mở rộng...Theo mình thì bạn khoan chuyển sang "Mảng" cái đã; Nên lật đi lật lại tất tần tật các fương án có thể của macro AdvancedFilter này trong nữa tháng nữa đã; Ví dụ: 1./ Lọc & đếm số kết quả lọc được trong 10 cột lẻ kể từ cột [A] 2./ Trong bài trên, trong 1 cột cần lọc chỉ có 2 tiêu chí để lọc; nếu nhiều hơn 2 tiêu chí thì sẽ lọc làm sao? 3./ Có thể không cần lọc, mà chỉ cần đếm trực tiếp kết quả từng cặp cột theo điều kiện lọc được không? . . . . . Upvote 0
embevinhphuc
Thành viên mới 
Tham gia 13/2/15 Bài viết 20 Được thích 6 ChanhTQ@ đã viết: Theo mình thì bạn khoan chuyển sang "Mảng" cái đã; Nên lật đi lật lại tất tần tật các fương án có thể của macro AdvancedFilter này trong nữa tháng nữa đã; Ví dụ: 1./ Lọc & đếm số kết quả lọc được trong 10 cột lẻ kể từ cột [A] 2./ Trong bài trên, trong 1 cột cần lọc chỉ có 2 tiêu chí để lọc; nếu nhiều hơn 2 tiêu chí thì sẽ lọc làm sao? 3./ Có thể không cần lọc, mà chỉ cần đếm trực tiếp kết quả từng cặp cột theo điều kiện lọc được không? . . . . . Nhấp chuột vào đây để mở rộng...Em muốn vậy thôi chứ giờ đi làm quần quật cả ngày rồi, không biết có đủ sức học tiếp nữa không. Advanced filter đến đây đã làm e kinh ngạc lắm rồi, những điều trc đây không hề dám nghĩ tới, giờ chỉ bấm nút đã xong. Cái này bới ra e thấy cũng hay lắm rồi, trc đây tìm khắp diễn đàn cũng chỉ nói về advanced filter thuần túy, nay đã mở rộng qua đến vòng lặp, với những ng có kinh nghiệm ko vấn đề gì, nhưng đối với vbanewer e nghĩ là rất tuyệt. Anh chị nào cần xử lý vòng lặp với Advanced filter thì tham khảo các bài viết này của các thầy và các anh nhé. Upvote 0 Bạn phải đăng nhập hoặc đăng ký để trả lời bài viết tại đây.
Bài viết mới nhất
M Bảo mật code VBA autocad! (2 người xem)- Michael Bit
- Hôm nay lúc 08:44
- Hỏi đáp những vấn đề khác
- Đã giải quyết
- HeSanbi
- 18/4/21
- Lập Trình với Excel
- SA_DQ
- 3/11/25
- Chia sẻ
- nguyendang95
- 6/7/25
- Excel và các ngôn ngữ lập trình khác
- Question Question
- ongke0711
- 6/10/24
- Lập Trình với Excel
- Đã giải quyết
- HeSanbi
- 5/3/21
- Lập Trình với Excel
- Dán lên cao
- Nguyễn Duy Tuân
- 13/9/24
- BLUESOFTS: A-Excel, A-Tools
- Excel my love_1
- 15/4/23
- Tin học mở rộng
- lehang0812
- Thứ năm lúc 17:12
- TPHCM
- Question Question
- Quang_Hải
- Thứ tư lúc 10:14
- Lập Trình với Excel
- HeSanbi
- 27/11/25
- Các Add-ins cho excel
- Question Question
- HeSanbi
- 2/2/26
- Lập Trình với Excel
- TranThanhPhong
- 30/4/14
- Dự án: Công thức & Hàm 97-2019
- giaiphap
- 8/8/15
- Các Add-ins cho excel
- vietdang170
- 28/1/26
- Các Add-ins cho excel
- hoanglocphat
- 2/2/26
- Hỏi đáp những vấn đề khác
- mrjun80
- 31/1/26
- Hàm và công thức Excel
- nguyendang95
- 23/1/26
- Excel và các ngôn ngữ lập trình khác
- Question Question
- ongke0711
- 24/7/25
- Lập Trình với Excel
- phuongnam366377
- 31/1/26
- Excel và các ngôn ngữ lập trình khác
Thành viên có số lượng bài viết cao nhất tháng
- HeSanbi 14
- chothadiem 11
- Gà Công Nghệ 5
- Officexinh 4
- vietdang170 4
- Michael Bit 4
- pycckuu410 3
- HieuCD 3
- chiendich 3
- hoanglocphat 3
- YêuCN 2
- VietHoangPhan 2
- DeTong 2
- Gà Con yêu VBA 2
- Quang_Hải 2
- LOGANWover 1
- linhdao2909 1
- HUONGHCKT 1
- vuvannguyen1972 1
- PhanTuHuong 1
Thành viên có điểm tương tác cao nhất tháng
- HeSanbi 19
- Quang_Hải 7
- vietdang170 5
- Gà Con yêu VBA 4
- pycckuu410 3
- HieuCD 3
- chiendich 3
- DeTong 3
- Phuocam 3
- Officexinh 2
- HUONGHCKT 2
- Michael Bit 1
Thời gian đếm ngược.
000 Ngày 00 Giờ 00 phút 00 giây Thân mời tham dự sự kiện sinh nhật GPE 2025- Trang chủ
- Diễn đàn
- Lập Trình với Excel
- Website này sử dụng cookies. Tiếp tục sử dụng trang này, đồng nghĩa với việc bạn chấp nhận website sử dụng cookies. Chấp nhận Tìm hiểu thêm.…
Từ khóa » Filter Bằng Vba
-
Hướng Dẫn Cách Sử Dụng VBA để Lọc Dữ Liệu Vào Báo Cáo Chi Tiết
-
Cách Sử Dụng AutoFilter Trong VBA - Học Excel Online Miễn Phí
-
Sử Dụng Autofilter Trong VBA (Phần 2) - Thủ Thuật
-
Lọc Dữ Liệu Báo Cáo Trên Excel Bằng VBA (Áp Dụng Phương Pháp ...
-
Hướng Dẫn Cách Tự động Lọc Dữ Liệu Trong Excel Dùng VBA
-
VBA Excel Cấp Tốc Bài 1 - Lọc Dữ Liệu Nhiều Điều Kiện Với ...
-
Cách Tìm Kiếm Nhanh Trong Excel Bằng VBA-Filter
-
Mẹo Lọc Dữ Liệu Bằng VBA Trong Excel Không Phải Ai Cũng Biết
-
Top #10 Bỏ Filter Trong Excel Vba Xem Nhiều Nhất, Mới Nhất 7 ...
-
AutoFilter | Tự Học VBA
-
Auto Filter Tự động Bằng Từ Cách Gõ Từ Khóa Trong VBA!
-
Copy Khi Filter Dòng Bằng VBA | Giải Pháp Excel
-
Làm Cách Nào để Lọc Ngày Giữa Hai Ngày Cụ Thể Trong Excel?
-
Excel VBA Autofilter: A Complete Guide With Examples