Báo cáo thế này thì nên dùng hàm gì vậy các bác?

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

lehoa81

Thành viên mới
Tham gia
2/1/10
Bài viết
46
Được thích
7
Cuối năm em có nhiều báo cáo mà excell thì không giỏi nên cứ làm thủ công lâu quá.
Em mới đăng ký nick để lên đây nhờ các bác giúp và học hỏi thêm về excell.

Em gửi kèm theo một file gốc và một báo cáo phải xây dựng từ file gốc đó.

Em không biết gửi file đính kèm nên nhờ một bác có thâm niên trên diễn đàn gửi hộ.

Mong các bác giúp cho!
Cảm ơn các bác nhiều ạ!
 
Đây là file tác giả nhờ tôi gửi hộ.
 

File đính kèm

Bác thử quả Pivot table xem sao!%#^#$. Cách tạo và sử dụng Pivot bác có thể tham khảo trên mạng. Nhiều lắm ạ!
 

File đính kèm

Lần chỉnh sửa cuối:
Cảm ơn bác!

Pivot thì em cũng biết một chút, hình như chỉ để đếm số lần xuất hiện thôi bác nhỉ?
Em chỉ tìm kiếm thông tin, hiện thông tin đó ra, nếu có loại nghỉ giống nhau thì cộng vào giúp em giống như sheet "dạng báo cáo" đó ạ.

Nếu các bác thấy khó quá, có thể gợi ý em cách nào khác mà hạn chế làm thủ công giúp em được không ạ? Công ty em hơn 3000 công nhân mà làm bằng tay chắc không làm được ạ.

Cảm ơn các bác nhiều!
 
Lần chỉnh sửa cuối:
Mình thấy trang này hữu ích với yêu cầu của bạn
 
Cảm ơn bác,

Em đang học hỏi thêm, nhưng mà đọc cái Pivot nhiều cột vẫn chưa hiểu gì.

Thanks bác!
 
Bạn dùng 1 bảng đơn giản hơn rồi vọc qua mới nhanh hiểu được
 
Bác Sealand ơi,

Cái file của em thông tin không phủ kín (có nhiều ô trống) thì không dùng được pivot hay sao ý bác ạ.
 
Sau khi xem kỹ thì đúng là File của bạn không dùng Pivot được vì cột liệt kê những ngày nghỉ, ví dụ bắt đầu ngày 16/12 đến 18/12 phải liệt kê 16/12;17/12;18/12. Cái này công thức cũng khó mà có lẽ phải dùng VBA thôi. Còn việc ô trống hay có dữ liệu không ảnh hưởng đâu
 
Lần chỉnh sửa cuối:
Phần nhập liệu của bạn có vấn đề!

Trong trang 'NgayNghi', từ cột 'D' đến cột 'E' bạn nhập ngày không theo 1 định dạng duy nhứt; Lúc thì 'MM/dd/YYYY', lúc thì 'DD/mm/yyyy', có cả hh:mm:ss nữa thì không tài giỏi nào mà tổng kết công cho bạn được

Những lời khuyên bạn tiếp theo, như sau:

(*) Tại sao bạn lại tách loại nghỉ ra làm 2 cột, phép riêng & các loại khác riêng chi vậy;
Theo tôi bạn chỉ cần 1 cột & nếu muốn làm nổi bậc công phép thì hãy dùng chức năng CF tô màu khác thường cho những ô phép. (Chắc cũng chỉ đạt mục đích nhìn cho bắt mắt thôi) chứ không có nghĩa gì trong excel cả!

(*) Trang tính thứ 2 của bạn có tên quá ư không nên; theo mình chỉ là 'BaoCao' là đủ!

(*) Trang 'NgayNghi' tự nhiên bạn bỏ các dòng trắng phía trên làm gì vậy. Đó là trang dữ liệu thô, chỉ có bạn hay người giúp việc bạn xem mà thôi.
Đừng nói với tôi rằng như thế sẽ nhìn bắt mắt hơn đó nha!
Vì nếu vậy, với tôi tôi sẽ xoá các dòng trống đó đi & kéo dãn dòng đầu đến cỡ vừa í

