Cách dùng hàm Excel nào để tổng hợp lý do nghỉ trong tháng (1 người xem)

  • Thread starter Thread starter ducbacgt
  • Ngày gửi Ngày gửi

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

không pro nào trả lời được câu hỏi của em ạ!
( không biết thì phải hỏi, dù là đơn giản nhất)
Tại vì chưa trả lời thôi, bài toán cũng khó nhưng tạm giải quyết thế này nha
Bài này dùng VBA thì hay hơn

Ngoài lề tí: Mình thấy cách quản lý kiểu này ngộ quá, ngộ thiệt.

PHP:
Sub tonghop()
Dim kq, dl, i, ii, j, sh
kq = Range([c7], [c65536].End(3)).Resize(, 5).Value
For Each sh In Worksheets
  If sh.Name <> "tonghop" Then
    With sh
      dl = .Range(.[c7], .[c65536].End(3)).Resize(, 5).Value
    End With
    For i = 1 To UBound(kq)
      For j = 1 To UBound(dl)
        If kq(i, 1) = dl(j, 1) Then
          For ii = 2 To 5
            kq(i, ii) = kq(i, ii) & dl(j, ii) & ChrW(10)
          Next
        End If
      Next
    Next
  End If
Next
[c7].Resize(i - 1, 5) = kq
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Các lý do nghỉ không nên nhập tùy ý, ví dụ
"nghỉ do vi phạm kỳ luật" là khác với "nghỉ vi phạm kỳ luật" vì khác chữ "do"
"Xin nghỉ do ốm, Bị tai nan" là không xác đáng vì chỉ cần 1 lý do "nghỉ bị tai nạn"

Thậm chí không cần nhập chữ "nghỉ" (nếu cơ quan có nhiều người thì đỡ nhập, đôi khi 1 người nghỉ nhiều lần).

Nếu nhập tùy ý thì số lý do có thể rất nhiều. Lý do hoàn toàn như nhau nhưng xử lý trên máy thì lại là khác nhau nếu thừa dấu cách chẳng hạn.

Vậy nên bạn cần "chuẩn" lý do nghỉ, có thể 50 hay 100 lý do thôi. Ví dụ (tôi bỏ chữ "nghỉ"): phép, tai nạn, việc riêng (chung cho việc gia đình, việc cưới, việc tang...), thai sản (nghỉ do chính sách), sức khỏe, không rõ lý do...

Và cũng không nhất thiết phải chăng ra gần 30 Sheet, mỗi Sheet 1 ngày làm việc trong tháng. Nên thêm cột "ngày báo cáo"

Khi đó, có thể dùng Pivot để lập bảng tổng hợp, hoặc đơn giản là Sort theo cột lý do nghỉ (xét cho cùng thì mấy ai đi làm mà thích nghỉ lặt vặt).

Tôi cũng vừa kịp xem Macro của quanghai. Nhưng cũng nên "chuẩn" (nhắc lại "chuẩn") để khỏi phải "chỉnh" sửa nhiều
 
Lần chỉnh sửa cuối:
Thực ra mình thấy bài này bữa trước, nhưng không động đậy gì, vì ~ lí do sau:

(1) Mã lỗi nghỉ (tạm gọi là vậy) nên có; Điều này giúp ta quản mã lỗi tiện hơn (chính tả khi nhập liệu), nhứt là lúc fát sinh mã lỗi thì cần cân nhắc.
Nếu vài mã lỗi đều cùng 1 cách xử lý thì chỉ nên 1 mã lỗi mà thôi; Như vậy 1 mã lỗi sẽ thuộc về 1 số lỗi khác nhau (,nhưng cùng 1 cách hành xử)

(2) Tên trang tính chỉ nên là DDMMYY, thậm chí là DDMMY mà thôi;
Mà bạn bao nhiêu trang tính cỡ như vậy; Sao không tìm cách gom lại.
Một khi có mã lỗi thì chuyện gom trang tính lại có vẻ thuận tiện hơn cho bạn. (Lúc đó coi như ta lấy chất lượng bù số lượng.)

