Template Quản Lý Dự Án (Project Management) Trên Google Sheets [Miễn Phí]
![Template Quản Lý Dự Án (Project Management) Trên Google Sheets [Miễn Phí]](/images/blog/template-quan-ly-du-an-google-sheets.png)
Tại Sao Nên Dùng Google Sheets Để Quản Lý Dự Án?
Quản lý dự án là một trong những thách thức lớn nhất của mọi team, từ startup 3 người đến phòng ban 50 người. Bạn cần theo dõi hàng chục task, deadline chồng chéo, phân công người phụ trách, và báo cáo tiến độ cho sếp — tất cả phải rõ ràng, minh bạch và cập nhật real-time.
Nhiều team chọn các công cụ chuyên dụng như Asana, Trello, Jira hay Monday.com. Nhưng thực tế, với dự án vừa và nhỏ (dưới 50 task), Google Sheets hoàn toàn đủ mạnh để thay thế — và còn có nhiều lợi thế mà các tool trả phí không có.
Lợi thế của Google Sheets cho quản lý dự án
Miễn phí & Dễ tiếp cận
- • Không giới hạn số người dùng
- • Không cần cài đặt phần mềm
- • Ai cũng biết dùng spreadsheet
- • Dùng được trên điện thoại, tablet
Tùy chỉnh 100%
- • Thêm/bớt cột tùy ý
- • Tạo công thức riêng cho team
- • Thiết kế Gantt Chart theo ý muốn
- • Tích hợp Apps Script tự động hóa
So sánh Google Sheets với các công cụ quản lý dự án phổ biến
| Tiêu chí | Google Sheets | Trello | Asana | Jira |
|---|---|---|---|---|
| Chi phí | Miễn phí | Free/Standard $5/user | Free/Premium $10.99/user | Free/Standard $7.75/user |
| Gantt Chart | Tự tạo (linh hoạt) | Power-Up trả phí | Timeline (Premium) | Có (Advanced) |
| Số người dùng | Không giới hạn | 10 boards (free) | 15 thành viên (free) | 10 users (free) |
| Tùy chỉnh | 100% tự do | Giới hạn theo template | Custom fields (Premium) | Cao nhưng phức tạp |
| Báo cáo & Dashboard | Tự tạo + Looker Studio | Dashboard cơ bản | Portfolios (Business) | Dashboards (Premium) |
| Học sử dụng | Dễ (ai cũng biết Excel) | Dễ | Trung bình | Khó (dành cho dev) |
| Offline | Có (Chrome extension) | Có (mobile app) | Có (mobile app) | Không |
| Phù hợp | Team nhỏ, dự án vừa | Team marketing, content | Team trung bình | Team phát triển phần mềm |
Khi nào nên dùng Google Sheets quản lý dự án?
- Team dưới 15 người, dự án dưới 50 task
- Ngân sách hạn chế, không muốn trả phí công cụ PM
- Cần tùy chỉnh cao theo đặc thù ngành (xây dựng, event, marketing...)
- Team đã quen dùng Google Workspace (Gmail, Drive, Calendar)
- Cần tích hợp dữ liệu từ nhiều nguồn (Sales, Kho, Tài chính) vào cùng 1 nơi
Cấu Trúc Template Quản Lý Dự Án — 5 Sheet Chi Tiết
Template được thiết kế gồm 5 sheet liên kết với nhau. Bạn chỉ cần nhập dữ liệu ở sheet Task List, các sheet còn lại sẽ tự động cập nhật nhờ công thức và conditional formatting.
Tổng quan 5 Sheet trong Template
1. Task List
Danh sách task chính, phân công, deadline, trạng thái
2. Gantt Chart
Biểu đồ Gantt tự động bằng conditional formatting
3. Dashboard
Tổng quan tiến độ, phân bổ theo người, task quá hạn
4. Timeline
Milestone theo tháng, phase dự án
5. Team
Thành viên, vai trò, workload hiện tại
Sheet 1: Task List — Trái tim của dự án
Đây là sheet quan trọng nhất, nơi bạn nhập và theo dõi toàn bộ task của dự án. Mỗi hàng là một task, mỗi cột là một thuộc tính.
| Cột | Tên | Kiểu dữ liệu | Mô tả | Ví dụ |
|---|---|---|---|---|
| A | Mã Task | Text (auto) | Mã tự động tăng | TSK-001 |
| B | Tên Task | Text | Mô tả ngắn gọn công việc | Thiết kế wireframe trang chủ |
| C | Phase | Dropdown | Giai đoạn dự án | Phase 1 - Thiết kế |
| D | Người phụ trách | Dropdown (từ sheet Team) | Thành viên chịu trách nhiệm | Nguyễn Văn A |
| E | Ngày bắt đầu | Date | Ngày bắt đầu task | 01/03/2026 |
| F | Ngày kết thúc | Date | Deadline task | 05/03/2026 |
| G | Số ngày | Number (auto) | =F2-E2 (tự tính) | 4 |
| H | Status | Dropdown | Trạng thái task | In Progress |
| I | Priority | Dropdown | Mức độ ưu tiên | High |
| J | % Hoàn thành | Number (0-100) | Tiến độ hoàn thành | 75 |
| K | Progress Bar | Text (auto) | Thanh tiến độ bằng REPT | ████████░░ |
| L | Ghi chú | Text | Ghi chú thêm | Chờ feedback từ khách hàng |
Giá trị Dropdown cho cột Status:
- Not Started — Chưa bắt đầu (màu xám)
- In Progress — Đang thực hiện (màu xanh dương)
- In Review — Đang review/kiểm tra (màu vàng)
- Blocked — Bị chặn, chờ dependency (màu đỏ)
- Completed — Hoàn thành (màu xanh lá)
Giá trị Dropdown cho cột Priority:
- Critical — Khẩn cấp, ảnh hưởng toàn dự án (màu đỏ đậm)
- High — Quan trọng, cần làm sớm (màu cam)
- Medium — Bình thường (màu vàng)
- Low — Ưu tiên thấp, có thể trì hoãn (màu xanh nhạt)
Sheet 2: Gantt Chart — Biểu đồ tiến độ trực quan
Gantt Chart giúp bạn nhìn tổng quan tiến độ dự án theo thời gian. Thay vì dùng tool đắt tiền, bạn có thể tạo Gantt Chart ngay trên Google Sheets bằng Conditional Formatting + hàm REPT.
Cách tạo Gantt Chart trên Google Sheets
Gantt Chart được tạo bằng cách sử dụng các cột ngày (mỗi cột = 1 ngày) và tô màu ô dựa trên ngày bắt đầu/kết thúc của task.
Cấu trúc:
- Cột A: Mã Task (liên kết từ Task List)
- Cột B: Tên Task (=Task List!B2)
- Cột C: Ngày bắt đầu (=Task List!E2)
- Cột D: Ngày kết thúc (=Task List!F2)
- Cột E trở đi: Mỗi cột = 1 ngày trong timeline dự án
Bước 1: Tạo dãy ngày ở hàng header. Ô E1 nhập ngày bắt đầu dự án (ví dụ 01/03/2026), F1 = E1+1, rồi kéo sang phải đến hết timeline dự án (30-60 ngày).
Bước 2: Dùng Conditional Formatting để tô màu tự động. Chọn vùng E2:BH20 (tùy số task và số ngày), chọn Format > Conditional formatting > Custom formula is:
=AND(E$1>=$C2, E$1<=$D2)
Công thức trên sẽ kiểm tra: nếu ngày ở header (E$1) nằm trong khoảng ngày bắt đầu ($C2) đến ngày kết thúc ($D2) thì tô màu. Chọn màu nền xanh dương cho thanh Gantt.
Bước 3 (Nâng cao): Tô màu khác nhau theo Status. Thêm nhiều rule conditional formatting:
// Completed - màu xanh lá
=AND(E$1>=$C2, E$1<=$D2, VLOOKUP($A2,'Task List'!$A:$H,8,0)="Completed")
// In Progress - màu xanh dương
=AND(E$1>=$C2, E$1<=$D2, VLOOKUP($A2,'Task List'!$A:$H,8,0)="In Progress")
// Blocked - màu đỏ
=AND(E$1>=$C2, E$1<=$D2, VLOOKUP($A2,'Task List'!$A:$H,8,0)="Blocked")
// Not Started - màu xám
=AND(E$1>=$C2, E$1<=$D2, VLOOKUP($A2,'Task List'!$A:$H,8,0)="Not Started")
Mẹo Pro: Thêm đường "Hôm nay" vào Gantt Chart
Dùng conditional formatting với công thức =E$1=TODAY() để tô màu cột ngày hôm nay (ví dụ viền đỏ dọc). Giúp bạn ngay lập tức thấy dự án đang ở đâu trên timeline.
Cách 2: Gantt bằng hàm REPT (dạng text)
Nếu không muốn dùng conditional formatting, bạn có thể tạo Gantt dạng text bằng hàm REPT. Kết quả sẽ hiển thị thanh tiến độ ngay trong 1 ô:
// Gantt bar dạng text (cột E)
=REPT(" ", (C2 - MIN($C$2:$C$20)) ) & REPT("█", F2 - C2 + 1)
// Giải thích:
// REPT(" ", ...) - tạo khoảng trắng đẩy thanh sang phải
// (C2 - MIN($C$2:$C$20)) - khoảng cách từ ngày bắt đầu task đến ngày đầu dự án
// REPT("█", F2-C2+1) - tạo thanh dài bằng số ngày task
Sheet 3: Dashboard — Tổng quan tiến độ dự án
Dashboard giúp bạn nhìn nhanh tình hình dự án trong 5 giây, không cần lướt qua hàng chục task. Tất cả được tự động tính từ sheet Task List.
Các chỉ số trên Dashboard
15
Tổng số Task
=COUNTA('Task List'!B2:B)
67%
Hoàn thành
=AVERAGE('Task List'!J2:J)
3
Task quá hạn
=COUNTIFS(...)
2
Task bị Block
=COUNTIF(H:H,"Blocked")
Dưới đây là các công thức quan trọng cho Dashboard:
// Tổng task
=COUNTA('Task List'!B2:B)
// % hoàn thành trung bình
=IFERROR(AVERAGE('Task List'!J2:J), 0)
// Số task hoàn thành (status = Completed)
=COUNTIF('Task List'!H2:H, "Completed")
// Số task đang làm
=COUNTIF('Task List'!H2:H, "In Progress")
// Số task quá hạn (chưa xong + quá deadline)
=COUNTIFS('Task List'!H2:H, "<>Completed", 'Task List'!F2:F, "<" & TODAY())
// Số task bị block
=COUNTIF('Task List'!H2:H, "Blocked")
// Số ngày còn lại đến deadline dự án
=MAX('Task List'!F2:F) - TODAY()
// Phân bổ task theo người (dùng QUERY)
=QUERY('Task List'!D2:H, "SELECT D, COUNT(D), COUNTIF(H,'Completed') WHERE D IS NOT NULL GROUP BY D LABEL COUNT(D) 'Tổng', COUNTIF(H,'Completed') 'Xong'")
Bảng phân bổ task theo thành viên
| Thành viên | Tổng task | Hoàn thành | Đang làm | Quá hạn | % Tiến độ |
|---|---|---|---|---|---|
| Nguyễn Văn A | 5 | 3 | 2 | 0 | ████████░░ 80% |
| Trần Thị B | 4 | 2 | 1 | 1 | ██████░░░░ 60% |
| Lê Văn C | 3 | 1 | 1 | 1 | ████░░░░░░ 40% |
| Phạm Thị D | 3 | 2 | 1 | 0 | █████████░ 90% |
// Công thức đếm task theo từng người
// Tổng task của Nguyễn Văn A:
=COUNTIF('Task List'!D:D, "Nguyễn Văn A")
// Task hoàn thành của Nguyễn Văn A:
=COUNTIFS('Task List'!D:D, "Nguyễn Văn A", 'Task List'!H:H, "Completed")
// Task quá hạn của Nguyễn Văn A:
=COUNTIFS('Task List'!D:D, "Nguyễn Văn A", 'Task List'!H:H, "<>Completed", 'Task List'!F:F, "<" & TODAY())
// % Tiến độ:
=IFERROR(AVERAGEIF('Task List'!D:D, "Nguyễn Văn A", 'Task List'!J:J), 0)
Sheet 4: Timeline — Milestone và Phase dự án
Sheet Timeline giúp bạn nhìn tổng quan các mốc quan trọng (milestone) của dự án theo thời gian. Không chi tiết như Gantt Chart, nhưng rất hữu ích khi báo cáo cho sếp hoặc khách hàng.
| Phase | Milestone | Ngày bắt đầu | Ngày kết thúc | Status | Deliverable |
|---|---|---|---|---|---|
| Phase 1 | Khởi động dự án | 01/03/2026 | 07/03/2026 | Completed | Project brief, Team setup |
| Phase 2 | Thiết kế UI/UX | 08/03/2026 | 21/03/2026 | In Progress | Wireframe, Mockup, Prototype |
| Phase 3 | Phát triển Frontend | 22/03/2026 | 11/04/2026 | Not Started | HTML/CSS, React components |
| Phase 4 | Phát triển Backend | 22/03/2026 | 18/04/2026 | Not Started | API, Database, Auth |
| Phase 5 | Testing & QA | 19/04/2026 | 25/04/2026 | Not Started | Test report, Bug fix |
| Phase 6 | Go Live | 26/04/2026 | 30/04/2026 | Not Started | Deploy, Training, Launch |
Sheet 5: Team — Quản lý thành viên và workload
Sheet Team quản lý thông tin thành viên, vai trò, và đặc biệt là workload (khối lượng công việc) — giúp phân bổ task công bằng và tránh quá tải cho 1 người.
| Thành viên | Vai trò | Task đang làm | Workload | Trạng thái | |
|---|---|---|---|---|---|
| Nguyễn Văn A | Project Manager | a@company.com | 5 | Cao | Available |
| Trần Thị B | UI/UX Designer | b@company.com | 4 | Trung bình | Available |
| Lê Văn C | Frontend Developer | c@company.com | 3 | Thấp | Available |
| Phạm Thị D | Backend Developer | d@company.com | 3 | Thấp | On Leave 20/3 |
// Tự động đếm task đang làm (cột D - Task đang làm)
=COUNTIFS('Task List'!D:D, A2, 'Task List'!H:H, "<>Completed")
// Workload level (cột E)
=IF(D2>=5, "Cao", IF(D2>=3, "Trung bình", "Thấp"))
// Hoặc dùng SPARKLINE để hiện workload dạng bar chart
=SPARKLINE(D2, {"charttype","bar"; "max",8; "color1",IF(D2>=5,"red",IF(D2>=3,"orange","green"))})
Công Thức Quan Trọng Trong Template
Dưới đây là tổng hợp các công thức "xương sống" giúp template hoạt động tự động. Bạn chỉ cần nhập dữ liệu vào Task List, mọi thứ còn lại sẽ được tính tự động.
1. Tự động sinh mã Task
// Cột A - Mã task tự động (TSK-001, TSK-002...)
=IF(B2="", "", "TSK-" & TEXT(ROW()-1, "000"))
2. Progress Bar bằng hàm REPT
// Cột K - Thanh tiến độ trực quan
// J2 là % hoàn thành (0-100)
=IF(J2="", "",
REPT("█", ROUND(J2/10, 0)) &
REPT("░", 10 - ROUND(J2/10, 0)) &
" " & J2 & "%"
)
// Kết quả ví dụ:
// 0%: ░░░░░░░░░░ 0%
// 30%: ███░░░░░░░ 30%
// 75%: ████████░░ 75%
// 100%: ██████████ 100%
3. Auto Status dựa trên % hoàn thành
// Tự động đặt status dựa trên % (nếu muốn dùng thay cho dropdown)
=IF(J2="", "",
IF(J2=100, "Completed",
IF(J2>0, "In Progress",
IF(AND(J2=0, E2<=TODAY()), "Not Started - Overdue",
"Not Started"
)
)
)
)
4. Highlight task quá hạn
// Cách 1: Conditional Formatting cho cả hàng
// Chọn range A2:L100 > Format > Conditional formatting
// Custom formula:
=AND($F2"Completed")
// Chọn màu nền đỏ nhạt (#FFCDD2) cho task quá hạn
// Cách 2: Thêm cột "Số ngày quá hạn"
=IF(AND(F2"Completed"),
TODAY() - F2 & " ngày",
IF(AND(F2>=TODAY(), H2<>"Completed"),
F2 - TODAY() & " ngày còn lại",
"Done"
)
)
5. Hàm WORKDAY — Tính ngày làm việc
Khi lên kế hoạch, bạn cần tính theo ngày làm việc thực tế (bỏ qua T7, CN và ngày lễ). Hàm WORKDAY giúp bạn làm điều này:
// WORKDAY: Tính ngày kết thúc dựa trên số ngày làm việc
// E2 = ngày bắt đầu, G2 = số ngày cần
=WORKDAY(E2, G2)
// Ví dụ: WORKDAY("01/03/2026", 5) = 06/03/2026 (bỏ T7, CN)
// WORKDAY với ngày lễ
// Tạo danh sách ngày lễ ở 1 range riêng (ví dụ Holidays!A:A)
=WORKDAY(E2, G2, Holidays!$A$2:$A$20)
// NETWORKDAYS: Đếm số ngày làm việc giữa 2 ngày
=NETWORKDAYS(E2, F2)
// Ví dụ: Từ T2 01/03 đến T6 05/03 = 5 ngày làm việc
// NETWORKDAYS với ngày lễ
=NETWORKDAYS(E2, F2, Holidays!$A$2:$A$20)
// Danh sách ngày lễ Việt Nam 2026 (đặt trong sheet riêng):
// 01/01/2026 - Tết Dương lịch
// 17/02/2026 - 19/02/2026 - Tết Nguyên Đán (ví dụ)
// 10/03/2026 - Giỗ Tổ Hùng Vương
// 30/04/2026 - Ngày Giải phóng
// 01/05/2026 - Quốc tế Lao động
// 02/09/2026 - Quốc khánh
6. Conditional Formatting cho Status và Priority
// Conditional Formatting cho cột Status (H)
// Chọn cột H > Format > Conditional formatting
// Rule 1: Text is exactly "Completed"
// Background: #C8E6C9 (xanh lá nhạt), Text: #2E7D32
// Rule 2: Text is exactly "In Progress"
// Background: #BBDEFB (xanh dương nhạt), Text: #1565C0
// Rule 3: Text is exactly "In Review"
// Background: #FFF9C4 (vàng nhạt), Text: #F57F17
// Rule 4: Text is exactly "Blocked"
// Background: #FFCDD2 (đỏ nhạt), Text: #C62828
// Rule 5: Text is exactly "Not Started"
// Background: #F5F5F5 (xám nhạt), Text: #616161
// Conditional Formatting cho cột Priority (I)
// Rule 1: "Critical" -> Background #D32F2F (đỏ), Text: white
// Rule 2: "High" -> Background #FF9800 (cam), Text: white
// Rule 3: "Medium" -> Background #FDD835 (vàng)
// Rule 4: "Low" -> Background #81D4FA (xanh nhạt)
Apps Script: Tự Động Hóa Quản Lý Dự Án
Để nâng cấp template lên tầm cao mới, bạn có thể dùng Google Apps Script để tạo menu tùy chỉnh, tự động gửi email nhắc deadline, và nhiều chức năng hữu ích khác.
Script 1: Menu tùy chỉnh — Thêm Task & Cập nhật Status
// Mở Apps Script: Extensions > Apps Script
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('Project Manager')
.addItem('Thêm Task mới', 'addNewTask')
.addItem('Cập nhật Status hàng loạt', 'bulkUpdateStatus')
.addSeparator()
.addItem('Gửi email nhắc deadline', 'sendDeadlineReminders')
.addItem('Tạo báo cáo tuần', 'generateWeeklyReport')
.addToUi();
}
function addNewTask() {
const ui = SpreadsheetApp.getUi();
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('Task List');
// Hỏi tên task
const nameResponse = ui.prompt('Thêm Task Mới', 'Nhập tên task:', ui.ButtonSet.OK_CANCEL);
if (nameResponse.getSelectedButton() !== ui.Button.OK) return;
const taskName = nameResponse.getResponseText();
// Hỏi người phụ trách
const assigneeResponse = ui.prompt('Người phụ trách', 'Nhập tên người phụ trách:', ui.ButtonSet.OK_CANCEL);
if (assigneeResponse.getSelectedButton() !== ui.Button.OK) return;
const assignee = assigneeResponse.getResponseText();
// Hỏi priority
const priorityResponse = ui.prompt('Mức ưu tiên', 'Nhập: Critical / High / Medium / Low', ui.ButtonSet.OK_CANCEL);
if (priorityResponse.getSelectedButton() !== ui.Button.OK) return;
const priority = priorityResponse.getResponseText();
// Tìm hàng trống tiếp theo
const lastRow = sheet.getLastRow();
const newRow = lastRow + 1;
const taskId = 'TSK-' + String(newRow - 1).padStart(3, '0');
// Ghi dữ liệu
sheet.getRange(newRow, 1).setValue(taskId); // Mã Task
sheet.getRange(newRow, 2).setValue(taskName); // Tên Task
sheet.getRange(newRow, 4).setValue(assignee); // Người phụ trách
sheet.getRange(newRow, 5).setValue(new Date()); // Ngày bắt đầu = hôm nay
sheet.getRange(newRow, 8).setValue('Not Started'); // Status
sheet.getRange(newRow, 9).setValue(priority); // Priority
sheet.getRange(newRow, 10).setValue(0); // % = 0
ui.alert('Đã thêm task: ' + taskId + ' - ' + taskName);
}
function bulkUpdateStatus() {
const ui = SpreadsheetApp.getUi();
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Task List');
const range = sheet.getActiveRange();
if (!range) {
ui.alert('Vui lòng chọn các task cần cập nhật status');
return;
}
const statusResponse = ui.prompt(
'Cập nhật Status',
'Nhập status mới cho ' + range.getNumRows() + ' task:\nCompleted / In Progress / In Review / Blocked / Not Started',
ui.ButtonSet.OK_CANCEL
);
if (statusResponse.getSelectedButton() !== ui.Button.OK) return;
const newStatus = statusResponse.getResponseText();
const startRow = range.getRow();
for (let i = 0; i < range.getNumRows(); i++) {
sheet.getRange(startRow + i, 8).setValue(newStatus);
if (newStatus === 'Completed') {
sheet.getRange(startRow + i, 10).setValue(100); // % = 100
}
}
ui.alert('Đã cập nhật ' + range.getNumRows() + ' task thành "' + newStatus + '"');
}
Script 2: Email nhắc deadline tự động
function sendDeadlineReminders() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Task List');
const teamSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Team');
const data = sheet.getDataRange().getValues();
const teamData = teamSheet.getDataRange().getValues();
// Tạo map email từ sheet Team
const emailMap = {};
for (let i = 1; i < teamData.length; i++) {
emailMap[teamData[i][0]] = teamData[i][2]; // Tên -> Email
}
const today = new Date();
today.setHours(0, 0, 0, 0);
const reminderDays = 2; // Nhắc trước 2 ngày
let reminderCount = 0;
for (let i = 1; i < data.length; i++) {
const taskName = data[i][1];
const assignee = data[i][3];
const deadline = new Date(data[i][5]);
const status = data[i][7];
// Bỏ qua task đã hoàn thành
if (status === 'Completed') continue;
// Tính số ngày còn lại
const daysLeft = Math.floor((deadline - today) / (1000 * 60 * 60 * 24));
// Gửi nhắc nếu deadline trong vòng 2 ngày hoặc đã quá hạn
if (daysLeft <= reminderDays) {
const email = emailMap[assignee];
if (!email) continue;
let subject, body;
if (daysLeft < 0) {
subject = '[QUA HAN] Task "' + taskName + '" da qua han ' + Math.abs(daysLeft) + ' ngay';
body = 'Xin chao ' + assignee + ',\n\n'
+ 'Task "' + taskName + '" (ID: ' + data[i][0] + ') DA QUA HAN '
+ Math.abs(daysLeft) + ' ngay.\n'
+ 'Deadline: ' + Utilities.formatDate(deadline, 'Asia/Ho_Chi_Minh', 'dd/MM/yyyy')
+ '\n\nVui long cap nhat tien do ngay.';
} else if (daysLeft === 0) {
subject = '[HOM NAY] Deadline task "' + taskName + '"';
body = 'Xin chao ' + assignee + ',\n\n'
+ 'Task "' + taskName + '" (ID: ' + data[i][0] + ') co deadline HOM NAY.\n'
+ '\nVui long hoan thanh va cap nhat status.';
} else {
subject = '[NHAC NHO] Task "' + taskName + '" - con ' + daysLeft + ' ngay';
body = 'Xin chao ' + assignee + ',\n\n'
+ 'Task "' + taskName + '" (ID: ' + data[i][0] + ') se den han trong '
+ daysLeft + ' ngay.\n'
+ 'Deadline: ' + Utilities.formatDate(deadline, 'Asia/Ho_Chi_Minh', 'dd/MM/yyyy')
+ '\nTrang thai hien tai: ' + status
+ '\n\nVui long cap nhat tien do.';
}
MailApp.sendEmail(email, subject, body);
reminderCount++;
}
}
SpreadsheetApp.getUi().alert('Da gui ' + reminderCount + ' email nhac deadline.');
}
// Đặt trigger tự động chạy hàng ngày 8h sáng
function createDailyTrigger() {
ScriptApp.newTrigger('sendDeadlineReminders')
.timeBased()
.atHour(8)
.everyDays(1)
.inTimezone('Asia/Ho_Chi_Minh')
.create();
}
Thiết lập Trigger tự động:
- Mở Apps Script (Extensions > Apps Script)
- Chạy hàm
createDailyTrigger()một lần - Cấp quyền gửi email khi được hỏi
- Từ nay, mỗi sáng 8h hệ thống sẽ tự gửi email nhắc deadline cho thành viên
Script 3: Tạo báo cáo tuần tự động
function generateWeeklyReport() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Task List');
const data = sheet.getDataRange().getValues();
let totalTasks = 0;
let completed = 0;
let inProgress = 0;
let blocked = 0;
let overdue = 0;
const today = new Date();
for (let i = 1; i < data.length; i++) {
if (!data[i][1]) continue; // Bỏ hàng trống
totalTasks++;
const status = data[i][7];
const deadline = new Date(data[i][5]);
if (status === 'Completed') completed++;
else if (status === 'In Progress') inProgress++;
else if (status === 'Blocked') blocked++;
if (status !== 'Completed' && deadline < today) overdue++;
}
const progressPercent = totalTasks > 0 ? Math.round((completed / totalTasks) * 100) : 0;
const report =
'=== BAO CAO TIEN DO DU AN ===\n' +
'Ngay: ' + Utilities.formatDate(today, 'Asia/Ho_Chi_Minh', 'dd/MM/yyyy') + '\n\n' +
'Tong task: ' + totalTasks + '\n' +
'Hoan thanh: ' + completed + ' (' + progressPercent + '%)\n' +
'Dang lam: ' + inProgress + '\n' +
'Bi block: ' + blocked + '\n' +
'Qua han: ' + overdue + '\n\n' +
'Tien do tong: ' + '█'.repeat(Math.round(progressPercent / 10)) +
'░'.repeat(10 - Math.round(progressPercent / 10)) + ' ' + progressPercent + '%';
// Gửi email cho PM
const pmEmail = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName('Team').getRange('C2').getValue();
if (pmEmail) {
MailApp.sendEmail(pmEmail, '[Weekly Report] Tien do du an - ' +
Utilities.formatDate(today, 'Asia/Ho_Chi_Minh', 'dd/MM/yyyy'), report);
}
SpreadsheetApp.getUi().alert(report);
}
Ví Dụ Thực Tế: Dự Án "Triển Khai Website Mới"
Để bạn hình dung rõ hơn cách sử dụng template, dưới đây là ví dụ thực tế cho dự án "Triển khai website mới cho công ty ABC" với 15 task mẫu, timeline 2 tháng.
| Mã | Task | Phase | Phụ trách | Bắt đầu | Kết thúc | Status | Priority | % |
|---|---|---|---|---|---|---|---|---|
| TSK-001 | Thu thập yêu cầu từ khách hàng | Phase 1 | Nguyễn A | 01/03 | 03/03 | Completed | Critical | 100 |
| TSK-002 | Phân tích đối thủ cạnh tranh | Phase 1 | Trần B | 01/03 | 05/03 | Completed | High | 100 |
| TSK-003 | Viết Project Brief & Scope | Phase 1 | Nguyễn A | 04/03 | 07/03 | Completed | Critical | 100 |
| TSK-004 | Thiết kế Wireframe trang chủ | Phase 2 | Trần B | 08/03 | 12/03 | Completed | High | 100 |
| TSK-005 | Thiết kế Wireframe trang con | Phase 2 | Trần B | 10/03 | 14/03 | In Progress | High | 60 |
| TSK-006 | Thiết kế Mockup UI (Figma) | Phase 2 | Trần B | 15/03 | 21/03 | Not Started | High | 0 |
| TSK-007 | Setup hosting & domain | Phase 3 | Lê C | 08/03 | 09/03 | Completed | Critical | 100 |
| TSK-008 | Code HTML/CSS trang chủ | Phase 3 | Lê C | 22/03 | 28/03 | Not Started | High | 0 |
| TSK-009 | Code React components | Phase 3 | Lê C | 25/03 | 05/04 | Not Started | High | 0 |
| TSK-010 | Thiết kế database schema | Phase 4 | Phạm D | 22/03 | 24/03 | Not Started | Critical | 0 |
| TSK-011 | Xây dựng REST API | Phase 4 | Phạm D | 25/03 | 08/04 | Not Started | High | 0 |
| TSK-012 | Tích hợp Auth & Payment | Phase 4 | Phạm D | 09/04 | 15/04 | Not Started | High | 0 |
| TSK-013 | Viết content cho website | Phase 2 | Nguyễn A | 08/03 | 18/03 | In Progress | Medium | 40 |
| TSK-014 | Testing UAT toàn bộ | Phase 5 | Nguyễn A | 19/04 | 25/04 | Not Started | Critical | 0 |
| TSK-015 | Deploy & Go Live | Phase 6 | Lê C | 26/04 | 30/04 | Not Started | Critical | 0 |
Tóm tắt dự án mẫu:
- Timeline: 01/03/2026 — 30/04/2026 (2 tháng)
- Team: 4 người (PM, Designer, Frontend Dev, Backend Dev)
- 6 Phase: Khởi động > Thiết kế > Frontend > Backend > Testing > Go Live
- 15 task với dependency rõ ràng giữa các phase
- Hiện tại: 5/15 task hoàn thành (33%), 2 đang làm, 8 chưa bắt đầu
6 Mẹo Quản Lý Dự Án Hiệu Quả Trên Google Sheets
1. Đặt quy tắc naming convention rõ ràng
Mỗi task phải có mã riêng (TSK-001), mỗi phase có prefix (Phase 1, Phase 2...). Điều này giúp khi filter, sort hoặc dùng VLOOKUP sẽ chính xác và nhanh hơn.
Ví dụ: Thay vì viết "Làm trang chủ", hãy viết "Code HTML/CSS trang chủ theo mockup v2" — rõ ràng ai cũng hiểu cần làm gì.
2. Cập nhật tiến độ hàng ngày (Daily Standup)
Mỗi sáng, mỗi thành viên dành 2 phút cập nhật % hoàn thành và status trên sheet. Không cần họp dài, chỉ cần nhìn bảng là biết dự án đang ở đâu.
Mẹo: Dùng Google Sheets mobile app để cập nhật ngay trên điện thoại khi đang di chuyển.
3. Dùng Data Validation cho dropdown
Đừng để nhập tay cho Status, Priority, Phase — luôn dùng dropdown. Tránh lỗi chính tả làm hỏng công thức COUNTIF, VLOOKUP.
Cách làm: Data > Data validation > Criteria: List of items > Nhập: Not Started, In Progress, In Review, Blocked, Completed
4. Protect sheet Dashboard và Gantt
Sheet Dashboard và Gantt Chart chứa toàn công thức — nếu ai đó vô tình xóa sẽ mất hết. Hãy protect những sheet này, chỉ cho phép edit sheet Task List.
Cách làm: Chuột phải vào tab sheet > Protect sheet > Set permissions > Only you
5. Tạo Filter View cho mỗi người
Mỗi thành viên chỉ cần xem task của mình. Dùng Filter View (không phải Filter thường) để mỗi người có bộ lọc riêng mà không ảnh hưởng người khác.
Cách làm: Data > Filter views > Create new filter view > Lọc cột "Người phụ trách" theo tên mình
6. Backup dữ liệu và version history
Google Sheets tự động lưu version history, nhưng hãy tạo backup thủ công mỗi tuần (File > Make a copy) đề phòng ai đó xóa nhầm nhiều dữ liệu quá khả năng undo.
Mẹo: Đặt tên backup kèm ngày: "Project Plan - Backup 15/03/2026". Lưu trong folder riêng trên Google Drive.
Câu Hỏi Thường Gặp (FAQ)
Google Sheets có thể quản lý dự án bao nhiêu task?
Google Sheets hỗ trợ tối đa 10 triệu ô, nên về lý thuyết bạn có thể quản lý hàng nghìn task. Tuy nhiên, để đảm bảo tốc độ và trải nghiệm tốt, nên giữ dưới 200 task trong 1 file. Nếu dự án lớn hơn, hãy chia thành nhiều file theo phase hoặc module, sử dụng IMPORTRANGE để liên kết dữ liệu giữa các file.
Có thể quản lý nhiều dự án trên 1 file không?
Được, nhưng không khuyến khích. Tốt nhất nên tạo 1 file riêng cho mỗi dự án (copy template). Nếu muốn quản lý nhiều dự án, hãy tạo thêm 1 file "Portfolio" với sheet tổng hợp, dùng IMPORTRANGE để kéo dữ liệu tiến độ từ từng file dự án con.
Làm sao để nhiều người cùng edit không bị xung đột?
Google Sheets hỗ trợ cộng tác real-time — nhiều người edit cùng lúc mà không bị conflict. Tuy nhiên, nên đặt quy tắc: mỗi người chỉ sửa task của mình, dùng Filter View riêng, và protect các sheet chứa công thức (Dashboard, Gantt). Khi cần sửa cấu trúc (thêm cột, đổi công thức), chỉ PM được quyền thực hiện.
Khi nào nên chuyển sang tool chuyên dụng (Asana, Jira)?
Nên chuyển khi: (1) Team trên 15 người, (2) Dự án có trên 100 task chạy đồng thời, (3) Cần quản lý dependencies phức tạp (task A phải xong trước task B), (4) Cần time tracking chi tiết, (5) Cần tích hợp sâu với CI/CD (Jira + GitHub). Với team nhỏ và dự án vừa, Google Sheets vẫn là lựa chọn hiệu quả nhất.
Template có dùng được trên điện thoại không?
Có. Google Sheets có app trên cả iOS và Android. Bạn có thể xem tiến độ, cập nhật status và % hoàn thành ngay trên điện thoại. Tuy nhiên, trải nghiệm edit trên mobile không tốt bằng desktop, đặc biệt với bảng nhiều cột. Khuyến nghị dùng mobile để xem và cập nhật nhanh, dùng desktop để setup, chỉnh công thức và xem Gantt Chart.
Kết Luận
Template Quản Lý Dự Án trên Google Sheets là giải pháp miễn phí, linh hoạt và đủ mạnh cho hầu hết team nhỏ và vừa. Với 5 sheet (Task List, Gantt Chart, Dashboard, Timeline, Team), bạn có thể:
- Theo dõi tiến độ từng task với status, priority và % hoàn thành
- Nhìn tổng quan dự án qua Gantt Chart và Dashboard tự động
- Phân bổ workload công bằng qua sheet Team
- Tự động nhắc deadline qua email bằng Apps Script
- Báo cáo nhanh cho sếp và khách hàng bằng các chỉ số dashboard
Muốn quản lý dự án chuyên nghiệp hơn?
Nếu dự án của bạn cần nhiều tính năng hơn Google Sheets — như quản lý đơn hàng, CRM khách hàng, báo cáo doanh thu tự động, hoặc tích hợp AI — hãy khám phá các phần mềm quản lý chuyên nghiệp tại sheet.com.vn.
Chúng tôi cung cấp các giải pháp phần mềm quản lý bán hàng, quản lý bất động sản, và Content AI được xây dựng trên nền tảng Google Sheets quen thuộc, giúp team của bạn vận hành hiệu quả hơn mà không cần thay đổi quy trình làm việc.
Chia sẻ bài viết:
Tuân Hoang
Đội ngũ SheetStore
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.