(Mình chỉ muốn chúng ta hãy đúng ngay từ đầu mà thôi!)

Chúc vui!
 
Chào bác ChanhTQ!

Các "file gốc" là thông tin phần mềm xuất ra bác ạ, phần mềm xuất ra làm sao thì em nhận như thế.

Còn em phải xử lý và làm báo cáo từ cái sheet gốc đó.

Nếu như thông tin có cả ngày và giờ mà khó xử lý thì em xóa giờ đi rồi tự đánh bằng tay vào trong báo cáo cũng được các bác ạ, dù sao nó cũng không nhiều lắm ạ.

Mong các bác giúp em! Chứ hiện giờ em đang làm thủ công, lâu vô cùng, có khi cả buổi sáng mới xong cái báo cáo này. Lãng phí thời gian quá các bác ạ!

Cảm ơn các bác nhiều!
 
Thử bằng VBA xem sao, bạn kiểm lại nha

PHP:
Option Explicit

Sub TKNgayNghi()
 Dim Sh As Worksheet, Clls As Range, Rng As Range, sRng As Range
 Const dF As String = "MM/dd/yyyy"
 Dim MyColor As Byte, The As String, Tru As Integer
 
 Sheets("NgayNghi").Select:                     Application.ScreenUpdating = False
 Columns("A:H").Sort Key1:=Range("C2"), Order1:=xlAscending, Key2:=Range("A2") _
   , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1
 Set Sh = Sheets("BaoCao"):                     MyColor = Sh.[A1].Interior.ColorIndex
 Sh.[A1].Interior.ColorIndex = IIf(MyColor < 42, 1 + MyColor, 34)
 Set Rng = Sh.Range(Sh.[d1], Sh.[iv1].End(xlToLeft))
 Sh.[b2].CurrentRegion.Offset(2, 1).ClearContents
 For Each Clls In Range([c2], [c2].End(xlDown))
      
      With Sh.[b65500].End(xlUp).Offset(1)
         
         If Clls.Offset(, -2).Value <> Clls.Offset(-1, -2).Value Then
            .Resize(, 3).Value = Clls.Offset(, -2).Resize(, 3).Value
            The = Clls.Offset(, -2).Value
            Tru = 0
         Else
            If Tru = 0 Then Tru = 1 Else Tru = 0  '*'
         End If
         
            Set sRng = Rng.Find(Clls.Offset(, 4).Value, , xlFormulas, xlPart)
            If sRng Is Nothing Then
               MsgBox "Xem Lai Di Nha":         Clls.Interior.ColorIndex = 38
               Exit Sub
            Else
               Sh.Cells(.Row - Tru, sRng.Column).Value = Clls.Offset(, 3).Value
               Sh.Cells(.Row - Tru, 1 + sRng.Column).Value = Format(Clls.Offset(, 1).Value, dF)
            End If
            
         If Clls.Value <> Clls.Offset(1).Value Then _
            .Offset(1).Value = "SubTotal"
      End With
 
 Next Clls
 Sh.Select
End Sub
 

File đính kèm

Bác ơi!

Đúng kiểu em mong muốn đó ạ.

Nói thật bác là em chưa biết gì về VBA cả.

Em thử copy một đoạn mới vào thế chỗ cho thông tin cũ mà không thẫy dữ liệu tự động nhảy.
Vì báo cáo này em phải làm hằng tuần mà.
 
Bác ơi! Em thử copy một đoạn mới vào thế chỗ cho thông tin cũ mà không thẫy dữ liệu tự động nhảy. Vì báo cáo này em phải làm hằng tuần mà.
Bạn phải bấm tổ hợp fím mình thấy đã gán trong macro để chạy nó; Hình như là {CTRL}+{SHIFT}+T thì fải

Thử vài lần nữa xem sao nha. Vẫn còn trục trặt hay chưa theo iêu cầu hay sao đó!

Chúc tuần làm việc nhiều kết quả!
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom