Code cho Autofilter

Liên hệ QC

hoangexcell

Thành viên tiêu biểu
Tham gia
8/1/08
Bài viết
459
Được thích
132
Donate (Momo)
Donate
Giới tính
Nam
Hi ACE,

Mình cần lọc 1 bảng dữ liệu theo kiểu loại trừ dần, ví dụ bên dưới là lần 1, lọc bỏ "C" thì record macro nó ra đoạn như sau:

ActiveSheet.Range("$A$6:$CM$364").AutoFilter Field:=71, Criteria1:=Array( _
"A", "B", _
"="), Operator:=xlFilterValues

Vấn đề giờ mình muốn auto lần lượt bỏ B rồi C ... tức lặp lần lượt hết các giá trị của cột filter (71) thì mình không biết cách:

1. Vòng lặp để tạo chuỗi loại trừ lần lượt
2. Cú pháp để bỏ vào điều kiện trong code filter trên (thay chổ array(_ ..) cho nó tự động

Mong cả nhà giúp 1 tay ạ. Chân thành cảm ơn!
 
Post file cụ thể đi nhé bạn
 
Upvote 0
Vấn đề giờ mình muốn auto lần lượt bỏ B rồi C ... tức lặp lần lượt hết các giá trị của cột filter (71) thì mình không biết cách:

1. Vòng lặp để tạo chuỗi loại trừ lần lượt
2. Cú pháp để bỏ vào điều kiện trong code filter trên (thay chổ array(_ ..) cho nó tự động

Bỏ lần lượt rồi cuối cùng là gì, bởi một lần chấp nhận lọc cho 1 kết quả cơ mà. Chẳng nhẽ vòng lặp để ngồi ngắm màn hình nháy nháy.
 
Upvote 0
Post file cụ thể đi nhé bạn
Vâng, một cách diễn đạt khác là muốn tách dữ liệu từ sheet Data ra các sheet khác theo từng nhóm.
1669277489854.png
Bài đã được tự động gộp:

bởi một lần chấp nhận lọc cho 1 kết quả cơ mà.
à đúng, phần kết quả đó làm gì thì mình không hỏi. Mình sẽ copy ra sheet khác. Mình đã cập nhật file mẫu và hình minh họa nhé.
 

File đính kèm

  • tach du lieu theo nhom ra cac sheet.xlsx
    11.2 KB · Đọc: 6
Upvote 0
phần kết quả đó làm gì thì mình không hỏi

Thay vì hỏi như bài #1 thì bạn chỉ cần nêu:
- Cho dữ liệu ở sheet abc
- Cần lọc như thế này này (mô tả kỹ vào)
- Rồi kết qua như xyz

Cần hỗ trợ phương án code giải quyết vấn đề trên, ưu tiên dùng Auto Filter chẳng hạn.
 
Upvote 0
Vâng, một cách diễn đạt khác là muốn tách dữ liệu từ sheet Data ra các sheet khác theo từng nhóm.
View attachment 283812
Bài đã được tự động gộp:


à đúng, phần kết quả đó làm gì thì mình không hỏi. Mình sẽ copy ra sheet khác. Mình đã cập nhật file mẫu và hình minh họa nhé.
Bạn xem thử file đính kèm nhé.
 

File đính kèm

  • tach du lieu theo nhom ra cac sheet.xlsm
    21.6 KB · Đọc: 16
Upvote 0
Thay vì hỏi như bài #1 thì bạn chỉ cần nêu:
- Cho dữ liệu ở sheet abc
- Cần lọc như thế này này (mô tả kỹ vào)
- Rồi kết qua như xyz

Cần hỗ trợ phương án code giải quyết vấn đề trên, ưu tiên dùng Auto Filter chẳng hạn.
Thật ra mình muốn viết chỉnh phần code đó thôi, còn làm cách khác đi thì mình chưa biết có thể ráp nối vào phần của mình như nào.
Cho nên trình bày 1 đoạn đó là vậy. Tức là dùng autofilter lần lượt bỏ a, b rồi c.... và còn danh sách dài nữa, chứ không phải chỉ a, b, c.
Và như vậy, cái mảng đó sẽ là động, để thay vào filter...
Bài đã được tự động gộp:

Bạn xem thử file đính kèm nhé.
Cảm ơn Bạn, nhưng hiện có 2 vấn đề:
1. File bạn sao mình mở lên nó không con enable , mình đã copy code qua file của mình như chạy báo lỗi.
2. Do làm mẫu thì mình chỉ lấy A, B, C còn dữ liệu thật nó vài chục nhóm lận, không cố định. vậy code này không chạy được cho mở rộng
 
Upvote 0
1. File bạn sao mình mở lên nó không con enable , mình đã copy code qua file của mình như chạy báo lỗi.

Click phải chuột vào file, chọn unblock, ok

Do làm mẫu thì mình chỉ lấy A, B, C còn dữ liệu thật nó vài chục nhóm lận, không cố định. vậy code này không chạy được cho mở rộng
Quan trọng nhất vẫn là biểu đạt vấn đề cho người khác hiểu vấn đề của mình.
 
Upvote 0
Mô tả này khác với ý định bán đầu. Duyệt qua sheet. Lấy tên sheet làm điều kiện lọc. Rồi copy qua. Còn không thì dùng mảng
Vâng, một cách diễn đạt khác là muốn tách dữ liệu từ sheet Data ra các sheet khác theo từng nhóm.
View attachment 283812
Bài đã được tự động gộp:


à đúng, phần kết quả đó làm gì thì mình không hỏi. Mình sẽ copy ra sheet khác. Mình đã cập nhật file mẫu và hình minh họa nhé.
 
Upvote 0
Cảm ơn Bạn, nhưng hiện có 2 vấn đề:
1. File bạn sao mình mở lên nó không con enable , mình đã copy code qua file của mình như chạy báo lỗi.
2. Do làm mẫu thì mình chỉ lấy A, B, C còn dữ liệu thật nó vài chục nhóm lận, không cố định. vậy code này không chạy được cho mở rộng
Bạn phải biến tấu để phù hợp với nhu cầu của bạn, cái quan trọng là người ta đã tìm cho bạn hướng đi mà thôi.
 
Upvote 0
Bạn phải biến tấu để phù hợp với nhu cầu của bạn, cái quan trọng là người ta đã tìm cho bạn hướng đi mà thôi.
ok a Hai, phần thêm D,E,F đó mình có thể biến tấu thêm được.
Nhưng mình muốn làm filter như sau:
chọn B,C, rồi A,C, rồi A,B

(hiện tại đang là filter A, rồi B, rồi C...)
 
Upvote 0
ok a Hai, phần thêm D,E,F đó mình có thể biến tấu thêm được.
Nhưng mình muốn làm filter như sau:
chọn B,C, rồi A,C, rồi A,B

(hiện tại đang là filter A, rồi B, rồi C...)
Bạn phải diễn đạt và miêu tả hết ý yêu cầu của bạn bằng file giả lập. Vì như thế mọi người sẽ dễ hình dung và cho bạn đáp án đúng ý hơn nhé.
 
Upvote 0
Bạn phải diễn đạt và miêu tả hết ý yêu cầu của bạn bằng file giả lập. Vì như thế mọi người sẽ dễ hình dung và cho bạn đáp án đúng ý hơn nhé.

Mình đã ghi nội dung vào file kèm với đầy đủ minh họa và câu hỏi nhé. Phiền anh Hai xem qua để chốt được nhu cầu này.

P/s: Cảm ơn anh Hai nhiều. Anh Hai có ở miền Tây hông, mình có vợ miền tây có dịp về quê ghé thăm Anh Hai giao lưu.
 

File đính kèm

  • tach du lieu theo nhom ra cac sheet.xlsm
    38.3 KB · Đọc: 1
Upvote 0
Mình đã ghi nội dung vào file kèm với đầy đủ minh họa và câu hỏi nhé. Phiền anh Hai xem qua để chốt được nhu cầu này.

P/s: Cảm ơn anh Hai nhiều. Anh Hai có ở miền Tây hông, mình có vợ miền tây có dịp về quê ghé thăm Anh Hai giao lưu.
Bạn dùng Advanced Filter nhé.

1669357634109.png

Gán code sau cho nút chạy code.
Mã:
Sub Loc()
    With Sheet1
        .Range("B4:C9").AdvancedFilter 2, .Range("I1:J2"), .Range("I5")
        .Range("B4:C9").AdvancedFilter 2, .Range("O1:O3"), .Range("O5")
    End With
End Sub

Sẽ có kết quả:

1669357678017.png

Bạn xem thêm file nhé.
 

File đính kèm

  • tach du lieu theo nhom ra cac sheet.xlsm
    22.3 KB · Đọc: 8
Lần chỉnh sửa cuối:
Upvote 0
Bạn dùng Advanced Filter nhé.

Bạn xem thêm file nhé.
Cảm ơn anh Hai,

Nhưng mình vẫn thắc mắc là có cách nào thay thế biến vào chỗ tô vàng không? Vì mình hay record macro và chế biến thêm dựa trên các lệnh auto của excel. Có trường hợp lệnh thì mình thay được nhưng có lệnh do cấu trúc yêu cầu thế nào mình ko rõ, không thay được.
1669360174558.png

Phiền anh ý cuối này.
 
Upvote 0
Cảm ơn anh Hai,

Nhưng mình vẫn thắc mắc là có cách nào thay thế biến vào chỗ tô vàng không? Vì mình hay record macro và chế biến thêm dựa trên các lệnh auto của excel. Có trường hợp lệnh thì mình thay được nhưng có lệnh do cấu trúc yêu cầu thế nào mình ko rõ, không thay được.
View attachment 283846

Phiền anh ý cuối này.
Phải như sau không bạn?

Mã:
Sub Loc1()
    Dim strNames As Variant
    strNames = Array("A", "B")
    Sheet1.Range("B4:C9").AutoFilter Field:=2, Criteria1:=strNames, Operator:=xlFilterValues
 
End Sub
 
Upvote 0
PHP:
Private sub excludesItem(byval listItems as variant, byval strItemExcluded as string, byref listRes as variant)
'listItems  - danh sách điều kiện ở 1 cột '
'strItemExcluded - điều kiện cần loại lọc '
Dim numItems as long, i as long, ii as long
numItems  = ubound(listItems,1)
redim listRes(1 to numItems)
for i=1 to numItems 
If strItemExcluded <> listItems(i,1) then
ii = ii +1
listRes(ii)=listItems(i,1)
End if
next i
if ii>0 then
redim preserve listRes(1 to ii)
else
listRes = "*"
End if
End sub

'--------'
'Ví dụ loại "A": '
Call excludesItem(listItems, "A", listCriterias )
.AutoFilter Field:=2, Criteria1:=listCriterias , Operator:=xlFilterValues
 
Upvote 0
PHP:
Private sub excludesItem(byval listItems as variant, byval strItemExcluded as string, byref listRes as variant)
'listItems  - danh sách điều kiện ở 1 cột '
'strItemExcluded - điều kiện cần loại lọc '
Dim numItems as long, i as long, ii as long
numItems  = ubound(listItems,1)
redim listRes(1 to numItems)
for i=1 to numItems
If strItemExcluded <> listItems(i,1) then
ii = ii +1
listRes(ii)=listItems(i,1)
End if
next i
if ii>0 then
redim preserve listRes(1 to ii)
else
listRes = "*"
End if
End sub

'--------'
'Ví dụ loại "A": '
Call excludesItem(listItems, "A", listCriterias )
.AutoFilter Field:=2, Criteria1:=listCriterias , Operator:=xlFilterValues
Thank you so much! dùng trước đã chứ hiểu thì chắc 10 năm nữa sẽ hiểu :)
 
Upvote 0
Phải như sau không bạn?

Mã:
Sub Loc1()
    Dim strNames As Variant
    strNames = Array("A", "B")
    Sheet1.Range("B4:C9").AutoFilter Field:=2, Criteria1:=strNames, Operator:=xlFilterValues
 
End Sub
Viết thế này thì mình thấy nó chạy: strNames = Array("A", "B")
nhưng vấn đề là mình cần động, nghĩa là có lúc cần nó là "A", "C" thì mình chưa biết truyền làm sao :(

Xin cảm ơn!
 
Upvote 0
Upvote 0
Web KT
Back
Top Bottom