Cần giúp về Macro trong việc tự động lọc kết quả dữ liệu từ bảng (1 người xem)

  • Thread starter Thread starter h2media
  • Ngày gửi Ngày gửi
Liên hệ QC

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

h2media

Thành viên mới
Tham gia
23/9/10
Bài viết
12
Được thích
0
Em chào cả nhà ạ, em đang vướng mắc 1 chút trong việc tạo Macro lọc dữ liệu ạ
đây là lệnh của để lọc dữ liệu từ cột mã code
Mã:
Sub test()Sheet2.[a3:h1000].ClearContents
With Sheet1.Range(Sheet1.[a3], Sheet1.[a65536].End(3)).Resize(, 10)
  .AutoFilter 1,
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn sử dụng code sau nhé:
[GPECODE=vb]Sub Test()
Sheet2.Activate
Cells.Clear
[A1] = "code": [A2] = "<>"
With Sheet1.[A3].CurrentRegion
.AdvancedFilter 2, [A1:A2], [A3].Resize(, .Columns.Count)
End With
[A1:A2].ClearContents
[A3].CurrentRegion.Sort [A3], Header:=xlYes
End Sub[/GPECODE]
 
Upvote 0
Bạn dùng code này

Mã:
Sub test()
    Application.ScreenUpdating = False
    Sheet2.[a3:h1000].Clear
    With Sheet1
        Range(.[a3], .[a65000]).AdvancedFilter 2, , [i3], 1
        With Range(.[a3], .[a65000].End(3)).Resize(, 10)
            For Each cls In Range(Sheet1.[i5], Sheet1.[i65000].End(3))
                .AutoFilter 1, cls
                .Offset(1).SpecialCells(12).Copy Sheet2.[a65000].End(3)(2)
            Next
        End With
        .AutoFilterMode = False
        .[i1].Resize(100).Clear
    End With
End Sub
 

File đính kèm

Upvote 0
Bạn dùng code này

Mã:
Sub test()
    Application.ScreenUpdating = False
    Sheet2.[a3:h1000].Clear
    With Sheet1
        Range(.[a3], .[a65000]).AdvancedFilter 2, , [i3], 1
        With Range(.[a3], .[a65000].End(3)).Resize(, 10)
            For Each cls In Range(Sheet1.[i5], Sheet1.[i65000].End(3))
                .AutoFilter 1, cls
                .Offset(1).SpecialCells(12).Copy Sheet2.[a65000].End(3)(2)
            Next
        End With
        .AutoFilterMode = False
        .[i1].Resize(100).Clear
    End With
End Sub
Trong code của anh, em thấy có một số vấn đề:
1. Có câu Application.ScreenUpdating = False mà lại không có câu Application.ScreenUpdating = True.
2. Sau câu lệnh With có một số chỗ thiếu dấu chấm: trước 2 chỗ Range và chỗ [I3], do đó nếu đứng ở Sheet2 mà gọi code thì code sẽ chạy lộn xộn, không như ý muốn.
3. Giả sử trên cột A của Sheet1, các giá trị a, b, c, d không xuất hiện theo đúng trình tự này thì kết quả lọc cũng không được sắp xếp Alphabet theo cột A. Chẳng hạn, anh sửa ô A5 từ a thành d sẽ thấy ngay điều này.
 
Upvote 0
Dùng thử ado xem sao:

[GPECODE=sql]Sub Loc_HLMT()
Dim adoConn As Object, adoRS As Object
Set adoConn = CreateObject("ADODB.Connection")
Set adoRS = CreateObject("ADODB.Recordset")
With adoConn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
.Open
End With
With adoRS
.ActiveConnection = adoConn
.Open "select * from [Sheet1$A4:G1000] " _
& "where f1 is not null " _
& "order by f1,f2 DESC"
End With
With Sheet2
.[A3:G65000].ClearContents
.[A3].CopyFromRecordset adoRS
End With
adoRS.Close: Set adoRS = Nothing
adoConn.Close: Set adoConn = Nothing
End Sub

[/GPECODE]
 
Upvote 0

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

Back
Top Bottom