Template

Template Quản Lý Dự Án (Project Management) Trên Google Sheets [Miễn Phí]

Tuân HoangTuân Hoang
27 tháng 2, 2026
Cập nhật: 25 tháng 3, 2026
21 phút đọc
Template Quản Lý Dự Án (Project Management) Trên Google Sheets [Miễn Phí]

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ò Email 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:

  1. Mở Apps Script (Extensions > Apps Script)
  2. Chạy hàm createDailyTrigger() một lần
  3. Cấp quyền gửi email khi được hỏi
  4. 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.

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

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.

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