Hỏi Lại Về Advanced Filter Bằng VBA | Giải Pháp Excel

Giải Pháp Excel
  • 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 New 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
  • Facebook
  • Đóng góp
Đăng nhập Đăng Ký Có gì mới? Tìm kiếm

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 Bởi: Tìm kiếm Tìm nâng cao…
  • Tìm bài viết mới
  • Tìm theo chuyên mục
Menu Đăng nhập Đăng Ký Install the app Install How to install the app on iOS

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
You are using an out of date browser. It may not display this or other websites correctly.You should upgrade or use an alternative browser. Hỏi lại về Advanced Filter bằng VBA (1 người xem)
  • Thread starter Thread starter MinhKhai
  • Ngày gửi Ngày gửi 9/11/13
Liên hệ QC

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

Đang trực tuyến: 2 (Thành viên: 0, Khách: 2) MinhKhai

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
Sắp xếp theo thời gian sắp xếp theo bầu chọn Quang_Hải

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

MinhKhai

Giải pháp Ếc-xào
Tham gia 16/4/08 Bài viết 941 Được thích 574
quanghai1969 đã 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

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

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 0 MinhKhai

MinhKhai

Giải pháp Ếc-xào
Tham gia 16/4/08 Bài viết 941 Được thích 574
quanghai1969 đã 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ê

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 Nam
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 ? Đú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
Lần chỉnh sửa cuối: 10/11/13 Upvote 0 Quang_Hải

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

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

MinhKhai

Giải pháp Ếc-xào
Tham gia 16/4/08 Bài viết 941 Được thích 574
ndu96081631 đã 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

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

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
Upvote 0 ChanhTQ@

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 0 embevinhphuc

embevinhphuc

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

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

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
Upvote 0 Ba Tê

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 Nam
embevinhphuc đã 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

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
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 đỡ. 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

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

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

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

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 0 Ba Tê

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 Nam
embevinhphuc đã 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

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

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@

ChanhTQ@

0901452không62
Tham gia 5/9/08 Bài viết 4,254 Được thích 4,861
Chạ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

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
Trả lời 7 Đọc 124 26 phút trước PhanTuHuong PhanTuHuong HeSanbi
  • Đã giải quyết
FitRowXL v1.3 - Giãn dòng tự động và bổ trợ in ấn Excel (*01/2026 mới) (1 người xem)
    • Thích
    • Yêu thích
  • HeSanbi
  • 18/4/21
  • Lập Trình với Excel
Trả lời 77 Đọc 30K 29 phút trước chothadiem chothadiem SA_DQ Copilot bình luận các ván cờ vua từng ngày.
    • Thích
  • SA_DQ
  • 3/11/25
  • Chia sẻ
Trả lời 63 Đọc 2K Hôm nay lúc 18:24 SA_DQ SA_DQ N Tạo COM Add-In bằng Visual C++ (1 người xem)
    • Thích
  • nguyendang95
  • 6/7/25
  • Excel và các ngôn ngữ lập trình khác
Trả lời 17 Đọc 2K Hôm nay lúc 10:54 fiveter F ongke0711
  • Question Question
Tải hóa đơn điện tử (https://hoadondientu.gdt.gov.vn/) Excel Vba (2 người xem)
    • Thích
    • Yêu thích
    • Cảm ơn
  • ongke0711
  • 6/10/24
  • Lập Trình với Excel
5 6 7 Trả lời 623 Đọc 92K Hôm nay lúc 00:22 trannguyen197 T HeSanbi
  • Đã giải quyết
LocalizeXL v1.73 - Làm nổi bật ô đang chọn và cuộn trang tự động (phiên bản 2026)
    • Thích
    • Yêu thích
    • Cảm ơn
  • HeSanbi
  • 5/3/21
  • Lập Trình với Excel
Trả lời 85 Đọc 18K Hôm qua, lúc 21:43 chothadiem chothadiem Nguyễn Duy Tuân
  • Dán lên cao
Phiên bản mới Add-in A-Tools AI v10 (2024)
    • Thích
  • Nguyễn Duy Tuân
  • 13/9/24
  • BLUESOFTS: A-Excel, A-Tools
Trả lời 62 Đọc 12K Thứ bảy lúc 18:10 Nguyễn Duy Tuân Nguyễn Duy Tuân E Giúp Đặt tên lại (Rename) cho hàng loạt các file PDF theo cùng 1 quy tắc
  • Excel my love_1
  • 15/4/23
  • Tin học mở rộng
Trả lời 4 Đọc 4K Thứ sáu lúc 15:20 luongha.ktqd L L Thu Chi Gia Đình
    • Cười
  • lehang0812
  • Thứ năm lúc 17:12
  • TPHCM
Trả lời 3 Đọc 153 Thứ sáu lúc 02:59 son193 S Quang_Hải
  • Question Question
Chia sẻ một thuật toán đơn giản để trộn cells
    • Thích
    • Yêu thích
  • Quang_Hải
  • Thứ tư lúc 10:14
  • Lập Trình với Excel
Trả lời 12 Đọc 367 Thứ năm lúc 11:13 Quang_Hải Quang_Hải HeSanbi TaxCode v4.33 - Tra cứu mã số thuế từ tổng cục thuế, masothue và thuvienphapluat
    • Thích
    • Yêu thích
  • HeSanbi
  • 27/11/25
  • Các Add-ins cho excel
Trả lời 19 Đọc 3K Thứ năm lúc 08:54 HeSanbi HeSanbi HeSanbi
  • Question Question
Tạo Add-in, tệp Excel, Word, Access tự động cập nhật phiên bản mới từ Cloud cho chính nó
    • Thích
    • Yêu thích
  • HeSanbi
  • 2/2/26
  • Lập Trình với Excel
Trả lời 1 Đọc 236 Thứ tư lúc 17:03 HeSanbi HeSanbi TranThanhPhong Hàm EXACT
    • Thích
  • TranThanhPhong
  • 30/4/14
  • Dự án: Công thức & Hàm 97-2019
Trả lời 3 Đọc 9K Thứ ba lúc 15:52 ptm0412 ptm0412 giaiphap Add-Ins cho Excel 2007 -2016 32bit và 64bit
    • Thích
    • Yêu thích
    • Ngạc nhiên
  • giaiphap
  • 8/8/15
  • Các Add-ins cho excel
4 5 6 Trả lời 518 Đọc 226K Thứ ba lúc 14:17 Gà Công Nghệ Gà Công Nghệ V Một Excel add-in vibe coding
    • Thích
  • vietdang170
  • 28/1/26
  • Các Add-ins cho excel
Trả lời 18 Đọc 727 Thứ ba lúc 11:10 vietdang170 V H Xin giúp đặt điều kiện trong Conditional Formating
  • hoanglocphat
  • 2/2/26
  • Hỏi đáp những vấn đề khác
Trả lời 6 Đọc 207 Thứ ba lúc 10:13 Gà Con yêu VBA Gà Con yêu VBA mrjun80 Xin giúp hàm excel để tìm 1 số trong số có 2 chữ số (1 người xem)
  • mrjun80
  • 31/1/26
  • Hàm và công thức Excel
Trả lời 4 Đọc 207 1/2/26 Gà Con yêu VBA Gà Con yêu VBA N Vấn đề về hiệu năng khi thực hiện ghép chuỗi trong VBA với tần suất lớn
    • Thích
    • Cảm ơn
  • nguyendang95
  • 23/1/26
  • Excel và các ngôn ngữ lập trình khác
Trả lời 36 Đọc 1K 31/1/26 ptm0412 ptm0412 ongke0711
  • Question Question
Tra cứu thông tin mã số thuế (cập nhật lại code cũ)
    • Thích
    • Cảm ơn
    • Yêu thích
  • ongke0711
  • 24/7/25
  • Lập Trình với Excel
Trả lời 16 Đọc 2K 31/1/26 tuyethao T phuongnam366377 VNFastSearch – DLL tìm kiếm tiếng Việt tốc độ cao cho Excel VBA (1 người xem)
  • phuongnam366377
  • 31/1/26
  • Excel và các ngôn ngữ lập trình khác
Trả lời 0 Đọc 179 31/1/26 phuongnam366377 phuongnam366377 Xem thêm… Chia sẻ: Facebook X Bluesky LinkedIn Reddit Pinterest Tumblr WhatsApp Email Chia sẻ Link

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.…
Back Top Bottom

Từ khóa » Filter Bằng Vba