Nhờ sửa code lọc dữ liệu (dùng Advanced Filter) (1 người xem)

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

tanhoai2002

Thành viên mới
Tham gia
9/3/09
Bài viết
33
Được thích
1
Mình muốn tham chiếu từ sheet 1 sang sheet 2 nhưng ko hiểu có vấn đề gì với đoạn code mà nó không lọc theo ý mình. nhờ AE giúp đỡ (có thể viết lại sao cho muống lọc theo cột nào cũng được)
 

File đính kèm

ô M5 bạn đánh công thức:
Mã:
=AND(Master!$C8=Report!$D$1,Master!$B8=Report!$D$2)
Code AF bạn sửa lại thành
[GPECODE=vb]
Sub BaoCao()
Application.ScreenUpdating = False
Dim Data As Range
Set Data = Sheet1.Range("A7:Q10000")
With Sheet2
Rows("8:1000").Clear
Data.AdvancedFilter 2, .[M4:M5], .[A7:L7]
EndR = .[B65536].End(3).Row
If [B8] <> "" Then Range([B8], [B65536].End(3)).Offset(, -1) = [row(a:a)]
DrawBorder Range("A7" & ":L" & EndR)
End With
Set Data = Nothing
Application.ScreenUpdating = True
End Sub

[/GPECODE]
 

File đính kèm

Upvote 0
[WARNING1]
Đây là Box Lập trình nên lưu ý khi đặt tên Topic
Tên Topic ko liên quan nên ko ai vào hỗ trợ bạn
[/WARNING1]
 
Upvote 0
Thanks bạn! mình ko hiểu tại sao mình dùng advan filter mà nó không chạy theo đúng! bạn có thể giải thích mình sai chổ nào không? cảm ơn nhiều nhiều
 
Upvote 0
Thanks bạn! mình ko hiểu tại sao mình dùng advan filter mà nó không chạy theo đúng! bạn có thể giải thích mình sai chổ nào không? cảm ơn nhiều nhiều
Bạn đọc thêm tài liệu ở đường link ở bài #3, tài liệu ngắn gọn, dễ hiểu, đọc xong tôi nghĩ bạn sẽ hiểu lý do vì sao
 
Upvote 0
Thanks bạn! mình ko hiểu tại sao mình dùng advan filter mà nó không chạy theo đúng! bạn có thể giải thích mình sai chổ nào không? cảm ơn nhiều nhiều
Trong code của bạn, dòng advanced filter vùng điều kiện [N4:O6] không đúng, bạn cần sửa thành [M4:N5] sẽ ra kết quả.
 
Upvote 0
Mình muốn tham chiếu từ sheet 1 sang sheet 2 nhưng ko hiểu có vấn đề gì với đoạn code mà nó không lọc theo ý mình. nhờ AE giúp đỡ (có thể viết lại sao cho muống lọc theo cột nào cũng được)
Tham khảo cách này. Mình không biết truyền tham số vào 1 thủ tục khác nên luôn chọn cách gọn nhất
Tất tần tật chỉ có nhiêu đây thôi
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [D1].CurrentRegion) Is Nothing Then
   Rows("8:1000").Clear
   Sheet1.[A7:Q10000].AdvancedFilter 2, [D1].CurrentRegion, [A7].CurrentRegion
   [A7].CurrentRegion.Borders.Value = 1
   If [A8] <> "" Then Range([A8], [A65536].End(3)) = [row(a:a)]
End If
End Sub
 

File đính kèm

Upvote 0
Tham khảo cách này. Mình không biết truyền tham số vào 1 thủ tục khác nên luôn chọn cách gọn nhất
Tất tần tật chỉ có nhiêu đây thôi
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [D1].CurrentRegion) Is Nothing Then
   Rows("8:1000").Clear
   Sheet1.[A7:Q10000].AdvancedFilter 2, [D1].CurrentRegion, [A7].CurrentRegion
   [A7].CurrentRegion.Borders.Value = 1
   If [A8] <> "" Then Range([A8], [A65536].End(3)) = [row(a:a)]
End If
End Sub
Cót ở a H luôn có cái j đấy rất chi là đặc biệt.. phải ngâm cứu thêm các từ khóa thôi. Hị hị
 
Upvote 0
Upvote 0
Tham khảo cách này. Mình không biết truyền tham số vào 1 thủ tục khác nên luôn chọn cách gọn nhất
Tất tần tật chỉ có nhiêu đây thôi
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [D1].CurrentRegion) Is Nothing Then
   Rows("8:1000").Clear
   Sheet1.[A7:Q10000].AdvancedFilter 2, [D1].CurrentRegion, [A7].CurrentRegion
   [A7].CurrentRegion.Borders.Value = 1
   If [A8] <> "" Then Range([A8], [A65536].End(3)) = [row(a:a)]
