Chào bạn, mình làm kế toán nên cũng hay phải tính giờ tăng ca để đối chiếu với bảng lương, mình gợi ý cách làm bằng công thức, không cần VBA. Giả sử bạn có bảng chấm công theo ngày, mỗi dòng một ngày làm việc, cột C là số giờ tăng ca trong ngày, đã đổi sang số thập phân, ví dụ 5,5 chứ không để dạng giờ 5:30.
Vượt 4 giờ/ngày là dễ nhất, thêm một cột phụ với công thức =MAX(0;C2-4). Ngày nào tăng ca quá 4 giờ thì hiện phần vượt ra, ngày nào từ 4 giờ trở xuống thì bằng 0, cuối tháng cộng cột này lại là ra tổng giờ vượt theo ngày.
Vượt 40 giờ/tháng thì phải lũy kế theo tháng. Giả sử cột A là tháng, cột C là giờ tăng ca, giờ lũy kế tới dòng hiện tại là =SUMIF($A$2:A2;A2;$C$2:C2), rồi giờ vượt là =MAX(0;lũy kế-40). Bạn kéo công thức xuống theo từng dòng, dòng nào chạm mốc 40 thì các dòng sau trong tháng đó mới bắt đầu tính vượt.
Vượt 300 giờ/năm làm tương tự, thay cột tháng bằng cột năm và thay 40 bằng 300. Nhớ chốt lũy kế theo từng nhân viên: nếu bảng có nhiều người thì phải thêm điều kiện mã nhân viên, dùng SUMIFS với hai điều kiện là mã nhân viên và tháng hoặc năm.
Một lưu ý nhỏ: nên tách riêng giờ tăng ca ngày thường, chủ nhật và ngày lễ ra các cột khác nhau vì hệ số trả lương khác nhau, đừng gộp chung một cột rồi mới tách sau.
Bạn cho mình hỏi thêm: bảng chấm công của bạn đang để giờ tăng ca theo ngày hay đã tổng hợp theo tháng rồi, và mỗi tháng có khoảng bao nhiêu nhân viên cần tính?