(..) Hồi nẩy mình còn thấy 1 bài nữa của bạn mà nói thật, mình thấy nó chả ra làm sao.(Chắc bỡi vậy nên đã được MOD hay SMOD cho đi vô thùng rác rồi.
 
Cảm ơn bác đã chỉ bảo, nhưng có cách nào dễ hiểu hơn không ạ, em chỉ cần khi xét mã sô ( kèm them là tên) đi cùng các phát sinh, nhưng phát sinh thì rất nhiều lý do, có thể giống nhau có thể khác nhau của một người nghỉ trong một tháng, nhưng em muốn ở bảng tổng hợp linh được các lý do đó qua các Sheet báo cáo của ngày trong tháng. ( Nếu cá nhân đó có lý do trùng nhau thì trong bảng tổng hợp lặp lại 1 lần, không cần phải lặp lại nhiều lần trong bảng tổng hợp,liêu có được không, còn khi có lý do khác phát sinh của người đó thì tự trong bảng tổng hợp Linh lý do qua báo cáo ngày ). Mong các pro có cách nào chỉ bảo Minh. Xin trân thành cảm ơn.




Ngoài lề tí. Bài cuả em cũng không ngộ lắm, mục đích là biết xem 1 tháng có bao nhiêu người nghỉ, trong số đó có bao nhiêu người có lý do giống nhau, bao nhiêu trường hợp phải gửi các phòng nhân sự , phòng quy chế, và được sự đồng ý nghỉ. Vì số liệu báo cáo trong ngày có thể là giảm đi hoặc phát sinh người, phát sinh khác trong một form mẫu nên em cần bảng tổng hợp linh được các sheet trong ngày.

Mấy câu này của pro hay thế.
Cây Lớn Một Ôm Tay
Phát Sinh Từ Gốc Nhỏ
Đài Cao Suốt Chín Tầng
Khởi Sự Nhúm Đất Nhỏ
Đi Xa Được Ngàn Dặm
Khởi Đầu Một Bước Chân
 
cảm ơn pro có cách nào nữa không ạ,
Tại vì chưa trả lời thôi, bài toán cũng khó nhưng tạm giải quyết thế này nha
Bài này dùng VBA thì hay hơn

Ngoài lề tí: Mình thấy cách quản lý kiểu này ngộ quá, ngộ thiệt.

PHP:
Sub tonghop()
Dim kq, dl, i, ii, j, sh
kq = Range([c7], [c65536].End(3)).Resize(, 5).Value
For Each sh In Worksheets
  If sh.Name <> "tonghop" Then
    With sh
      dl = .Range(.[c7], .[c65536].End(3)).Resize(, 5).Value
    End With
    For i = 1 To UBound(kq)
      For j = 1 To UBound(dl)
        If kq(i, 1) = dl(j, 1) Then
          For ii = 2 To 5
            kq(i, ii) = kq(i, ii) & dl(j, ii) & ChrW(10)
          Next
        End If
      Next
    Next
  End If
Next
[c7].Resize(i - 1, 5) = kq
End Sub
 
Hix hix, cảm ơn pro mong ai có cách linh được lý do qua các sheet để em đỡ phải cópi các sheet chung trong một bảng tổng hợp
Bạn xem như thế này được chưa
PHP:
Sub tonghop()
Dim kq, dl, i, ii, j, sh
[d7:g1000].ClearContents
kq = Range([c7], [c65536].End(3)).Resize(, 5).Value
For Each sh In Worksheets
   If sh.Name <> "tonghop" Then
      dl = sh.Range(sh.[c7], sh.[c65536].End(3)).Resize(, 5).Value
      For i = 1 To UBound(kq)
         For j = 1 To UBound(dl)
            If kq(i, 1) = dl(j, 1) Then
               If kq(i, 2) Like "*" & dl(j, 2) & "*" Then
                  kq(i, 2) = kq(i, 2)
               Else
                  kq(i, 2) = kq(i, 2) & dl(j, 2) & ChrW(10)
               End If
               For ii = 3 To 5
                  kq(i, ii) = kq(i, ii) & dl(j, ii) & ChrW(10)
               Next
            End If
         Next
      Next
  End If
Next
[c7].Resize(i - 1, 5) = kq
Erase kq
End Sub
 

File đính kèm

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

Back
Top Bottom