Template Quản Lý Nhân Sự (HR) Trên Google Sheets - Miễn Phí 2027

Trả lời nhanh: Template quản lý nhân sự trên Google Sheets gồm 6 sheet liên kết: Hồ sơ nhân viên, Chấm công, Nghỉ phép, Đào tạo, KPI và Dashboard; dùng VLOOKUP, COUNTIFS, DATEDIF để tự tính, dropdown bằng Data Validation, tô màu cảnh báo hợp đồng sắp hết hạn và Apps Script gửi email nhắc, báo cáo tháng. Phù hợp doanh nghiệp khoảng 5–100 nhân viên.
Tại sao dùng Google Sheets quản lý nhân sự?
Quản lý nhân sự là một trong những công việc phức tạp nhất của doanh nghiệp - từ theo dõi hồ sơ nhân viên, chấm công, nghỉ phép, đến đánh giá KPI và quản lý hợp đồng lao động. Nhiều doanh nghiệp nhỏ và vừa (SMEs) tại Việt Nam đang tìm kiếm giải pháp quản lý nhân sự hiệu quả nhưng không muốn đầu tư hàng chục triệu đồng cho phần mềm HR chuyên dụng như SAP SuccessFactors, BambooHR hay Base HRM.
Google Sheets là giải pháp hoàn hảo cho các doanh nghiệp từ 5-100 nhân viên. Với ưu điểm miễn phí, dễ sử dụng, cộng tác realtime và khả năng tùy chỉnh cao, Google Sheets có thể thay thế hoàn toàn các phần mềm HR cơ bản với chi phí bằng 0. Thực tế, nhiều doanh nghiệp nhỏ vẫn quản lý nhân sự bằng Excel hoặc Google Sheets - nhưng thường chưa có template chuẩn, dẫn đến sai sót và mất thời gian.
Bài viết này sẽ cung cấp cho bạn một template quản lý nhân sự hoàn chỉnh với 6 sheets, đầy đủ công thức tự động, data validation, conditional formatting và cả Apps Script tự động hóa - tất cả đều miễn phí và sẵn sàng sử dụng ngay.
Template này bao gồm:
- 6 sheets liên kết với nhau: Hồ sơ NV, Chấm công, Nghỉ phép, Đào tạo, KPI, Dashboard
- 15+ công thức tự động: VLOOKUP, COUNTIFS, DATEDIF, SUMIFS, IF lồng nhau
- Data Validation: Dropdown phòng ban, chức vụ, loại phép, trạng thái
- Conditional Formatting: Cảnh báo hợp đồng hết hạn, NV mới, đi muộn quá nhiều
- Apps Script: Tự động gửi email nhắc hợp đồng sắp hết, tính phép năm, báo cáo tháng
- Mẫu data 10 nhân viên để bạn tham khảo cấu trúc và test công thức
So sánh Google Sheets với phần mềm HR chuyên dụng
| Tiêu chí | Google Sheets | Phần mềm HR (Base, SAP...) |
|---|---|---|
| Chi phí | Miễn phí | 500K - 5M/thang |
| Quy mô phù hợp | 5-100 nhân viên | 50-10,000+ nhân viên |
| Thời gian setup | 30 phút (copy template) | 1-4 tuan |
| Tùy chỉnh | Tự do hoàn toàn | Giới hạn theo plan |
| Cộng tác | Realtime (nhiều người cùng edit) | Có nhưng cần license |
| Chấm công tự động | Thủ công/bán tự động | Tự động (máy chấm công) |
| Báo cáo | Cần tự tạo công thức | Có sẵn, đa dạng |
| Bảo mật | Google security + chia sẻ giới hạn | Enterprise-grade |
Kết luận: Google Sheets phù hợp khi...
- Doanh nghiệp có dưới 100 nhân viên
- Ngân sách cho HR software còn hạn chế hoặc bằng 0
- Cần giải pháp linh hoạt, tùy chỉnh theo đặc thù công ty
- Team HR quen dùng Google Sheets/Excel (không cần đào tạo lại)
- Chưa cần tích hợp máy chấm công, payroll tự động
Phần 2: Cấu trúc 6 Sheets trong Template
Template này gồm 6 sheets được thiết kế để liên kết với nhau qua các công thức VLOOKUP và COUNTIFS. Dữ liệu nhập ở sheet này sẽ tự động cập nhật ở các sheet khác và Dashboard tổng hợp.
Lưu ý: đặt tên các tab đúng như trong công thức và Apps Script, không dấu: Ho So NV, Cham Cong, Nghi Phep, Dao Tao, KPI, Dashboard. Các giá trị dropdown mà code dùng để so sánh (như Dang lam viec, Phep nam, Da duyet) cũng cần giữ đúng chữ không dấu.
Sheet 1: Hồ Sơ Nhân Viên (Master Data)
Đây là sheet chính chứa toàn bộ thông tin nhân viên. Tất cả các sheet khác đều tham chiếu về sheet này qua Mã NV. Gồm 15 cột:
| STT | Tên cột | Kiểu dữ liệu | Ghi chú |
|---|---|---|---|
| 1 | Mã NV | Text | VD: NV001, NV002... (unique, không trùng) |
| 2 | Họ tên | Text | Họ và tên đầy đủ |
| 3 | Ngày sinh | Date | Format: dd/mm/yyyy |
| 4 | CCCD | Text | Số căn cước công dân (12 số) |
| 5 | Địa chỉ | Text | Địa chỉ thường trú |
| 6 | SDT | Text | Số điện thoại (format text để giữ số 0 đầu) |
| 7 | Email cá nhân hoặc công ty | ||
| 8 | Phòng ban | Dropdown | Kinh doanh, Ke toan, IT, Marketing, Nhan su, San xuat |
| 9 | Chức vụ | Dropdown | Giám đốc, Trưởng phòng, Phó phòng, Nhân viên, Thực tập |
| 10 | Ngày vào làm | Date | Format: dd/mm/yyyy |
| 11 | Loại HĐ | Dropdown | Thử việc, 1 năm, 2 năm, Không thời hạn |
| 12 | Ngày hết HĐ | Date | Tính tự động theo loại HĐ. Để trống nếu Không thời hạn. |
| 13 | Luong | Number | Lương gross (VND). Format: #,##0 |
| 14 | Tài khoản ngân hàng | Text | Số TK + tên ngân hàng. VD: 1234567890 - Vietcombank |
| 15 | Tình trạng | Dropdown | Dang lam viec, Nghi thai san, Nghi khong luong, Da nghi viec |
Sheet 2: Chấm Công Tổng Hợp
Sheet chấm công theo tháng, tổng hợp số ngày công, nghỉ phép, OT của từng nhân viên. Gồm 8 cột:
| Cot | Kieu | Mô tả |
|---|---|---|
| Thang | Text | VD: 01/2026, 02/2026 |
| Mã NV | Text | Liên kết với sheet Ho So NV qua VLOOKUP |
| Họ tên | Formula | =VLOOKUP(B2,'Ho So NV'!A:B,2,FALSE) - Tự động điền |
| Ngày công | Number | Số ngày đi làm thực tế trong tháng (0-31) |
| Nghỉ phép | Number | Số ngày nghỉ phép có lương |
| Nghỉ KL | Number | Số ngày nghỉ không lương |
| OT (giờ) | Number | Tổng số giờ làm thêm (overtime) |
| Đi muộn (lần) | Number | Số lần đi muộn trong tháng |
Sheet 3: Nghỉ Phép
Quản lý chi tiết từng đơn xin nghỉ phép của nhân viên, từ nghỉ phép năm, nghỉ ốm, đến nghỉ việc riêng. Gồm 9 cột:
| Cot | Mô tả |
|---|---|
| Mã NV | Liên kết Ho So NV |
| Họ tên | =VLOOKUP từ Ho So NV |
| Loại phép | Dropdown: Phep nam, Nghi om, Viec rieng, Thai san, Khong luong |
| Ngày bắt đầu | Date format dd/mm/yyyy |
| Ngày kết thúc | Date format dd/mm/yyyy |
| Số ngày | =E2-D2+1 (tự động tính) |
| Lý do | Text tự do |
| Người duyệt | Tên trưởng phòng/quản lý |
| Trạng thái | Dropdown: Cho duyet, Da duyet, Tu choi, Da huy |
Sheet 4: Đào Tạo
Theo dõi các khóa đào tạo của nhân viên - một phần quan trọng của quản lý nhân sự hiện đại. Gồm 6 cột:
| Cot | Mô tả |
|---|---|
| Mã NV | Liên kết Ho So NV |
| Họ tên | =VLOOKUP từ Ho So NV |
| Khóa đào tạo | Tên khóa: Kỹ năng mềm, An toàn LĐ, Nghiệp vụ chuyên môn, Ngoại ngữ... |
| Ngày đào tạo | Date format dd/mm/yyyy |
| Kết quả | Dropdown: Dat, Khong dat, Dang hoc |
| Chứng chỉ | Tên chứng chỉ đạt được (nếu có) |
Sheet 5: KPI & Đánh Giá
Đánh giá hiệu suất nhân viên theo từng kỳ (tháng/quý/năm). Gồm 10 cột:
| Cot | Mô tả |
|---|---|
| Mã NV | Liên kết Ho So NV |
| Họ tên | =VLOOKUP từ Ho So NV |
| Kỳ đánh giá | Dropdown: Tháng 1, Tháng 2..., Quý 1, Quý 2..., Cả năm |
| KPI 1: Hoàn thành CV | Điểm 1-10 - Mức độ hoàn thành công việc được giao |
| KPI 2: Chất lượng | Điểm 1-10 - Chất lượng công việc |
| KPI 3: Teamwork | Điểm 1-10 - Làm việc nhóm, hỗ trợ đồng nghiệp |
| KPI 4: Sáng tạo | Điểm 1-10 - Đề xuất ý tưởng, cải tiến quy trình |
| KPI 5: Kỷ luật | Điểm 1-10 - Đi làm đúng giờ, tuân thủ nội quy |
| Điểm TB | =AVERAGE(D2:H2) - Trung bình 5 KPI |
| Xếp loại | =IF(I2>=9,"Xuat sac",IF(I2>=7,"Tot",IF(I2>=5,"Dat",IF(I2>=3,"Can cai thien","Khong dat")))) |
Sheet 6: Dashboard (Tổng hợp tự động)
Dashboard tự động tổng hợp dữ liệu từ 5 sheet còn lại, hiển thị các chỉ số quan trọng nhất giúp HR và ban lãnh đạo ra quyết định nhanh chóng.
Dashboard bao gồm:
Tổng quan nhân sự
- Tổng số nhân viên đang làm việc
- NV mới trong tháng
- NV nghỉ việc trong tháng
- Tỷ lệ biến động nhân sự (%)
Phân bổ theo phòng ban
- Số NV mỗi phòng ban
- Tỷ lệ phần trăm
- Biểu đồ tròn tự động
Cảnh báo hợp đồng
- HĐ hết hạn trong 30 ngày
- HĐ hết hạn trong 60 ngày
- HĐ hết hạn trong 90 ngày
- Danh sách tên NV cần gia hạn
Thống kê chấm công
- Tổng ngày công bình quân
- Tổng giờ OT trong tháng
- Số NV đi muộn > 3 lần/tháng
- Tổng nghỉ phép đã dùng
Phần 3: Công Thức Tự Động - Chi tiết từng công thức
Đây là phần quan trọng nhất - các công thức giúp template hoạt động tự động. Bạn chỉ cần nhập dữ liệu ở 1 nơi, các sheet khác sẽ tự cập nhật.
3.1 VLOOKUP - Liên kết sheets
VLOOKUP được dùng để lấy thông tin từ sheet Ho So NV sang các sheet khác dựa trên Mã NV:
// Lay Ho ten tu Ma NV (dung o tat ca cac sheet con)
=VLOOKUP(A2, 'Ho So NV'!A:B, 2, FALSE)
// Lay Phong ban
=VLOOKUP(A2, 'Ho So NV'!A:H, 8, FALSE)
// Lay Chuc vu
=VLOOKUP(A2, 'Ho So NV'!A:I, 9, FALSE)
// Lay Luong (de tinh luong thuc nhan)
=VLOOKUP(A2, 'Ho So NV'!A:M, 13, FALSE)
// Lay Email (de gui email thong bao)
=VLOOKUP(A2, 'Ho So NV'!A:G, 7, FALSE)
// Neu khong tim thay Ma NV, hien "Khong tim thay"
=IFERROR(VLOOKUP(A2, 'Ho So NV'!A:B, 2, FALSE), "Khong tim thay")
3.2 COUNTIFS - Thống kê Dashboard
// Dem so NV dang lam viec
=COUNTIFS('Ho So NV'!O:O, "Dang lam viec")
// Dem NV theo phong ban
=COUNTIFS('Ho So NV'!H:H, "Kinh doanh", 'Ho So NV'!O:O, "Dang lam viec")
=COUNTIFS('Ho So NV'!H:H, "Ke toan", 'Ho So NV'!O:O, "Dang lam viec")
=COUNTIFS('Ho So NV'!H:H, "IT", 'Ho So NV'!O:O, "Dang lam viec")
=COUNTIFS('Ho So NV'!H:H, "Marketing", 'Ho So NV'!O:O, "Dang lam viec")
=COUNTIFS('Ho So NV'!H:H, "Nhan su", 'Ho So NV'!O:O, "Dang lam viec")
=COUNTIFS('Ho So NV'!H:H, "San xuat", 'Ho So NV'!O:O, "Dang lam viec")
// Dem NV moi trong thang (ngay vao lam trong thang hien tai)
=COUNTIFS('Ho So NV'!J:J, ">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1), 'Ho So NV'!J:J, "<="&EOMONTH(TODAY(),0))
// Dem don nghi phep cho duyet
=COUNTIFS('Nghi Phep'!I:I, "Cho duyet")
// Dem NV di muon > 3 lan trong thang
=COUNTIFS('Cham Cong'!A:A, TEXT(TODAY(),"MM/YYYY"), 'Cham Cong'!H:H, ">"&3)
3.3 DATEDIF - Tính thâm niên và tuổi
// Tinh tham nien (so nam lam viec)
=DATEDIF(J2, TODAY(), "Y") & " nam " & DATEDIF(J2, TODAY(), "YM") & " thang"
// Ket qua: "3 nam 5 thang"
// Tinh tuoi tu ngay sinh
=DATEDIF(C2, TODAY(), "Y")
// Ket qua: 28
// Tinh so ngay con lai den khi het hop dong
=IF(L2="", "KTH", IF(L2-TODAY()<0, "DA HET HAN", L2-TODAY() & " ngay"))
// KTH = Khong thoi han
// DA HET HAN neu ngay het HD da qua
// "45 ngay" neu con 45 ngay
// Tinh so ngay phep con lai trong nam
// (12 ngay/nam, tru di so ngay da nghi loai "Phep nam" va "Da duyet")
=12 - SUMPRODUCT(
('Nghi Phep'!A:A=A2) *
('Nghi Phep'!C:C="Phep nam") *
('Nghi Phep'!I:I="Da duyet") *
('Nghi Phep'!F:F)
)
3.4 Công thức tính lương thực nhận
// Luong co ban theo ngay cong (26 ngay cong tieu chuan)
=M2/26 * D3
// M2: Luong gross (tu Ho So NV)
// D3: So ngay cong thuc te (tu Cham Cong)
// Tien OT (150% luong gio binh thuong, 200% cuoi tuan, 300% le)
// Don gian hoa: OT binh thuong 150%
=M2/26/8 * G3 * 1.5
// G3: So gio OT
// Tru nghi khong luong
=M2/26 * F3
// F3: So ngay nghi khong luong
// Luong thuc nhan (don gian hoa, chua tru BHXH/thue)
=M2/26 * D3 + M2/26/8 * G3 * 1.5 - M2/26 * F3
// Phuong an nang cao hon: co BHXH, thue TNCN
// Luong dong BHXH = Luong gross (gioi han tran 36,000,000)
// NLĐ dong: 10.5% (BHXH 8% + BHYT 1.5% + BHTN 1%)
// Giam tru ban than: 11,000,000
// Giam tru phu thuoc: 4,400,000/nguoi
// Thue TNCN: theo bieu thue luy tien
3.5 Công thức cảnh báo hợp đồng sắp hết
// Danh sach NV co HD het han trong 30 ngay toi
=FILTER(
'Ho So NV'!A:B,
('Ho So NV'!L:L >= TODAY()) *
('Ho So NV'!L:L <= TODAY()+30) *
('Ho So NV'!O:O = "Dang lam viec")
)
// Dem so HD het han trong 30/60/90 ngay
=COUNTIFS('Ho So NV'!L:L, ">="&TODAY(), 'Ho So NV'!L:L, "<="&TODAY()+30, 'Ho So NV'!O:O, "Dang lam viec")
=COUNTIFS('Ho So NV'!L:L, ">="&TODAY(), 'Ho So NV'!L:L, "<="&TODAY()+60, 'Ho So NV'!O:O, "Dang lam viec")
=COUNTIFS('Ho So NV'!L:L, ">="&TODAY(), 'Ho So NV'!L:L, "<="&TODAY()+90, 'Ho So NV'!O:O, "Dang lam viec")
// Ty le bien dong nhan su thang nay (%)
// = (NV moi + NV nghi) / Tong NV * 100
=((COUNTIFS('Ho So NV'!J:J,">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1),'Ho So NV'!J:J,"<="&EOMONTH(TODAY(),0)) + COUNTIFS('Ho So NV'!O:O,"Da nghi viec",'Ho So NV'!J:J,">="&DATE(YEAR(TODAY()),MONTH(TODAY()),1))) / COUNTIFS('Ho So NV'!O:O,"Dang lam viec") * 100
Phần 4: Data Validation - Dropdown & Ràng buộc dữ liệu
Data Validation giúp đảm bảo dữ liệu nhập vào đúng format, giảm sai sót và giúp thống kê chính xác. Sau đây là các validation cần thiết cho từng sheet:
4.1 Cách tạo Data Validation
- Chọn vùng ô cần validation (VD: cột H - Phòng ban)
- Vào menu Data → Data validation
- Chon Criteria: "List of items" hoac "List from a range"
- Nhập danh sách (cách nhau bởi dấu phẩy) hoặc chọn range
- Tick "Show dropdown list in cell"
- Chọn "Reject input" để không cho nhập ngoài danh sách
- Click Save
4.2 Danh sách Dropdown cho từng cột
| Sheet | Cot | Danh sách Dropdown |
|---|---|---|
| Ho So NV | Phòng ban | Kinh doanh, Ke toan, IT, Marketing, Nhan su, San xuat |
| Ho So NV | Chức vụ | Giám đốc, Trưởng phòng, Phó phòng, Nhân viên, Thực tập |
| Ho So NV | Loại HĐ | Thử việc, 1 năm, 2 năm, Không thời hạn |
| Ho So NV | Tình trạng | Dang lam viec, Nghi thai san, Nghi khong luong, Da nghi viec |
| Nghi Phep | Loại phép | Phep nam, Nghi om, Viec rieng, Thai san, Khong luong |
| Nghi Phep | Trạng thái | Cho duyet, Da duyet, Tu choi, Da huy |
| Dao Tao | Kết quả | Dat, Khong dat, Dang hoc |
| KPI | Kỳ đánh giá | Tháng 1, Tháng 2, ..., Tháng 12, Quý 1, Quý 2, Quý 3, Quý 4, Cả năm |
Mẹo: Dùng sheet ẩn làm nguồn dropdown
Thay vì nhập trực tiếp "List of items", hãy tạo 1 sheet tên "DanhMuc" chứa tất cả các danh sách (phòng ban, chức vụ, loại HĐ...). Khi cần thay đổi, chỉ cần sửa ở sheet DanhMuc - tất cả dropdown sẽ tự động cập nhật. Dùng "List from a range" trỏ về sheet DanhMuc.
Phần 5: Conditional Formatting - Tô màu tự động
Conditional Formatting giúp bạn nhanh chóng nhận ra các mục cần chú ý bằng cách tự động tô màu cells theo điều kiện. Sau đây là 5 rule quan trọng nhất cho template HR:
Rule 1: Hợp đồng sắp hết hạn (Vàng) - trong 30 ngày
- Chọn cột L (Ngày hết HĐ) trên sheet Ho So NV
- Menu Format → Conditional formatting
- Chon "Custom formula is"
- Nhap:
=AND(L2-TODAY()>0, L2-TODAY()<=30, L2<>"") - Màu nền: Vàng nhạt (#FFF9C4)
- Click Done
Rule 2: Hợp đồng đã quá hạn (Đỏ) - hết hạn rồi chưa gia hạn
- Chọn cột L (Ngày hết HĐ) trên sheet Ho So NV
- Custom formula:
=AND(L2<TODAY(), L2<>"") - Màu nền: Đỏ nhạt (#FFCDD2)
- Text: Đỏ đậm (#C62828)
Rule 3: Nhân viên mới (Xanh) - vào làm chưa quá 3 tháng
- Chọn cột J (Ngày vào làm)
- Custom formula:
=AND(TODAY()-J2<=90, J2<>"") - Màu nền: Xanh lá nhạt (#C8E6C9)
Rule 4: Đi muộn quá nhiều (Đỏ) - trên 3 lần/tháng
- Chọn cột H (Đi muộn) trên sheet Cham Cong
- Custom formula:
=H2>3 - Màu nền: Cam nhạt (#FFE0B2)
- Text: Cam đậm (#E65100)
Rule 5: KPI xếp loại "Khong dat" (Đỏ đậm)
- Chọn cột J (Xếp loại) trên sheet KPI
- Custom formula:
=J2="Khong dat" - Màu nền: Do (#EF5350), Text: Trang
- Thêm 1 rule nữa cho "Xuat sac":
=J2="Xuat sac"- Màu xanh lá (#4CAF50), Text trắng
Phần 6: Apps Script - Tự động hóa
Các đoạn Apps Script dưới đây giúp tự động hóa 3 tác vụ quan trọng nhất: gửi email nhắc hợp đồng sắp hết, tính phép năm còn lại, và tạo báo cáo tháng tự động.
6.1 Tự động gửi email nhắc hợp đồng sắp hết hạn
// Script: Gui email nhac HD sap het han (30 ngay toi)
// Dat trigger chay moi sang 8h: Edit > Current project triggers > Add trigger
function notifyExpiringContracts() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Ho So NV');
var data = sheet.getDataRange().getValues();
var today = new Date();
var thirtyDaysLater = new Date(today.getTime() + 30 * 24 * 60 * 60 * 1000);
var expiringList = [];
// Duyet tu dong 2 (bo header)
for (var i = 1; i < data.length; i++) {
var maNV = data[i][0]; // Cot A: Ma NV
var hoTen = data[i][1]; // Cot B: Ho ten
var ngayHetHD = data[i][11]; // Cot L: Ngay het HD
var tinhTrang = data[i][14]; // Cot O: Tinh trang
// Chi xet NV dang lam viec va co ngay het HD
if (tinhTrang !== 'Dang lam viec' || !ngayHetHD) continue;
var hetHanDate = new Date(ngayHetHD);
if (hetHanDate >= today && hetHanDate <= thirtyDaysLater) {
var soNgayConLai = Math.ceil((hetHanDate - today) / (24 * 60 * 60 * 1000));
expiringList.push({
maNV: maNV,
hoTen: hoTen,
ngayHet: Utilities.formatDate(hetHanDate, 'Asia/Ho_Chi_Minh', 'dd/MM/yyyy'),
soNgay: soNgayConLai,
});
}
}
if (expiringList.length === 0) {
Logger.log('Khong co HD nao sap het han trong 30 ngay toi');
return;
}
// Tao noi dung email
var emailBody = 'CANH BAO HOP DONG SAP HET HAN
';
emailBody += 'Ngay kiem tra: ' + Utilities.formatDate(today, 'Asia/Ho_Chi_Minh', 'dd/MM/yyyy') + '
';
emailBody += 'So HD sap het: ' + expiringList.length + '
';
emailBody += '-------------------------------------------
';
for (var j = 0; j < expiringList.length; j++) {
var nv = expiringList[j];
emailBody += (j + 1) + '. ' + nv.maNV + ' - ' + nv.hoTen + '
';
emailBody += ' Ngay het HD: ' + nv.ngayHet + ' (con ' + nv.soNgay + ' ngay)
';
}
emailBody += '-------------------------------------------
';
emailBody += 'Vui long lien he nhan vien de thoa thuan gia han hop dong.
';
emailBody += 'Link file: ' + ss.getUrl();
// Gui email cho HR va quan ly
var hrEmail = 'hr@congty.com'; // Thay bang email thuc
MailApp.sendEmail({
to: hrEmail,
subject: '[HR] Canh bao: ' + expiringList.length + ' hop dong sap het han',
body: emailBody,
});
Logger.log('Da gui email canh bao ' + expiringList.length + ' HD sap het han');
}
6.2 Tự động tính phép năm còn lại
// Script: Tinh va cap nhat so ngay phep con lai cua moi NV
// Chay vao ngay 1 hang thang
function updateLeaveBalance() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var hoSoSheet = ss.getSheetByName('Ho So NV');
var nghiPhepSheet = ss.getSheetByName('Nghi Phep');
var currentYear = new Date().getFullYear();
var hoSoData = hoSoSheet.getDataRange().getValues();
var nghiPhepData = nghiPhepSheet.getDataRange().getValues();
// Tinh phep nam theo luat LĐ VN:
// - 12 ngay/nam (lam viec binh thuong)
// - Cong them 1 ngay cho moi 5 nam tham nien
// - NV chua du 12 thang: tinh theo ty le thang
for (var i = 1; i < hoSoData.length; i++) {
var maNV = hoSoData[i][0];
var ngayVaoLam = new Date(hoSoData[i][9]); // Cot J
var tinhTrang = hoSoData[i][14]; // Cot O
if (tinhTrang !== 'Dang lam viec') continue;
// Tinh tham nien (nam)
var thamNien = (new Date() - ngayVaoLam) / (365.25 * 24 * 60 * 60 * 1000);
var thamNienNam = Math.floor(thamNien);
// Tinh so ngay phep nam duoc huong
var phepNamDuocHuong = 12 + Math.floor(thamNienNam / 5);
// Neu chua du 12 thang, tinh ty le
if (thamNien < 1) {
var soThangLamViec = Math.floor(thamNien * 12);
phepNamDuocHuong = Math.round(12 * soThangLamViec / 12);
}
// Tinh so ngay da nghi (loai "Phep nam" + "Da duyet" trong nam nay)
var daNghi = 0;
for (var j = 1; j < nghiPhepData.length; j++) {
if (nghiPhepData[j][0] === maNV &&
nghiPhepData[j][2] === 'Phep nam' &&
nghiPhepData[j][8] === 'Da duyet') {
var ngayBatDau = new Date(nghiPhepData[j][3]);
if (ngayBatDau.getFullYear() === currentYear) {
daNghi += Number(nghiPhepData[j][5]) || 0;
}
}
}
var phepConLai = phepNamDuocHuong - daNghi;
Logger.log(maNV + ': Duoc huong ' + phepNamDuocHuong + ' ngay, da nghi ' + daNghi + ', con lai ' + phepConLai);
}
}
// Tao menu tuy chinh de chay thu cong
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('HR Tools')
.addItem('Kiem tra HD sap het', 'notifyExpiringContracts')
.addItem('Cap nhat phep nam', 'updateLeaveBalance')
.addItem('Tao bao cao thang', 'generateMonthlyReport')
.addToUi();
}
6.3 Tự động tạo báo cáo tháng
// Script: Tu dong tao bao cao tong hop thang
function generateMonthlyReport() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var hoSoSheet = ss.getSheetByName('Ho So NV');
var chamCongSheet = ss.getSheetByName('Cham Cong');
var nghiPhepSheet = ss.getSheetByName('Nghi Phep');
var today = new Date();
var thang = today.getMonth() + 1;
var nam = today.getFullYear();
var tenThang = 'Thang ' + thang + '/' + nam;
var hoSoData = hoSoSheet.getDataRange().getValues();
// Thong ke tong quan
var tongNV = 0;
var nvMoi = 0;
var nvNghi = 0;
var phongBanCount = {};
for (var i = 1; i < hoSoData.length; i++) {
var tinhTrang = hoSoData[i][14];
var ngayVaoLam = new Date(hoSoData[i][9]);
var phongBan = hoSoData[i][7];
if (tinhTrang === 'Dang lam viec') {
tongNV++;
if (!phongBanCount[phongBan]) phongBanCount[phongBan] = 0;
phongBanCount[phongBan]++;
// NV moi trong thang
if (ngayVaoLam.getMonth() + 1 === thang && ngayVaoLam.getFullYear() === nam) {
nvMoi++;
}
}
if (tinhTrang === 'Da nghi viec') {
nvNghi++;
}
}
// Tao bao cao
var report = 'BAO CAO NHAN SU ' + tenThang.toUpperCase() + '
';
report += '==========================================
';
report += '1. TONG QUAN
';
report += ' - Tong nhan vien dang lam: ' + tongNV + '
';
report += ' - Nhan vien moi trong thang: ' + nvMoi + '
';
report += ' - Nhan vien nghi viec: ' + nvNghi + '
';
report += ' - Ty le bien dong: ' + ((nvMoi + nvNghi) / tongNV * 100).toFixed(1) + '%
';
report += '2. PHAN BO THEO PHONG BAN
';
var phongBanKeys = Object.keys(phongBanCount);
for (var k = 0; k < phongBanKeys.length; k++) {
var pb = phongBanKeys[k];
report += ' - ' + pb + ': ' + phongBanCount[pb] + ' nguoi (' + (phongBanCount[pb] / tongNV * 100).toFixed(1) + '%)
';
}
report += '
==========================================
';
report += 'Bao cao tu dong tao luc: ' + Utilities.formatDate(today, 'Asia/Ho_Chi_Minh', 'dd/MM/yyyy HH:mm');
// Gui email bao cao
MailApp.sendEmail({
to: 'hr@congty.com',
subject: '[HR] Bao cao nhan su ' + tenThang,
body: report,
});
Logger.log('Da tao va gui bao cao thang ' + thang);
Logger.log(report);
}
Cách đặt Trigger tự động chạy script
- Trong Apps Script Editor, click biểu tượng đồng hồ (Triggers) ở thanh bên trái
- Click "+ Add Trigger"
- Chọn function: notifyExpiringContracts
- Event source: Time-driven
- Type: Day timer → Chọn 8am to 9am
- Click Save
- Làm tương tự cho generateMonthlyReport: chạy vào ngày 1 hàng tháng
Phần 7: Mẫu Data 10 Nhân Viên
Để bạn hiểu rõ cấu trúc template và test công thức, đây là mẫu data 10 nhân viên mẫu:
| Mã NV | Họ tên | Phòng ban | Chức vụ | Ngày vào làm | Loại HĐ | Luong | Tình trạng |
|---|---|---|---|---|---|---|---|
| NV001 | Nguyễn Văn An | Kinh doanh | Trưởng phòng | 15/03/2020 | Không thời hạn | 25,000,000 | Dang lam viec |
| NV002 | Trần Thị Bình | Ke toan | Nhân viên | 01/06/2021 | 2 nam | 15,000,000 | Dang lam viec |
| NV003 | Lê Minh Cường | IT | Nhân viên | 10/01/2022 | 2 nam | 20,000,000 | Dang lam viec |
| NV004 | Phạm Thu Dung | Marketing | Phó phòng | 20/08/2019 | Không thời hạn | 22,000,000 | Dang lam viec |
| NV005 | Hoàng Văn Em | San xuat | Nhân viên | 05/04/2023 | 1 nam | 12,000,000 | Dang lam viec |
| NV006 | Võ Thị Phương | Nhan su | Trưởng phòng | 12/02/2018 | Không thời hạn | 28,000,000 | Dang lam viec |
| NV007 | Đặng Quốc Gia | Kinh doanh | Nhân viên | 18/09/2024 | 1 nam | 13,000,000 | Dang lam viec |
| NV008 | Bùi Thị Hương | Ke toan | Nhân viên | 01/12/2025 | Thử việc | 10,000,000 | Dang lam viec |
| NV009 | Ngô Đức Tài | IT | Phó phòng | 01/07/2020 | Không thời hạn | 30,000,000 | Dang lam viec |
| NV010 | Lý Thị Kim | Marketing | Thực tập | 15/01/2026 | Thử việc | 7,000,000 | Dang lam viec |
Mẫu data trên bao gồm các trường hợp điển hình:
- NV001, NV004, NV006, NV009: HĐ Không thời hạn (nhân viên lâu năm, level trưởng phòng trở lên)
- NV002, NV003: HĐ 2 năm (sắp hết hạn - để test cảnh báo)
- NV005, NV007: HĐ 1 năm (nhân viên mới hơn)
- NV008, NV010: Thử việc (mới vào, lương thấp hơn)
- Đa dạng phòng ban: 6 phòng ban khác nhau
- Đa dạng chức vụ: từ Thực tập đến Trưởng phòng
- Mức lương: từ 7M (thực tập) đến 30M (phó phòng IT)
Phần 8: Mẹo sử dụng template hiệu quả
1. Bảo vệ sheet cấu trúc
Sau khi setup xong template, bảo vệ (protect) các ô chứa công thức và header để tránh nhân viên vô tình xóa. Vào Data → Protected sheets and ranges → Chọn vùng cần bảo vệ → Chỉ cho Admin edit.
2. Tạo sheet "DanhMuc" ẩn
Tạo sheet riêng chứa tất cả danh sách dropdown (phòng ban, chức vụ, loại HĐ...). Click chuột phải vào tab → "Hide sheet". Sheet vẫn hoạt động cho Data Validation nhưng người dùng không nhìn thấy, tránh sửa nhầm.
3. Phân quyền truy cập
Không share toàn bộ file cho mọi người. Trưởng phòng chỉ cần xem data phòng mình - tạo filtered view riêng. Nhân viên không nên truy cập sheet Ho So NV (có thông tin lương). Chỉ HR và Ban Giám Đốc có quyền edit toàn bộ.
4. Backup định kỳ
Dù Google Sheets tự động lưu version history, vẫn nên tạo bản sao backup mỗi tháng: File → Make a copy → Đặt tên "HR_Backup_02_2026". Lưu vào folder riêng trên Drive.
5. In ấn và báo cáo
Khi cần in báo cáo, chọn vùng dữ liệu → File → Print → Chọn "Selected cells". Dat landscape orientation cho các bảng nhiều cột. Dùng Ctrl+P để preview trước khi in.
Phần 9: FAQ - Câu hỏi thường gặp
Template này phù hợp cho công ty bao nhiêu người?
Template hoạt động tốt nhất với 5-100 nhân viên. Với quy mô lớn hơn, Google Sheets có thể chậm khi có nhiều công thức tính toán trên hàng nghìn dòng. Nếu công ty có trên 100 NV, bạn nên cân nhắc phần mềm HR chuyên dụng hoặc nâng cấp lên Google Sheets kết hợp BigQuery để xử lý dữ liệu lớn.
Làm sao tích hợp với máy chấm công?
Hầu hết máy chấm công đều hỗ trợ export dữ liệu ra file CSV/Excel. Bạn có thể import file này vào sheet Cham Cong hàng tháng. Hoặc nếu máy chấm công có API (như ZKTeco, Ronald Jack), bạn có thể viết Apps Script gọi API để tự động đồng bộ dữ liệu chấm công vào Google Sheets mỗi ngày.
Có thể tính lương trên Google Sheets không?
Có, nhưng chỉ nên tính lương cơ bản (lương theo ngày công, trừ nghỉ KL, cộng OT). Việc tính BHXH, thuế TNCN theo biểu lũy tiến 7 bậc khá phức tạp trên Sheets và dễ sai. Nếu cần tính lương chính xác, nên dùng phần mềm chuyên dụng hoặc thêm sheet tính lương riêng với công thức chuyên sâu hơn.
Làm sao bảo mật thông tin lương của nhân viên?
Có 3 cách: (1) Protected ranges: Bảo vệ cột Lương chỉ cho HR và CEO xem. (2) Tách sheet riêng: Để thông tin lương ở 1 sheet riêng, hide sheet đó và chỉ share cho người có quyền. (3) File riêng: Tạo file Google Sheets riêng chỉ chứa thông tin lương, liên kết với file chính qua IMPORTRANGE. Chỉ HR có quyền truy cập file lương.
Có thể dùng trên điện thoại không?
Co, Google Sheets có app trên cả iOS và Android. Tuy nhiên, trải nghiệm trên điện thoại không tốt bằng máy tính do màn hình nhỏ và bảng nhiều cột. Khuyến nghị: Dùng điện thoại để xem nhanh Dashboard và duyệt đơn nghỉ phép. Dùng máy tính để nhập liệu và chỉnh sửa.
Tổng kết
Template quản lý nhân sự trên Google Sheets là giải pháp miễn phí, nhanh chóng và hiệu quả cho các doanh nghiệp nhỏ và vừa. Với 6 sheets liên kết, công thức tự động, conditional formatting và Apps Script, bạn có thể:
- Quản lý hồ sơ nhân viên tập trung, dễ tìm kiếm
- Theo dõi chấm công, nghỉ phép chính xác
- Đánh giá KPI nhân viên khách quan, có hệ thống
- Nhan cảnh báo tự động khi hợp đồng sắp hết hạn
- Xem Dashboard tổng hợp để ra quyết định nhanh
- Tự động gửi báo cáo hàng tháng qua email
Cách sử dụng template:
- Tạo Google Sheets mới và đặt tên "Quản Lý Nhân Sự 2026"
- Tạo 6 sheets theo cấu trúc đã hướng dẫn (Ho So NV, Cham Cong, Nghi Phep, Dao Tao, KPI, Dashboard)
- Nhập header và thiết lập Data Validation (dropdown)
- Nhập công thức VLOOKUP, COUNTIFS, DATEDIF theo hướng dẫn
- Thiết lập Conditional Formatting (5 rules đã hướng dẫn)
- Copy 3 đoạn Apps Script vào Script Editor (Extensions → Apps Script)
- Nhập data thử (dùng mẫu 10 NV bên trên) để test công thức
- Share file cho team HR với quyền phù hợp
Nếu bạn muốn tham khảo thêm các template khác cho Google Sheets, đọc bài 15 Template Google Sheets Miễn Phí Cho Doanh Nghiệp Nhỏ hoac Template Quản Lý Kho Hàng Hoàn Chỉnh.
Bạn cần giải pháp nhân sự chuyên nghiệp hơn?
Khi doanh nghiệp phát triển và cần nhiều tính năng nâng cao hơn (chấm công tự động, tính lương chính xác, quản lý tuyển dụng...), Phần mềm quản lý nhân sự và tính lương của SheetStore làm sẵn các phần đó, chạy ngay trên Google Sheets của bạn:
- Phân quyền Admin, HR, Nhân viên - mỗi người chỉ thấy phần việc của mình
- Quản lý nghỉ phép theo loại phép, số ngày phép còn lại và trạng thái duyệt
- Tính lương và gửi phiếu lương qua email
- Báo cáo nhân sự: chi phí lương theo tháng, theo phòng ban, lượt đi muộn
💡 Giải pháp sẵn có cho bạn
Không muốn tự làm? Dùng ngay Phần Mềm Quản Lý Nhân Sự & Tính Lương — chấm công GPS, tính lương 1-click, thuế TNCN lũy tiến 7 bậc, chạy 100% trên Google Sheets.
Xem sản phẩm →📚 Bài Viết Liên Quan
Chia sẻ bài viết:
Tuân Hoang
Đội ngũ SheetStore
Google Workspace Certified, 5+ years experience
Công cụ liên quan
Giải pháp cho bài viết này
Bạn thấy bài viết hữu ích?
Đăng ký nhận thông báo khi có bài viết mới.