Giải các bài tập về nhân sự từ đơn giản đến fức tạp

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

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia
8/6/06
Bài viết
14,582
Được thích
22,905
Nghề nghiệp
U80
Mình có dự định tạo ra topic này để các thành viên có nhu cầu nâng cao trình độ về VBA tham gia giải các bài tập.
Các bài tập xoay quanh về việc quản lý nhân sự của 1 cơ quan khoảng hơn 700 CNV

Bạn nào có nhu cầu thì nhấn nút "cảm ơn" để mình cập nhất danh sách;

Các bài tập sẽ do các SMOD, MOD của BOX này cũng như 1 số thành viên khác quan tâm ra đề, được chọn lọc & đưa lên.

Khai giảng kể từ lúc danh sách tham gia có hơn 9 thành viên đăng ký. Lúc đó mình sẽ đưa lên file CSDL xài trong suốt topic.
Thời gian giành cho mỗi bài tập của mỗi thành viên tham gia là 100 giờ được cộng thêm thời gian trước đó chưa sử dụng từ các bài trước.

(Thành viên đã được cập nhất vô danh sách xóa giúp nút "Cảm ơn" để đỡ rối nha.)
(Các bạn cho ý kiến thêm về quy chế các thành viên tham gia giúp nha)

-=DANH SÁCH ĐĂNG KÝ=-
STT | NICKNAME | Cập nhật |
01|NguyenManhHao|22/03|11h49|
02|Num1710|22/03|11h49|
03|MinhCong|22/03|16h40|
04|Bemyself|22/03|17h40|
05|NghiaPhuc|22/03|22h40|
06|KhoaVu87|23/03|13h40|
07|TungNguyen_KT|22/03|10h40|
08|ThaoVinh|23/03|16h40|
09|HHung84|23/03|21h40|
10|Thangsra|23/03|21h40|
11|LuuVanTam|24/03|10h0 |
12|Teo2010|24/03|14h30 |
13|TrungChinh|25/03|16h30 |
14|Tram.NguyenThi|01/04|11h30 |
15|HoangSPK|07/04|18h30 |
16|Hoile|07/04|18h30 |
17|VieHoai|07/04|18h30 |
18|CCNA_PTHue|10/04|08h00 |
. . .

Rất cảm ơn Lê Văn Duyệt nhận lòi làm giáo viên hướng dẫn;
Đang fần vân việc cập nhật anh DomFootwear: Hãy đợi thêm nha!
 
Lần chỉnh sửa cuối:
em mun biết thêm là : khi ta quản lý nhân sự thì ta cần quản lý về những mảng nào ạ
 
Upvote 0
Cũng như công tác tài chính & vật tư, quản lý nhân sự cũng cần thống kê

Thống kê để biết di biến động nguồn nhân lực trong đơn vị, biết được trình độ học vấn, bình quân ngạch bậc thợ của từng đơn vị.
Sau đây tôi xin giới thiệu 1 thống kê đơn giản: Đó là


THỐNG KÊ ĐỘ TUỔI CỦA CQ (CƠ QUAN) TRONG TỪNG ĐƠN VỊ​

Giả dụ CQ tôi có hơn 750 nhân viên bố trí trong 10 bộ fận có mã là A, B, C, . . . ,H

Đây là trích hồ sơ nhân viên CQ:

TT| MaNV |Ten|Nu|NgaySinh| DV i| Tuoi
1|A7750F4|Nguyên||4/5/1951|H|59
2|A7740G1|Cương|True|5/2/1951|J|59
3|A7730GS|Thành||5/29/1951|H|59
|. . . |||||
24|A7520ZF|Nghĩa|False|12/16/1952|G|58
|. . . |||||
775|A001BVI|Hà|True|8/19/1985|G|25

Nhiệm vụ đề ra là ta fải lấp đầy số liệu vô các dấu '?' trong bảng sau:

Fân Loại|MaDV:|A|B|C|.. .|H
Thanh niên|<=30|?|?|?|.. .|?
Trung niên|<=45|?|?|?|.. .|?
luống tuổi|<=55|?|?|?|.. .|?
Quá tuổi|>55|?|?|?|.. .|?

Sau đây là macro nhằm thống kê theo yêu cầu trên ( Mời các bạn xen thêm trong file đính kèm)

PHP:
Option Explicit
Sub ThKeDoTuoi()
    Const NC   As String = "@"

    Dim Sh As Worksheet, Rng As Range, Cls As Range, Rg0 As Range, sRng As Range
    Dim StrC As String, MyAdd As String
    Dim jJ As Byte, Tt, Dem As Byte


    Set Sh = Sheets("CSDL")
    Sheets("S0").Select
1   '.Gán Vùng Ma Don Vi Vào Bién Rg0 Da Khai Báo:'
    Set Rg0 = Range([C1], [iv1].End(xlToLeft))
2   '.Gán Vùng Càn Tìm Kiém Tai "CSDL"  Vào Bién Da Khai Báo Rng:'
    Set Rng = Sh.Range(Sh.[f1], Sh.[f65500].End(xlUp))
3   'Khai Báo Mang 2 Chièu, Gòm 4 x jj Fàn Tu (jj Là Só Luong Don Vi Cua CQ):'
    ReDim Mang(1 To 4, 1 To Rg0.Count)
