Xin code filter theo khoảng thời gian (1 người xem)

Liên hệ QC

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

michaelfei

Thành viên mới
Tham gia
30/6/09
Bài viết
11
Được thích
0
Chào mọi người,

Tình hình là mới bắt đầu tìm hiểu về VBA, chủ yếu là record lại rùi copy để sử dụng. Nhưng ngặc nỗi mình đang bị ngu muội, cần các pro khai sáng giúp. Số là mình cần xuất report theo 1 khoảng thời gian định sẵn nhưng không biết code như thế nào, mình thử record để xem code autofilter và advance filter thử nhưng vẫn không được.

Cái mình cần là có thể xuất dữ liệu theo khoảng thời gian mình chọn. VD: mình sẽ nhập From Date vào range ("B1") và To Date vào range ("A2") và macro sẽ tự động filter ra dữ liệu đúng theo khoản thời gian mình chọn. Mình thấy hình như nó lấy thông tin từ ô mình nhập theo format Number nên filter ko ra. Có cách nào cho nó lấy đúng theo format Date như mình nhập không?

Nhờ các pro chỉ dạy ạ !
-\\/.
 
Chào mọi người,

Tình hình là mới bắt đầu tìm hiểu về VBA, chủ yếu là record lại rùi copy để sử dụng. Nhưng ngặc nỗi mình đang bị ngu muội, cần các pro khai sáng giúp. Số là mình cần xuất report theo 1 khoảng thời gian định sẵn nhưng không biết code như thế nào, mình thử record để xem code autofilter và advance filter thử nhưng vẫn không được.

Cái mình cần là có thể xuất dữ liệu theo khoảng thời gian mình chọn. VD: mình sẽ nhập From Date vào range ("B1") và To Date vào range ("A2") và macro sẽ tự động filter ra dữ liệu đúng theo khoản thời gian mình chọn. Mình thấy hình như nó lấy thông tin từ ô mình nhập theo format Number nên filter ko ra. Có cách nào cho nó lấy đúng theo format Date như mình nhập không?

Nhờ các pro chỉ dạy ạ !
-\\/.
Bạn cứ gửi file của bạn nên để xem bạn ghi và sủa macro thế nào mới giúp đc bạn chi tiết chứ.
 
Vì bạn chưa có file, nên đành fải tham khảo file người khác đi vậy!
 

File đính kèm

File đính kèm

Đây nè 2 pro, file nặng quá nên mình cắt bớt raw data. Xem giúp mình nha |||||
Cần vài dòng code này thui bạn ơi
Minh add luôn code vào sự kiên change của sheet, bạn chỉ thay đổi B1 hoặc B2 là nó tự lọc cho bạn
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$1" Or Target.Address = "$B$2" Then
        Range("A3:D" & Range("A65000").End(3).Row + 1).Clear
        Sheets("RAW DATA").Range("A1:D" & Sheets("RAW DATA").Range("A65000").End(3).Row).AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=ActiveSheet.Range("E1:F2"), CopyToRange:=ActiveSheet.Range("A3"), Unique:=False
    End If
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
bạn dùng code chạy theo sự kiện B1 và B2, không cần tạo bảng điều kiện lọc
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tungay As Long, denngay As Long
If Target.Address = "$B$1" Or Target.Address = "$B$2" Then
    tungay = Range("B1"): denngay = Range("B2")
    Range("A4:D" & Range("A4").End(xlDown).Row).Clear
    Sheets("RAW DATA").Range("A1:D" & Sheets("RAW DATA").Range("A65000").End(3).Row).AutoFilter _
        Field:=3, Criteria1:=">=" & tungay, Operator:=xlAnd, Criteria2:="<=" & denngay
    Sheets("RAW DATA").Range("A1:D" & Sheets("RAW DATA").Range("A65000").End(3).Row).AutoFilter
    Sheets("RAW DATA").Range("A1:D" & Sheets("RAW DATA").Range("A65000") _
        .End(3).Row).Copy ActiveSheet.Range("A4")
End If
End Sub
 
Bạn thử xem có đúng yêu cầu không nha

