Hỏi về cách lọc in dữ liệu để báo cáo theo từng ngày (2 người xem)

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

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

camry

Thành viên mới
Tham gia
1/2/07
Bài viết
36
Được thích
0
Em đang có file dữ liệu nhập thường xuyên theo các ngày trong tháng và Sếp thường yêu cầu báo cáo đột xuất theo từng ngày. Nhờ các Bác chỉ giúp cách thực hiện làm sao để chỉ cần nhập ngày tháng năm thì dữ liệu sẽ xuất sang sheet khác để in ra luôn không phải chỉnh sửa gì nữa.
 

File đính kèm

Như file của bạn thì fillter là nhanh nhất!!!
 
Yêu cầu công việc là: em có 2 sheet, sheet "Data" là số liệu nhiều ngày trong năm, sheet "Báo cáo" là định dạng văn bản Bản báo cáo các hàng ngày theo yêu cầu. Ví dụ: Sheet Data gồm số liệu của 6 tháng, hôm nay Sếp yêu cầu em làm báo cáo ngày 15/06 in ra gửi Sếp. Việc của em là chỉ cần nhập ngày (15/06/2013) vào sheet "Báo cáo", tự động tât các các số liệu của ngày 15/06/13 sẽ được đưa vào Báo Cáo luôn, em chỉ cần ký thôi không phải chỉnh sửa định dạng lại bản Báo cáo nữa.
Nhờ các Bác chỉ giúp.
 
Lần chỉnh sửa cuối:
Yêu cầu công việc là: em có 2 sheet, sheet "Data" là số liệu nhiều ngày trong năm, sheet "Báo cáo" là định dạng văn bản Bản báo cáo các hàng ngày theo yêu cầu. Ví dụ: Sheet Data gồm số liệu của 6 tháng, hôm nay Sếp yêu cầu em làm báo cáo ngày 15/06 in ra gửi Sếp. Việc của em là chỉ cần nhập ngày (15/06/2013) vào sheet "Báo cáo", tự động tât các các số liệu của ngày 15/06/13 sẽ được đưa vào Báo Cáo luôn, em chỉ cần ký thôi không phải chỉnh sửa định dạng lại bản Báo cáo nữa.
Nhờ các Bác chỉ giúp.
Bạn nói dữ liệu cả năm nên tôi làm thử bằng VBA coi có chạy được không nhé.
Nhập ngày cần báo cáo vào ô E2.
 
Lần chỉnh sửa cuối:
Bạn nói dữ liệu cả năm nên tôi làm thử bằng VBA coi có chạy được không nhé.
Nhập ngày cần báo cáo vào ô E2.
Đúng luôn ý định của em rồi, cảm ơn các Bác nhiều. Tks Bác RoberLiem.
Bác cho em hỏi tý, nếu tách 2 sheet trên tạo thành 2 file excel, 1 file lưu dữ liệu (VD file lưu C:\Congviec\Data.xls), 1 file để làm báo cáo (C:\Congviec\Baocao.xls), thì trong phần VBA chỉnh sửa như thế nào.
 
Đúng luôn ý định của em rồi, cảm ơn các Bác nhiều. Tks Bác RoberLiem.
Bác cho em hỏi tý, nếu tách 2 sheet trên tạo thành 2 file excel, 1 file lưu dữ liệu (VD file lưu C:\Congviec\Data.xls), 1 file để làm báo cáo (C:\Congviec\Baocao.xls), thì trong phần VBA chỉnh sửa như thế nào.

Ví dụ file data.xls và file báo cáo nằm chung 1 folder thì dùng ado như sau:

[GPECODE=sql]Sub Loc_HLMT()
Set adoConn = CreateObject("ADODB.Connection")
Set adoRS = CreateObject("ADODB.Recordset")
With adoConn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & _
"\data.xls;Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
.Open
End With
With adoRS
.ActiveConnection = adoConn
.Open "select * from [data$a2:h1000] " & _
"where f2 =#" & Format(DateSerial(Year(Sheet2.Range("E2")), _
Month(Sheet2.Range("E2")), Day(Sheet2.Range("E2"))), "mm/dd/yyyy") & "#"
End With
With Sheet2
.[B5:I1000].ClearContents
.[B5].CopyFromRecordset adoRS
End With
adoRS.Close: Set adoRS = Nothing
adoConn.Close: Set adoConn = Nothing
End Sub
[/GPECODE]
Giải nén file và chạy file báo cáo nhé.
 

File đính kèm

Đúng luôn ý định của em rồi, cảm ơn các Bác nhiều. Tks Bác RoberLiem.
Bác cho em hỏi tý, nếu tách 2 sheet trên tạo thành 2 file excel, 1 file lưu dữ liệu (VD file lưu C:\Congviec\Data.xls), 1 file để làm báo cáo (C:\Congviec\Baocao.xls), thì trong phần VBA chỉnh sửa như thế nào.
Bạn không đưa file lên mà chỉ ví dụ thì bạn thử sửa code của Bạn RoberLiem thành như vầy coi sao:
PHP:
Public Sub Rober4()
Application.ScreenUpdating = False
Dim Arr1(), Arr2(), I As Long, J As Long, K As Long, DK As Date, Pat As String
Pat = ThisWorkbook.Path
Workbooks.Open Filename:=Pat & "\Data.xls"
With Sheets("Data")
    Arr1 = .Range(.[B2], .[B65536].End(xlUp)).Resize(, 7).Value
