Hiện tại mỗi tháng em đều làm báo cáo liên quan đến vấn đề nhân sự. Em cần thống kê độ tuổi, chức vụ, thâm niên... ( chi tiết trong file đính kèm ).
Em có làm 1 bảng với công thức vlookup nhưng nhiều sheet quá dẫn đến file rất nặng và chạy lâu và tốn thời gian .
Không biết với file này có thể làm bằng VBA cho nhẹ và nhanh ko?
Rất mong sự giúp đỡ của anh chị em GPE.
Xin cảm ơn tất cả anh chị em!
Cái khó nhất của bạn sẽ là thống kê theo PC (địa fương?) tại 1 thời điểm nhất định.
Lí do của nó là hàng tháng, số người chu chuyện giữa các địa fương (ĐF) sẽ fức tạp nếu bạn xài cấu trúc các trang tính như vậy.
Theo cá nhân mình thì việc thống kê này nên làm bỡi VBA & với những trang tính cần tái cấu trúc cho thích hợp.
Theo mính cần có các trang tính như sau:
'HSNV' của toàn công ti (ở tất cả các ĐF); Trang tính này có cấu trú giống với trang tính bạn đã có, nhưng cần thêm các trường
ghi lại sự di chuyển trong các đơn vị của CQ hay nghỉ hẵn.
Thao kiểu [Ngày chuyển đi/nghỉ], [Nơi chuyện đến]
Thêm 1 danh sách các nhân viên/công nhân chuyển từ bộ fận này sang bộ fận khác & nghỉ hẵn
Để thống kê mọi tiêu chí theo iêu cầu, chúng ta cần lên danh sách toàn bộ CNV tại thời điểm đề ra.
Chỉ sau khi có danh sách này, ta mới thực hiện việc thống kê được.
Vậy chúng ta bàn ở đây là làm sao lên danh sách toàn CQ (với những vị trí D9F chính xác) tại 1 thời điểm iêu cầu nào đó.
Trước tiên vẫn fải tái cấu trúc trang dữ liệu của bạn:
(1) Trang 'Data' của bạn chỉ nên gộp hết 3 trang lại thành 1 trang mà thôi, nhưng trang gộp đó cần có thêm 02 trường
[ChuyenDi], để ghi mã các loại chuyển đi ,Gồm:
Chuyển trong nội bộ CTi từ địa fương này sang địa fương khác (C)
Chuyển hẵn ra khỏi CT (R)
Chuyển sang nghỉ hưu (H)
[NgayC] (Ngày chuyển)
Tuy nhiên khi gộp lại như vậy ta cũng cần xây dựng mới 2 trang tính để lưu những thay đổi này theo 1 cách khác sau đây:
Loại chuyển do H & R ta nên tạo ra trang tính kết cấu như trang dữ liệu & chuyển hẵn sang đó những người thuộc diện hưu trí & ra khỏi CQ (nghỉ việc cơ quan)
Còn nhóm người chu chuyển trong nội bộ ta lập danh sách riêng vối các trường như sau:
Có sanh sách sau cùng này ta mới có thể thống kê tại 1 thời điểm nào đó, số lượng nhân viên các địa fương
Còn danh sách nghỉ hưu, nghỉ việc để giúp ta rà & bỏ bớt số liệu khi fải thống kê theo các tiêu chí khác, như trình độ, nam nữ,. . . .
(2) Trang 'DuLieu' của bạn cũng cần sửa đôi điều trong 1 số trường:
+ Trường [Chức vụ] & trường [Nơi làm việc] đang bị dính chùm; Như vậy không là CSDL chuẩn;
Bạn fải tách bạch ra như sau:
Hiện bạn nhốt chung
[TABLE="width: 195"]
[TR]
[TD]NƠI LÀM VIỆC[/TD]
[/TR]
[TR]
[TD]NLV0001039 - HA NOI[/TD]
[/TR]
[TR]
[TD]NLV0001039 - HA NOI[/TD]
[/TR]
[TR]
[TD]NLV0000972 - HAI PHONG[/TD]
[/TR]
[TR]
[TD]NLV0001037 - CAN THO[/TD]
[/TR]
[/TABLE]
Mình chưa rõ các mã trước dấu fân cách là gì, nhưng cũng nên tách ra làm 2 trường
Tương tự như vậy với trường [Chức vụ] cũng nên tách ra làm 2
+ Trường [Thâm niên] không nên làm như vậy (dạng chuôi, mà chí ít nên là xài hàm trong excel để thể hiện số liệu này (có trên diễn đàn, bạn tìm xem)
+ Trường [CMND] ta không nên lấy nó làm [Mã NV], vừa dài & sắp tới lại chuyển đổi sang số gì khác rồi (Mà sự chuyển đổi này kéo dài hơn 5 năm là cái chắc). Nhưng vậy trong thời gian chờ chuyển xong là CSDL của bạn đang fá sản
Mình có đề xuất mã NV vậy:
PHP:
'
Mã NV | Tên NV'
NVH00 | Nguyễn Viết Hòa
NVH01 | Nguyễn Thị Việt Hà
NJD00 | Nguyễn Dương
NFD00 | Ngô Đức Dy
ONH00 | Ôn Lại Như Hầu
Cái khó nhất của bạn sẽ là thống kê theo PC (địa fương?) tại 1 thời điểm nhất định.
Lí do của nó là hàng tháng, số người chu chuyện giữa các địa fương (ĐF) sẽ fức tạp nếu bạn xài cấu trúc các trang tính như vậy.
Theo cá nhân mình thì việc thống kê này nên làm bỡi VBA & với những trang tính cần tái cấu trúc cho thích hợp.
Theo mính cần có các trang tính như sau:
'HSNV' của toàn công ti (ở tất cả các ĐF); Trang tính này có cấu trú giống với trang tính bạn đã có, nhưng cần thêm các trường
ghi lại sự di chuyển trong các đơn vị của CQ hay nghỉ hẵn.
Thao kiểu [Ngày chuyển đi/nghỉ], [Nơi chuyện đến]
Thêm 1 danh sách các nhân viên/công nhân chuyển từ bộ fận này sang bộ fận khác & nghỉ hẵn
Để thống kê mọi tiêu chí theo iêu cầu, chúng ta cần lên danh sách toàn bộ CNV tại thời điểm đề ra.
Chỉ sau khi có danh sách này, ta mới thực hiện việc thống kê được.
Vậy chúng ta bàn ở đây là làm sao lên danh sách toàn CQ (với những vị trí D9F chính xác) tại 1 thời điểm iêu cầu nào đó.
Chaò bạn, data gốc này là từ trong phần mềm quản lý nhân sự xuất ra. Đây là báo cáo hàng tháng, tháng nào mình cũng phải làm 1 lần. Khi luân chuyển giữa các địa phương sẽ làm trên phần mềm nhân sự. Sau đó data được xuất ra, mình chỉ muốn thống kê những thứ có trong các sheet mình đang để thôi.
Trước tiên vẫn fải tái cấu trúc trang dữ liệu của bạn:
(1) Trang 'Data' của bạn chỉ nên gộp hết 3 trang lại thành 1 trang mà thôi, nhưng trang gộp đó cần có thêm 02 trường
[ChuyenDi], để ghi mã các loại chuyển đi ,Gồm:
Chuyển trong nội bộ CTi từ địa fương này sang địa fương khác (C)
Chuyển hẵn ra khỏi CT (R)
Chuyển sang nghỉ hưu (H)
[NgayC] (Ngày chuyển)
Tuy nhiên khi gộp lại như vậy ta cũng cần xây dựng mới 2 trang tính để lưu những thay đổi này theo 1 cách khác sau đây:
Loại chuyển do H & R ta nên tạo ra trang tính kết cấu như trang dữ liệu & chuyển hẵn sang đó những người thuộc diện hưu trí & ra khỏi CQ (nghỉ việc cơ quan)
Còn nhóm người chu chuyển trong nội bộ ta lập danh sách riêng vối các trường như sau:
Có sanh sách sau cùng này ta mới có thể thống kê tại 1 thời điểm nào đó, số lượng nhân viên các địa fương
Còn danh sách nghỉ hưu, nghỉ việc để giúp ta rà & bỏ bớt số liệu khi fải thống kê theo các tiêu chí khác, như trình độ, nam nữ,. . . .
(2) Trang 'DuLieu' của bạn cũng cần sửa đôi điều trong 1 số trường:
+ Trường [Chức vụ] & trường [Nơi làm việc] đang bị dính chùm; Như vậy không là CSDL chuẩn;
Bạn fải tách bạch ra như sau:
Hiện bạn nhốt chung
[TABLE="width: 195"]
[TR]
[TD]NƠI LÀM VIỆC[/TD]
[/TR]
[TR]
[TD]NLV0001039 - HA NOI[/TD]
[/TR]
[TR]
[TD]NLV0001039 - HA NOI[/TD]
[/TR]
[TR]
[TD]NLV0000972 - HAI PHONG[/TD]
[/TR]
[TR]
[TD]NLV0001037 - CAN THO[/TD]
[/TR]
[/TABLE]
Mình chưa rõ các mã trước dấu fân cách là gì, nhưng cũng nên tách ra làm 2 trường
Tương tự như vậy với trường [Chức vụ] cũng nên tách ra làm 2
+ Trường [Thâm niên] không nên làm như vậy (dạng chuôi, mà chí ít nên là xài hàm trong excel để thể hiện số liệu này (có trên diễn đàn, bạn tìm xem)
+ Trường [CMND] ta không nên lấy nó làm [Mã NV], vừa dài & sắp tới lại chuyển đổi sang số gì khác rồi (Mà sự chuyển đổi này kéo dài hơn 5 năm là cái chắc). Nhưng vậy trong thời gian chờ chuyển xong là CSDL của bạn đang fá sản
Mình có đề xuất mã NV vậy:
PHP:
'
Mã NV | Tên NV'
NVH00 | Nguyễn Viết Hòa
NVH01 | Nguyễn Thị Việt Hà
NJD00 | Nguyễn Dương
NFD00 | Ngô Đức Dy
ONH00 | Ôn Lại Như Hầu
Bạn nói rất đúng, DATA này là hàng tháng mình lấy từ phần mềm quản lý nhân sự của công ty ra. Mình cũng phải chỉnh lại data để làm báo cáo. Ví dụ : NLV0001039 - HA NOI thì mã của hà nội là NLV0001039 ( 10 ký tự ), các nơi khác cũng vậy, mã tỉnh quy ước trong phần mềm là 10 ký tự đầu vừa chữ và số.
Để thực hiện hết các thống kê theo bạn iêu cầu, ta chỉ cần (xử lí) các trường như sau:
PC CHỨC VỤ NƠI LÀM VIỆC NGÀY BẮT ĐẦU LÀM VIỆC GIỚI TÍNH NGÀY SINH TRÌNH ĐỘ
Trong đó nhất thiết fải xử lí 4 trường, đó là:
1./ [ChucVu]
Nếu bạn chép hết trường này sang 1 trang tính trống & tiến hành xóa trùng cột, ta sẽ thu được 74 dòng dữ liệu;
Nhưng trong trang cần báo cáo về chức vụ chỉ có 07 trường mà thôi; đó là:
QUẢN LÝ CẤP 3 QUẢN LÝ CẤP 2 QUẢN LÝ CẤP 1 NHÂN VIÊN KỸ THUẬT NHÂN VIÊN THỐNG KÊ NHÂN VIÊN BẢO TRÌ CÔNG NHÂN
Như vậy nhất thiết bạn fải xử trường này để đưa về dạng chuẩn như iêu cầu bào cáo
2./ [PC]:Trong 1 trường (cột) không được chứa 2 loại dữ liệu;
Hiện tại là 6, 5, 4, 3, 2,1A,1B & 1C
Mà nên là 6A, 5A, . . . ,1C.
3./ [Ngày CT] & trường [Ngày Sinh] hiện trên máy mình là vừa có dạng ngày vừa có dạng chuỗi
Thường thì ta (Việt nam) nên nhập hay chỉ về dạng 'MM/DD/yyyy'; (Thậm chí có người trên diễn đàn khuyên nên xài dạng 'YYYY/mm/dd' nữa kia)
Như vậy khi trích xuất dữ liệu từ fần mền, thì bạn cần xử 4 trường này.
Trường hợp (1): Bạn có thể xài công thức để tách;
TH (2): Ta cũng có thể xài công thức để độ dài dữ liệu trong trường đều là 2;
TH (3 & 4): Nên xài hàm trong Excel hay hàm tự tạo