bạn dùng code chạy theo sự kiện B1 và B2, không cần tạo bảng điều kiện lọc
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tungay As Long, denngay As Long
If Target.Address = "$B$1" Or Target.Address = "$B$2" Then
    tungay = Range("B1"): denngay = Range("B2")
    Range("A4:D" & Range("A4").End(xlDown).Row).Clear
    Sheets("RAW DATA").Range("A1:D" & Sheets("RAW DATA").Range("A65000").End(3).Row).AutoFilter _
        Field:=3, Criteria1:=">=" & tungay, Operator:=xlAnd, Criteria2:="<=" & denngay
    Sheets("RAW DATA").Range("A1:D" & Sheets("RAW DATA").Range("A65000").End(3).Row).AutoFilter
    Sheets("RAW DATA").Range("A1:D" & Sheets("RAW DATA").Range("A65000") _
        .End(3).Row).Copy ActiveSheet.Range("A4")
End If
End Sub
Cần vài dòng code này thui bạn ơi
Minh add luôn code vào sự kiên change của sheet, bạn chỉ thay đổi B1 hoặc B2 là nó tự lọc cho bạn
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$1" Or Target.Address = "$B$2" Then
        Range("A3:D" & Range("A65000").End(3).Row + 1).Clear
        Sheets("RAW DATA").Range("A1:D" & Sheets("RAW  DATA").Range("A65000").End(3).Row).AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=ActiveSheet.Range("E1:F2"), CopyToRange:=ActiveSheet.Range("A3"), Unique:=False
    End If
End Sub

Cám ơn các pro đã giúp, mình làm được rồi }}}}}

Sau khi có data đã lọc ra mình muốn xuất pivot, mình có record và xuất được rồi nhưng bị vướng 1 chỗ. Mới tạo pivot thì excel mặc định tên là Pivottable1 nên khi mình chọn các field nó sẽ hiểu tên theo pivot này. Nếu mình tiếp tục filter rồi xuất thêm pivot khác. Thì excel sẽ mặc định tên là Pivottable2 nên code mình sử dụng sẽ nhận ra pivot mới này. Nhờ các pro chỉ giáo với ;;;;;;;;;;;;;;;;;;;;;;
Mã:
'XUAT PIVOT
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "test1!R1C1:R13393C10", Version:=xlPivotTableVersion14).CreatePivotTable _
        TableDestination:="MACRO!R5C1", TableName:="PivotTable1", DefaultVersion _
        :=xlPivotTableVersion14
    Sheets("MACRO").Select
    Cells(5, 1).Select
    ActiveSheet.PivotTables("PivotTable1").Name = "TOTAL CARDS BY TYPE"
    With ActiveSheet.PivotTables("TOTAL CARDS BY TYPE").PivotFields( _
        "product_detail_ky")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("TOTAL CARDS BY TYPE").PivotFields("product_type")
        .Orientation = xlRowField
        .Position = 2
    End With
    With ActiveSheet.PivotTables("TOTAL CARDS BY TYPE").PivotFields("product_type")
        .Orientation = xlColumnField
        .Position = 1
    End With
    ActiveSheet.PivotTables("TOTAL CARDS BY TYPE").AddDataField ActiveSheet. _
        PivotTables("TOTAL CARDS BY TYPE").PivotFields("acnt_contract_id"), _
        "Sum of acnt_contract_id", xlSum
    With ActiveSheet.PivotTables("TOTAL CARDS BY TYPE").PivotFields( _
        "Sum of acnt_contract_id")
        .Caption = "Count of acnt_contract_id"
        .Function = xlCount
    End With
 
Cám ơn các pro đã giúp, mình làm được rồi }}}}}