End With
Workbooks("Data.xls").Close
ReDim Arr2(1 To UBound(Arr1, 1), 1 To 8)
Workbooks("Baocao.xls").Activate
With Sheets("Baocao")
    DK = .[E2].Value
    For I = 1 To UBound(Arr1, 1)
        If Arr1(I, 1) = DK Then
            K = K + 1
            Arr2(K, 1) = K
            For J = 1 To 7
                Arr2(K, J + 1) = Arr1(I, J)
            Next J
                Arr2(K, 6) = "'" & Arr1(I, 5)
        End If
    Next I
    If K Then
        .[B5].Resize(K, 8).Value = Arr2
        .[B5].Resize(K, 8).Borders.LineStyle = xlContinuous
        .[D5].Offset(K + 1).Value = .[K1].Value
        .[G5].Offset(K + 1).Value = .[K2].Value
    Else
        MsgBox "Khong co du lieu.", , "Giai Phap Excel"
    End If
End With
Application.ScreenUpdating = True
End Sub
Trong sheet Baocao:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$2" Then
    [B5:I1000].Clear
    If Target.Value <> vbNullString Then Rober4
End If
End Sub
Điều kiện: 2 file phải được chứa cùng Folder.
Chú ý tên file và tên sheet phải đúng như trong Sub.
 
Lần chỉnh sửa cuối:
Cảm ơn các Bác nhiều.
Em còn một thắc mắc nữa thôi, làm sao để dòng "Người lập bảng" ở phía dưới bảng luôn cố định được không, vì như cách hướng dẫn trên thì ok rồi nhưng mỗi lần chạy phải gõ lại ngày tháng và dòng " Người Lập Bảng"???
 
Cảm ơn các Bác nhiều.
Em còn một thắc mắc nữa thôi, làm sao để dòng "Người lập bảng" ở phía dưới bảng luôn cố định được không, vì như cách hướng dẫn trên thì ok rồi nhưng mỗi lần chạy phải gõ lại ngày tháng và dòng " Người Lập Bảng"???

Bạn nói code của ai, của anh Ba Tê chuẩn rồi, còn muốn dùng ado thì bạn chỉnh lại chút xíu

[GPECODE=sql]Sub Loc_HLMT()
Set adoConn = CreateObject("ADODB.Connection")
Set adoRS = CreateObject("ADODB.Recordset")
With adoConn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & _
"\data.xls;Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
.Open
End With
With adoRS
.ActiveConnection = adoConn
.Open "select * from [data$a2:h1000] " & _
"where f2 =#" & Format(DateSerial(Year(Sheet2.Range("E2")), _
Month(Sheet2.Range("E2")), Day(Sheet2.Range("E2"))), "mm/dd/yyyy") & "#"
End With
Sheet2.[B5:I1000].Clear
If adoRS.EOF Then
MsgBox "Khong co du lieu roi", vbCritical
Else
With Sheet2
.[B5].CopyFromRecordset adoRS
.Range("B4:i" & .[B65000].End(xlUp).Row).Borders.LineStyle = xlContinuous
.Range("B5:B" & .[B65000].End(xlUp).Row).FormulaR1C1 = "=ROW()-4"
.[C65000].End(xlUp).Offset(3) = "Ki" & ChrW(7875) & "m soát"
.[H65000].End(xlUp).Offset(3) = "Ng" & ChrW(432) & ChrW(7901) & "i báo cáo"
End With
End If
adoRS.Close: Set adoRS = Nothing
adoConn.Close: Set adoConn = Nothing
End Sub

[/GPECODE]
 

File đính kèm

Cần 2 dòng nữa 1 bên là " Ngày tháng năm/ Người kiểm soát" và " ngày tháng năm/ Người lập bảng". 2 dòng này sẽ nằm ở cuối bảng, trường hợp bảng nhiều trang các dòng này sẽ tự động chạy xuống cuối bảng ở trang cuối cùng. Tks cả nhà.
Chỉ mới hiểu được code của Bác RoberLiem và của Bác Ba Tê, còn code của Bác Hai Lúa Miền Tây thì đang nghiên cứu chưa hiểu lắm. Code của Bác Hai Lúa Miền Tây là đúng ý em rồi đó nhưng chưa hiểu lắm. Vì đang thực hành cách của Bác Ba Tê và Bác RoberLiem, có cách nào copy đoạn mã Bác Hai Lúa Miền Tây vào đoạn code của 2 bác trên không?
P/s Trình bày kiểu như thế này:
ngày tháng năm ....................................ngày tháng năm
Kiểm soát .............................................Người lập bảng.
 