End If
End Sub

Bác này thật lợi hại! mình phải nghiên cứu kỹ trước khi áp dụng @. Mình muốn hỏi thêm là mình cần lọc một trong nhiều cột khác nhau thì phải thay đổi như thế nào ví dụ: mình lọc 1 trong những dòng này thì sao?
[TABLE="width: 625"]
[TR]
[TD]No
[/TD]
[TD]Date[/TD]
[TD] Source
[/TD]
[TD] Name[/TD]
[TD]Cmnt[/TD]
[TD]Customer[/TD]
[TD]Dep.nt
[/TD]
[/TR]
[/TABLE]
 
Upvote 0
Từ Cell [A7] bạn điền tên các trường bạn muốn có trong báo cáo, ví dụ: No, Date... vị trí có thể thay đổi trước sau tùy trường nào bạn đặt trước. Lưu ý tên các trường này phải giống hệt tên các trường trong sheet Data
Chúc bạn thành công...
 
Upvote 0
Thanks các bác! nhưng cho mình hỏi làm sao tạo CurrentRegion
trong Excel 2010? và làm sao thay đổi vùng CurrentRegion được vì mình áp dụng Vi dụ này vào data của mình! Thanks
 
Upvote 0
Thanks các bác! nhưng cho mình hỏi làm sao tạo CurrentRegion
trong Excel 2010? và làm sao thay đổi vùng CurrentRegion được vì mình áp dụng Vi dụ này vào data của mình! Thanks

nếu làm bằng tay thì bạn làm như sau:
nhấn Ctrl G (tức là goto đó) nhấn vào cái button là Special
bạn chọn vào ô Curent Rẹgion, ví dụ bạn đang cho cell A1 thì nó sẻ chọn hết vùng có số liệu liên tục từ A1

tôi rất ít khi sử dụng lệnh này, nhất là dữ liệu do ngườikhác nhập, khi số liệu của bạn không chuẩn, dính phím cách hay mấy cái tao lào như dấu nhấy chẳng hạn thì nó chọn tuốt

vì vậy nên xác định vùng dữ liệu bằng các lệnh như End(xlup), End(xldown),End(xltoleft),End(xlright) cho chắc ăn.
 
Lần chỉnh sửa cuối:
Upvote 0
Thanks các bác! nhưng cho mình hỏi làm sao tạo CurrentRegion
trong Excel 2010? và làm sao thay đổi vùng CurrentRegion được vì mình áp dụng Vi dụ này vào data của mình! Thanks

Giải thích từ thao tác bằng tay cho dễ hiểu:
- Bạn chọn đại 1 cell trong dữ liệu của bạn
- Xong, bấm Ctrl + Shift + * bạn sẽ thấy 1 vùng được chọn (có liên quan đến cell đầu tiên)
===> Đó chính là CurrentRegion đấy
Bạn để ý sẽ thấy trong vùng này, không có dòng rổng hoặc cột rổng nào
 
Upvote 0
Giải thích từ thao tác bằng tay cho dễ hiểu:
- Bạn chọn đại 1 cell trong dữ liệu của bạn
- Xong, bấm Ctrl + Shift + * bạn sẽ thấy 1 vùng được chọn (có liên quan đến cell đầu tiên)
===> Đó chính là CurrentRegion đấy
Bạn để ý sẽ thấy trong vùng này, không có dòng rổng hoặc cột rổng nào
Như anh em mình hiểu rồi thì thấy đơn giản, trước đây em mò mấy ngày trời mới hiểu nó hoạt động thế nào. Viết code lỗi miết mới nhận ra cái thuộc tính này nó liên kết như thế nào

Thanks các bác! nhưng cho mình hỏi làm sao tạo CurrentRegion
trong Excel 2010? và làm sao thay đổi vùng CurrentRegion được vì mình áp dụng Vi dụ này vào data của mình! Thanks
Bạn chưa hiểu rõ thì không nên dùng CurrentRegion, nên cho địa chỉ vùng cụ thể để tham chiếu khi lọc sẽ tốt hơn
Hoặc đưa file có cấu trúc dữ liệu thật lên mọi người sẽ đưa ra hướng gọn nhất
 
Lần chỉnh sửa cuối:
Upvote 0
Tốt nhất thì cứ chốt vùng tham chiếu cho chắc ăn đã
 
Upvote 0
Tốt nhất thì cứ chốt vùng tham chiếu cho chắc ăn đã

Như vậy là thay vùng CurrentRegion bằng vùng dữ liệu là ok hả mấy bác? Nếu vùng dữ liệu bắt đầu từ [A13:AB1000] thì mình sẽ tviết sao khi không dùng CurrentRegion .Ở đây mình không biết nên muốn hoc để hiểu rõ các vùng để tiện áp dụng mong các bác đừng ném đá :)
 
