Template

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

Tuân HoangTuân Hoang
27 tháng 2, 2026
Cập nhật: 9 tháng 10, 2026
24 phút đọc
Ảnh minh họa bài viết: 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 Email 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

  1. Chọn vùng ô cần validation (VD: cột H - Phòng ban)
  2. Vào menu Data → Data validation
  3. Chon Criteria: "List of items" hoac "List from a range"
  4. Nhập danh sách (cách nhau bởi dấu phẩy) hoặc chọn range
  5. Tick "Show dropdown list in cell"
  6. Chọn "Reject input" để không cho nhập ngoài danh sách
  7. 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

  1. Chọn cột L (Ngày hết HĐ) trên sheet Ho So NV
  2. Menu Format → Conditional formatting
  3. Chon "Custom formula is"
  4. Nhap: =AND(L2-TODAY()>0, L2-TODAY()<=30, L2<>"")
  5. Màu nền: Vàng nhạt (#FFF9C4)
  6. Click Done

Rule 2: Hợp đồng đã quá hạn (Đỏ) - hết hạn rồi chưa gia hạn

  1. Chọn cột L (Ngày hết HĐ) trên sheet Ho So NV
  2. Custom formula: =AND(L2<TODAY(), L2<>"")
  3. Màu nền: Đỏ nhạt (#FFCDD2)
  4. Text: Đỏ đậm (#C62828)

Rule 3: Nhân viên mới (Xanh) - vào làm chưa quá 3 tháng

  1. Chọn cột J (Ngày vào làm)
  2. Custom formula: =AND(TODAY()-J2<=90, J2<>"")
  3. Màu nền: Xanh lá nhạt (#C8E6C9)

Rule 4: Đi muộn quá nhiều (Đỏ) - trên 3 lần/tháng

  1. Chọn cột H (Đi muộn) trên sheet Cham Cong
  2. Custom formula: =H2>3
  3. Màu nền: Cam nhạt (#FFE0B2)
  4. Text: Cam đậm (#E65100)

Rule 5: KPI xếp loại "Khong dat" (Đỏ đậm)

  1. Chọn cột J (Xếp loại) trên sheet KPI
  2. Custom formula: =J2="Khong dat"
  3. Màu nền: Do (#EF5350), Text: Trang
  4. 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

  1. Trong Apps Script Editor, click biểu tượng đồng hồ (Triggers) ở thanh bên trái
  2. Click "+ Add Trigger"
  3. Chọn function: notifyExpiringContracts
  4. Event source: Time-driven
  5. Type: Day timer → Chọn 8am to 9am
  6. Click Save
  7. 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:

  1. Tạo Google Sheets mới và đặt tên "Quản Lý Nhân Sự 2026"
  2. Tạo 6 sheets theo cấu trúc đã hướng dẫn (Ho So NV, Cham Cong, Nghi Phep, Dao Tao, KPI, Dashboard)
  3. Nhập header và thiết lập Data Validation (dropdown)
  4. Nhập công thức VLOOKUP, COUNTIFS, DATEDIF theo hướng dẫn
  5. Thiết lập Conditional Formatting (5 rules đã hướng dẫn)
  6. Copy 3 đoạn Apps Script vào Script Editor (Extensions → Apps Script)
  7. Nhập data thử (dùng mẫu 10 NV bên trên) để test công thức
  8. 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

📖 Xem thêm: Template Quản Lý Thu Chi Google Sheets Miễn Phí

Chia sẻ bài viết:

Tuân Hoang

Tuân Hoang

Đội ngũ SheetStore

Google SheetsGoogle Apps ScriptCRMAutomationPhần mềm quản lý doanh nghiệp

Google Workspace Certified, 5+ years experience

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.

Nhận thông báo khi có bài viết mới. Không spam, hứa luôn! 😊

Bình luận (0)

Vui lòng đăng nhập để tham gia thảo luận