Lần chỉnh sửa cuối:
P/s Trình bày kiểu như thế này:
ngày tháng năm ....................................ngày tháng năm
Kiểm soát .............................................Người lập bảng.

Tạo chân trang ở chổ nào đó, copy nó rồi dán vào, ví dụ tôi tạo chân trang ở sheet1

[GPECODE=sql]Sub Loc_HLMT()
Set adoConn = CreateObject("ADODB.Connection")
Set adoRS = CreateObject("ADODB.Recordset")
With adoConn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.Path & _
"\data.xls;Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
.Open
End With
With adoRS
.ActiveConnection = adoConn
.Open "select * from [data$a2:h1000] " & _
"where f2 =#" & Format(DateSerial(Year(Sheet2.Range("E2")), _
Month(Sheet2.Range("E2")), Day(Sheet2.Range("E2"))), "mm/dd/yyyy") & "#"
End With
Sheet2.[B5:I1000].Clear
If adoRS.EOF Then
MsgBox "Khong co du lieu roi", vbCritical
Else
With Sheet2
.[B5].CopyFromRecordset adoRS
.Range("B4:i" & .[B65000].End(xlUp).Row).Borders.LineStyle = xlContinuous
.Range("B5:B" & .[B65000].End(xlUp).Row).FormulaR1C1 = "=ROW()-4"
Sheet1.Range("B2:I3").Copy .[B65000].End(xlUp).Offset(3)
End With
End If
adoRS.Close: Set adoRS = Nothing
adoConn.Close: Set adoConn = Nothing
End Sub

[/GPECODE]
 

File đính kèm

Cách của Bác Hai Lúa Miền Tây em làm theo mà không được, Bác ghi đoạn code copy đoạn chân trang giúp em được không?
 
Bác Hai Lúa Miền Tây cho em nhờ tý, em đã sửa lại đoạn code của Bác RoberLiem ra thế này và đã chạy được, bây giờ muốn chèn đoạn code chân trang vào thì làm như thế nào?

Public Sub Rober4()
Application.ScreenUpdating = False
Dim Arr1(), Arr2(), I As Long, J As Long, K As Long, DK As Date, Pat As String
Pat = ThisWorkbook.Path
Workbooks.Open Filename:=Pat & "\Data.xls"
With Sheets("Data")
Arr1 = .Range(.[B2], .[B65536].End(xlUp)).Resize(, 7).Value
End With
Workbooks("Data.xls").Close
ReDim Arr2(1 To UBound(Arr1, 1), 1 To 8)
Workbooks("Baocao.xls").Activate
With Sheets("Baocao")
DK = .[E5].Value
For I = 1 To UBound(Arr1, 1)
If Arr1(I, 1) = DK Then
K = K + 1
Arr2(K, 1) = K
For J = 1 To 7
Arr2(K, J + 1) = Arr1(I, J)
Next J
Arr2(K, 6) = "'" & Arr1(I, 5)
End If
Next I
If K Then
.[B8].Resize(K, 8).Value = Arr2
.[B8].Resize(K, 8).Borders.LineStyle = xlContinuous
.[D8].Offset(K + 1).Value = .[K1].Value
.[G8].Offset(K + 1).Value = .[K2].Value
Else
MsgBox "Khong co du lieu.", , "Giai Phap Excel"
End If
End With
Application.ScreenUpdating = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$5" Then
[B8:I1000].Clear
If Target.Value <> vbNullString Then Rober4
End If
End Sub
 
Bạn cho mình hỏi một tí nều lấy dữ liệu ở file ; xls,xlsm, xlsb hay xlsx cả 4 loai trên thì mình chỉnh code như thế nào cho phù hợp
cảm ơn bạn rất nhiều
 
Các anh chi có file ví dụ nào về lọc theo tuần và tháng rồi đưa qua file hoặc sheet khác không cho em xin. Em mới học excel nên còn tệ lắm. Cảm ơn mấy anh chị.
 
[Thongbao]Các anh chi có file ví dụ nào về lọc theo tuần và tháng rồi đưa qua file hoặc sheet khác không cho em xin. Cảm ơn mấy anh chị.[/Thongbao]

Bạn nên giả lập file & đưa lên; Có vậy mới đúng chổ ngứa!
 
Bạn nói dữ liệu cả năm nên tôi làm thử bằng VBA coi có chạy được không nhé.
Nhập ngày cần báo cáo vào ô E2.
Hay quá bác ơi!
cho em hỏi 1 tý, em là thành viên mới tinh có gì bác đừng cười nhé.
- Sao trong code của bác em không thấy chỗ nào nói đến "Kiểm soát" và người bc" mà lọc nó lại ra nhỉ bác chỉ em với.
- Cũng với nội dung yêu cầu như vậy, nhưng em muốn lấy thông tin vài cột không liên tục ở sheet Data thôi, ví dụ như cột B, cột D, cột F và cột G thì code mình phải sửa như thế nào ạ
em cảm ơn!
 
Web KT

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

Back
Top Bottom