Sau khi có data đã lọc ra mình muốn xuất pivot, mình có record và xuất được rồi nhưng bị vướng 1 chỗ. Mới tạo pivot thì excel mặc định tên là Pivottable1 nên khi mình chọn các field nó sẽ hiểu tên theo pivot này. Nếu mình tiếp tục filter rồi xuất thêm pivot khác. Thì excel sẽ mặc định tên là Pivottable2 nên code mình sử dụng sẽ nhận ra pivot mới này. Nhờ các pro chỉ giáo với ;;;;;;;;;;;;;;;;;;;;;;
Mã:
'XUAT PIVOT
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "test1!R1C1:R13393C10", Version:=xlPivotTableVersion14).CreatePivotTable _
        TableDestination:="MACRO!R5C1", TableName:="PivotTable1", DefaultVersion _
        :=xlPivotTableVersion14
    Sheets("MACRO").Select
    Cells(5, 1).Select
    ActiveSheet.PivotTables("PivotTable1").Name = "TOTAL CARDS BY TYPE"
    With ActiveSheet.PivotTables("TOTAL CARDS BY TYPE").PivotFields( _
        "product_detail_ky")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("TOTAL CARDS BY TYPE").PivotFields("product_type")
        .Orientation = xlRowField
        .Position = 2
    End With
    With ActiveSheet.PivotTables("TOTAL CARDS BY TYPE").PivotFields("product_type")
        .Orientation = xlColumnField
        .Position = 1
    End With
    ActiveSheet.PivotTables("TOTAL CARDS BY TYPE").AddDataField ActiveSheet. _
        PivotTables("TOTAL CARDS BY TYPE").PivotFields("acnt_contract_id"), _
        "Sum of acnt_contract_id", xlSum
    With ActiveSheet.PivotTables("TOTAL CARDS BY TYPE").PivotFields( _
        "Sum of acnt_contract_id")
        .Caption = "Count of acnt_contract_id"
        .Function = xlCount
    End With
tại sao bạn ko thay pivot bằng code luôn? bạn gửi file lên đê coi bạn pivot như thế nào, 1 là fix code pivot, 2 là viết code khác.
 
Hi Quanluu1989,

Mình gửi file check giúp mình nhé /-*+/
Mình không rõ mục đích của bạn ở đây là gì, nhưng hiện tại mình check code của bạn thì chạy lần 1 ok, lần 2 thì nó báo lỗi đặt tên sheet trùng với tên sheet đã có, bạn nên đặt tên tên sheet và tên pivot động để bạn dễ control hơn.
activesheet.name = "sheet" & sheets.count
TableName := "PivotTable" & sheets.count
 
Lần chỉnh sửa cuối:
Mình không rõ mục đích của bạn ở đây là gì, nhưng hiện tại mình check code của bạn thì chạy lần 1 ok, lần 2 thì nó báo lỗi đặt tên sheet trùng với tên sheet đã có, bạn nên đặt tên tên sheet và tên pivot động để bạn dễ control hơn.
activesheet.name = "sheet" & sheets.count
TableName := "PivotTable" & sheets.count

Hi Quanluu,
Bạn đưa 2 cái code đúng ý mình luôn, cám ơn bạn nhiều /-*+/
Nhưng mình vẫn còn vướng chỗ, lúc xuất pivot, mình cho sourcedata theo sheet mới tạo và table name theo code của bạn. Nhưng nó báo lỗi. Giải ngố giúp mình nha ;;;;;;;;;;;

Mã:
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _       [B] Sheets(Sheets.Count).Selection[/B], Version:=xlPivotTableVersion14).CreatePivotTable _
        TableDestination:="MACRO!R5C1", TableName:=[B]"PivotTable" & Sheets.Count[/B], DefaultVersion _
        :=xlPivotTableVersion14
 
Hi Quanluu,
Bạn đưa 2 cái code đúng ý mình luôn, cám ơn bạn nhiều /-*+/
Nhưng mình vẫn còn vướng chỗ, lúc xuất pivot, mình cho sourcedata theo sheet mới tạo và table name theo code của bạn. Nhưng nó báo lỗi. Giải ngố giúp mình nha ;;;;;;;;;;;

Mã:
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _       [B] Sheets(Sheets.Count).Selection[/B], Version:=xlPivotTableVersion14).CreatePivotTable _
        TableDestination:="MACRO!R5C1", TableName:=[B]"PivotTable" & Sheets.Count[/B], DefaultVersion _
        :=xlPivotTableVersion14
Mình nghĩ vấn đề ở chỗ này
Sheets(Sheets.Count).Selection
KO biết cái selection của bạn thế nào, tốt nhất bạn ghi cụ thể nó là vùng nào
VD:Sheets(sheets.count).range(XXX:XXX)
 
pro quá, e đã lưu lại hết. cám ơn mọi người ah -=.,,
 
Web KT

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

Back
Top Bottom