4   '.Tao Vòng Lap Duyet Theo Hét Các Ma Don Vi:'
    For Each Cls In Rg0
        jJ = jJ + 1
5       '.Thuc Hien Viec Tim Theo Tùng Ma Don Vi Nàm Trong Bién Rng:'
        Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
        If Not sRng Is Nothing Then
6           '.Néu Tìm Tháy, Thì Gán Dia Chi Tìm Tháy Vo Bién MyAdd Da Khai Báo:'
            MyAdd = sRng.Address
7           '.Tao Vòng Lap De Fuong Thúc Tìm Kiém Tìm Hét Ma Don Vi Do:'
            Do
8               '.Gán Tuoi Cua Nhan Vien Vo Bién Tt Da Khai Báo:'
                Tt = sRng.Offset(, 1).Value
9               '.Dùng Hàm Swtitch() De Gán Tri Tuong Úng Cua Bién Tt Vo Bién Dem:'
                Dem = Switch(Tt <= 30, 1, Tt <= 45, 2, Tt <= 55, 3, Tt > 55, 4)
10              '.Cong Them Vo Bién Mang Tuong Úng 1 Giá Tri:'
                Mang(Dem, jJ) = Mang(Dem, jJ) + 1
11              '. Thuc Hien Tiép Viec Tìm Kiém Cho Dén Hét:':
                Set sRng = Rng.FindNext(sRng)
            Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
12          '.Ghi Tri Tù Bíén Vô Bang Thóng Ke Theo 04 Do Tuoi:'
            For Tt = 1 To 4
                Cls.Offset(Tt) = Mang(Tt, jJ)
            Next Tt
        End If
    Next Cls
End Sub
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Phát huy chiến quả của bài vừa qua, ta tự đề ra nhiệm vụ nặng nề hơn:

THỐNG KÊ THEO GIỚI TÍNH CỦA TỪNG BỘ FẬN.

Để nắm & chủ động được về ngày công lao động trong các năm, chúng ta fải thường xuyên theo sát vấn đề nghỉ thai sản & nghỉ cho con bú,. . . ở từng bộ fận thật cặn kẽ. Muốn vậy ta lại fải thống kê chi li hơn bài trên vừa nêu.

Nhiệm vụ đề ra là ta fải lấp đầy số liệu vô các dấu '?' trong bảng sau:

Fân Loại|MaDV:|A|A|B|B|C|C|D|D
||Nam|Nu|Nam|Nu|Nam|Nu|Nam|Nu
Thanh niên|<=30|?|?|?|?|?|?|?|?
Trung niên|<=40|?|?|?|?|?|?|?|?
luống tuổi|<=50|?|?|?|?|?|?|?|?
Quá tuổi|>50|?|?|?|?|?|?|?|?



Đây là bảng trích hồ sơ nhân viên CQ cần được thống kê:

TT| MaNV |Ten|Nu| DV i| Tuoi
1|A70323M|Hồng|True|A|19
2|A70522I|Thắm|True|B|41
3|A7171UI|Minh|False|C|29
|. . . |||||
24|A7311I5|Phòng|False|D|54
|. . . |||||
775|A749126|Thơm|True|B|35

Sau đây là macro nhằm thống kê theo yêu cầu trên ( Mời các bạn xen thêm trong file đính kèm)
PHP:
Option Explicit:                                   Option Base 1
Sub ThongKeTheoDoTuoiVaFaiTinh()
 Dim Rng As Range, sRng As Range
 Dim MyAdd As String
 Dim jJ As Byte, NS As Byte, Tuoi As Byte, Col As Byte, N_N As Byte
 
 Sheet1.Select:                        Col = [Ai1].End(xlToLeft).Column
 Set Rng = Range([d1], [d65500].End(xlUp))
 For jJ = 8 To Col Step 2 'Cot H'
   ReDim NamNu(4, 2) As Byte
   Set sRng = Rng.Find(Cells(1, jJ).Value, , xlFormulas, xlWhole)
   If Not sRng Is Nothing Then
      MyAdd = sRng.Address
      Do
         NS = sRng.Offset(, 1).Value
         If NS <= 18 Then MsgBox "Tuoi Vi Thành Nien", , "GPE"
         Tuoi = Switch(NS < 30, 1, NS < 40, 2, NS < 50, 3, NS >= 50, 4)
         If sRng.Offset(, -1).Value Then N_N = 2 Else N_N = 1
         NamNu(Tuoi, N_N) = 1 + NamNu(Tuoi, N_N)
         Set sRng = Rng.FindNext(sRng)
      Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
      For NS = 3 To 6
         Cells(NS, jJ).Value = NamNu(NS - 2, 1)
         Cells(NS, jJ + 1).Value = NamNu(NS - 2, 2)
      Next NS
   End If
 Next jJ
End Sub
 

File đính kèm

Upvote 0
Mình phải làm báo cáo tốt nghiệp về đề tài quản lí lương của một công ty gần 30 người, trên excel. Ai có chút kinh nghiệm gì thì chỉ bảo mình với !!!
 
Upvote 0
Web KT

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

Back
Top Bottom