Lần chỉnh sửa cuối:
Upvote 0
Như vậy là thay vùng CurrentRegion bằng vùng dữ liệu là ok hả mấy bác? Nếu vùng dữ liệu bắt đầu từ [A13:AB1000] thì mình sẽ tviết sao khi không dùng CurrentRegion

Thế thì a Hải mới nói bạn up file dữ liệu thật lên để mng giúp cũng dễ
 
Upvote 0
Upvote 0
Excel rất dị ứng với những ô có merge cell, ko thể dùng AF được, muốn dùng AF phải thiết kế lại form, hjk
Nhưng nếu file người ta đã như thế thì dùng phương án Autofilter thì cũng có thể đáp ứng được yêu cầu và code cũng ngắn.
Bài này thì chắc phải dùng phương án này
Tại J7 nhập thử vào tên Customer ac
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [J7]) Is Nothing Then
        With Sheets("summary").[A10:AD10000]
            .AutoFilter 4, Target
            .Offset(1).SpecialCells(12).Copy [A11]
            .AutoFilter
        End With
    End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Nhưng nếu file người ta đã như thế thì dùng phương án Autofilter thì cũng có thể đáp ứng được yêu cầu và code cũng ngắn.
Bài này thì chắc phải dùng phương án này
Tại J7 nhập thử vào tên Customer ac
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [J7]) Is Nothing Then
        With Sheets("summary").[A10:AD10000]
            .AutoFilter 4, Target
            .Offset(1).SpecialCells(12).Copy [A11]
            .AutoFilter
        End With
    End If
End Sub

Cảm ơn bác nhưng mình làm thì nó lòi cái đuôi tại dòng [AC];[AD] ra xấu quá! có cách nào hô biến nó dược không?
 
Upvote 0
Thực ra cái này dùng dòng đôi chứ ko phải merge cell. nếu cái nào có merge cell bạn trả về đầu dòng thì có làm được không?
uhm, mắt bị quáng gà, vậy code như sau:
[GPECODE=vb]Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [AD1].CurrentRegion) Is Nothing Then
Rows("11:1000").Clear
Sheet1.[A10:AD10000].AdvancedFilter 2, [AD1].CurrentRegion, [A10:AB10]
[A10].CurrentRegion.Borders.Value = 1
End If

End Sub[/GPECODE]
Thay đổi Mã KH ở ô AD2
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
LỢI HẠI hơn khi dùng [AD1].CurrentRegion
Liên tiếp các ô sau đó như AE1, AF1... bạn có thể copy các trường ở sheet Summary sang, ví dụ: Date test.
Tôi nghĩ bạn sẽ nghiệm ra nhiều điều
 
Upvote 0
LỢI HẠI hơn khi dùng [AD1].CurrentRegion
Liên tiếp các ô sau đó như AE1, AF1... bạn có thể copy các trường ở sheet Summary sang, ví dụ: Date test.
Tôi nghĩ bạn sẽ nghiệm ra nhiều điều
Cái chiêu liều mạng này là mình đăng ký bản quyền rồi nhá. Nhưng nói rồi, dao 2 lưỡi đấy. Gặp người nào không rành là coi chừng đi tong.
 
Upvote 0
Cái chiêu liều mạng này là mình đăng ký bản quyền rồi nhá. Nhưng nói rồi, dao 2 lưỡi đấy. Gặp người nào không rành là coi chừng đi tong.
Dạ. cót a rất chi là lạ.. nhìn là mê liền.. mà đã mê thì cũng phải liều mạng tí cho có cảm xúc a ạh...
 
Upvote 0
LỢI HẠI hơn khi dùng [AD1].CurrentRegion
Liên tiếp các ô sau đó như AE1, AF1... bạn có thể copy các trường ở sheet Summary sang, ví dụ: Date test.
Tôi nghĩ bạn sẽ nghiệm ra nhiều điều
Giờ thì mình đã hiểu [AD1].CurrentRegion. đúng là lợi hại! nếu muốn nó không chạy lung tung thì đưa nó vô "ốc đảo" là ok. và muốn lọc cái gì cũng được. thật khâm phục
 
Upvote 0
không hiểu sao mình lảm tới AD11 thì ok nhưng thêm đến A1 thì lại báo lỗi! thật nhứt đầu quá đi thôi
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [AD1].CurrentRegion) Is Nothing Then
Rows("12:1000").Clear
Sheet1.[A11:AJ10000].AdvancedFilter 2, [AD1].CurrentRegion, [A11:AJ11]
[A11].CurrentRegion.Borders.Value = 1
End If
End Sub
 
Upvote 0
Đoán mò vì ko có file: khả năng sai ở chỗ sheet1.[A11:AJ10000]
Mảng này đã bao gồm cả các trường tiêu đề ?
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom