Tạo Gantt Chart Tự Động Trong Google Sheets [Không Cần Addon 2026]
![Ảnh minh họa bài viết: Tạo Gantt Chart Tự Động Trong Google Sheets [Không Cần Addon 2026]](/og-image.jpg)
Tại Sao Gantt Chart Quan Trọng Với Quản Lý Dự Án?
Nếu bạn đang quản lý một dự án có nhiều hơn 3 người và kéo dài hơn 2 tuần, bạn cần Gantt Chart. Không phải vì nó "chuyên nghiệp", mà vì không có nó, bạn sẽ liên tục bị hỏi: "Task A xong chưa?", "Bao giờ team tôi mới bắt đầu được?", "Chúng ta có đúng tiến độ không?"
Gantt Chart giải quyết đúng những câu hỏi này — nó cho thấy ai làm gì, từ khi nào đến khi nào, và đang ở mức nào so với kế hoạch — chỉ trong một cái nhìn.
Vấn đề là các phần mềm Gantt Chart chuyên dụng (Microsoft Project, Asana, Monday.com) thường đắt tiền và có learning curve cao. Trong khi đó, Google Sheets — thứ hầu hết chúng ta đã có — hoàn toàn có thể làm được điều tương tự, miễn phí, và không cần cài addon nào.
Bài viết này sẽ hướng dẫn bạn 2 cách tạo Gantt Chart trong Google Sheets từ đầu, kèm công thức thực tế, template 3 sheet và mẹo nâng cao để biểu đồ của bạn trông thực sự chuyên nghiệp.
Cách 1: Gantt Chart Dùng Conditional Formatting
Đây là phương pháp phổ biến nhất — dễ hiểu, dễ tùy chỉnh và hoạt động tốt với mọi phiên bản Google Sheets.
Bước 1: Tạo Cấu Trúc Bảng Dữ Liệu
Tạo một sheet mới và thiết lập 6 cột thông tin đầu tiên:
| Cột A | Cột B | Cột C | Cột D | Cột E | Cột F |
|---|---|---|---|---|---|
| STT | Tên Task | Người Phụ Trách | Ngày Bắt Đầu | Ngày Kết Thúc | % Hoàn Thành |
| 1 | Thiết kế UI | Nam | 01/07/2026 | 07/07/2026 | 100% |
Từ cột G trở đi là timeline — mỗi cột tương ứng với một ngày (hoặc một tuần nếu dự án dài).
Bước 2: Tạo Header Timeline Tự Động
Ở ô G1, nhập ngày bắt đầu của dự án:
=DATE(2026,7,1)
Ở ô H1, nhập công thức để tự động cộng thêm 1 ngày:
=G1+1
Sau đó kéo công thức từ H1 sang phải cho đến hết timeline dự án. Format các ô header thành dạng ngày ngắn (dd/MM) để tiết kiệm không gian.
Để hiển thị ngày cuối tuần (thứ 7, CN) với nền xám, áp dụng conditional formatting cho toàn bộ hàng 1 với công thức:
=WEEKDAY(G$1,2)>=6
Chọn màu nền xám nhạt (#F5F5F5). Cuối tuần sẽ tự động hiển thị khác biệt giúp bạn tránh lên kế hoạch vào ngày nghỉ.
Bước 3: Áp Dụng Conditional Formatting Cho Timeline
Đây là bước quan trọng nhất. Chọn vùng timeline (từ G2 đến ô cuối cùng của timeline), vào Format > Conditional formatting, thêm 3 rules theo thứ tự ưu tiên từ cao xuống thấp:
Rule 1 — Task trễ deadline (đỏ cam):
=AND($D2<=G$1, $E2>=G$1, $E2<TODAY(), $F2<100%)
Màu nền: #FF7043 (đỏ cam). Task đang trong khoảng thời gian này, đã qua ngày kết thúc nhưng chưa hoàn thành.
Rule 2 — Task đã hoàn thành 100% (xanh đậm):
=AND($D2<=G$1, $E2>=G$1, $F2=1)
Màu nền: #2E7D32 (xanh đậm). Lưu ý: nhập 1 thay vì 100% trong công thức.
Rule 3 — Task đang trong tiến độ (xanh lá):
=AND($D2<=G$1, $E2>=G$1)
Màu nền: #66BB6A (xanh lá). Đây là rule cơ bản — ô nằm trong khoảng ngày bắt đầu đến kết thúc của task.
Thêm một rule nữa cho cột "hôm nay" để dễ định vị:
=G$1=TODAY()
Màu nền: #FFF9C4 (vàng nhạt). Apply cho toàn bộ cột timeline — cột hôm nay sẽ nổi bật lên ngay.
Bước 4: Freeze Và Định Dạng Cho Dễ Nhìn
- Freeze cột A:F: View > Freeze > Up to column F — khi scroll ngang, phần thông tin task luôn hiển thị.
- Freeze hàng 1: View > Freeze > 1 row — header ngày luôn hiển thị khi scroll xuống.
- Thu hẹp độ rộng cột timeline về khoảng 25-30px để thấy nhiều ngày hơn trên một màn hình.
- Thu nhỏ chiều cao hàng xuống 20-22px cho Gantt Chart trông gọn hơn.
Cách 2: Thanh Tiến Độ Dùng SPARKLINE
Nếu bạn muốn một cách hiển thị khác — thanh progress bar đẹp hơn ngay trong một ô — SPARKLINE là lựa chọn tuyệt vời.
Công Thức SPARKLINE Cơ Bản
Trong cột G (hoặc bất kỳ cột nào bạn muốn hiển thị progress bar), nhập:
=SPARKLINE(F2, {"charttype","bar";"max",1;"color1","#4CAF50";"color2","#E0E0E0"})
Trong đó:
F2: Ô chứa % hoàn thành (0 đến 1, hoặc 0% đến 100%)."charttype","bar": Kiểu biểu đồ thanh ngang."max",1: Giá trị tối đa là 100% (=1)."color1","#4CAF50": Màu phần đã hoàn thành (xanh lá)."color2","#E0E0E0": Màu phần chưa hoàn thành (xám nhạt).
SPARKLINE Thông Minh — Đổi Màu Theo Trạng Thái
Kết hợp IF để tự động đổi màu khi task trễ:
=SPARKLINE(F2, {"charttype","bar";"max",1;"color1",IF(AND(E2<TODAY(),F2<1),"#F44336","#4CAF50");"color2","#E0E0E0"})
Khi task đã qua deadline và chưa hoàn thành, thanh progress sẽ tự động đổi sang màu đỏ (#F44336). Task đúng tiến độ hiển thị xanh lá (#4CAF50).
Khi Nào Dùng SPARKLINE Thay Vì Conditional Formatting?
| Tiêu Chí | Conditional Formatting | SPARKLINE |
|---|---|---|
| Nhìn tổng quan timeline | Tốt hơn (thấy từng ngày) | Không phù hợp |
| Hiển thị % hoàn thành trực quan | Hạn chế | Tốt hơn |
| Dự án dài (1-3 tháng) | Tốt | Không áp dụng |
| Dashboard tóm tắt | Không phù hợp | Tốt hơn |
| Độ phức tạp thiết lập | Trung bình | Thấp |
Lời khuyên: Dùng Conditional Formatting cho sheet Gantt Chart chính, và SPARKLINE cho sheet Dashboard để hiển thị tiến độ từng task một cách trực quan.
Cấu Trúc Template 3 Sheet Hoàn Chỉnh
Một template Gantt Chart chuyên nghiệp nên có 3 sheet riêng biệt, mỗi sheet phục vụ một mục đích.
Sheet 1: Gantt Chart Chính
Đây là sheet bạn đã tạo ở các bước trên — Gantt Chart timeline với màu sắc theo trạng thái. Thêm một cột "Ghi chú" ở cuối phần thông tin để note các vấn đề phát sinh.
Màu quy ước nên thống nhất toàn bộ template:
- Xanh lá (#66BB6A): Đang trong tiến độ
- Xanh đậm (#2E7D32): Đã hoàn thành 100%
- Đỏ cam (#FF7043): Trễ deadline
- Xám (#BDBDBD): Chưa bắt đầu (ngày bắt đầu còn ở tương lai)
- Vàng nhạt (#FFF9C4): Cột "Hôm nay"
Sheet 2: Danh Sách Task Chi Tiết
Sheet này chứa thông tin mở rộng của từng task mà Gantt Chart chính không đủ chỗ hiển thị:
| Tên Task | Mô Tả Chi Tiết | Phụ Thuộc Task | Ưu Tiên | Notes |
|---|---|---|---|---|
| Thiết kế UI | Thiết kế toàn bộ giao diện user-facing | — | Cao | Cần style guide trước |
| Phát triển backend | API endpoints + database schema | Thiết kế UI | Cao | Dùng PostgreSQL |
| Test + QA | Unit test + integration test + UAT | Backend | Trung bình | Cần test environment |
Cột "Phụ Thuộc Task" giúp bạn xác định critical path — những task mà nếu chậm sẽ kéo theo toàn bộ dự án chậm.
Sheet 3: Dashboard Dự Án
Dashboard tổng hợp các chỉ số quan trọng để báo cáo nhanh cho stakeholder:
Ô tóm tắt nhanh:
// Tổng số task
=COUNTA(B2:B100)-COUNTBLANK(B2:B100)
// Số task đã hoàn thành
=COUNTIF('Sheet1'!F2:F100,1)
// Số task đang làm (giữa tiến độ)
=COUNTIFS('Sheet1'!D2:D100,"<="&TODAY(),'Sheet1'!E2:E100,">="&TODAY(),'Sheet1'!F2:F100,"<1")
// Số task trễ deadline
=COUNTIFS('Sheet1'!E2:E100,"<"&TODAY(),'Sheet1'!F2:F100,"<1")
// % tiến độ tổng dự án
=AVERAGE('Sheet1'!F2:F100)
// Số ngày làm việc còn lại đến deadline
=NETWORKDAYS(TODAY(),MAX('Sheet1'!E2:E100))
Thêm SPARKLINE mini cho mỗi task ngay trong dashboard:
=SPARKLINE(VLOOKUP(A2,'Sheet1'!B:F,5,0), {"charttype","bar";"max",1;"color1","#4CAF50";"color2","#E8E8E8"})
Công Thức Thực Tế Hay Dùng Nhất
Tính Số Ngày Làm Việc Của Task
Không đếm thứ 7 và chủ nhật:
=NETWORKDAYS(D2,E2)-1
Tự Động Tính % Hoàn Thành Theo Ngày
Khi bạn không muốn nhập % thủ công, công thức này tự ước tính dựa trên ngày hôm nay:
=IF(E2<TODAY(), 1, IF(D2>TODAY(), 0, ROUND((TODAY()-D2)/(E2-D2), 2)))
Kết quả: Task chưa bắt đầu = 0, đã qua deadline = 100% (=1), đang làm = tỷ lệ ngày đã qua.
Highlight Critical Path
Áp dụng conditional formatting cho cột E (Ngày Kết Thúc) với công thức:
=E2=MAX($E$2:$E$100)
Task có ngày kết thúc muộn nhất — tức task quyết định deadline toàn dự án — sẽ được tô đỏ đậm tự động.
Điền Header Timeline Tự Động Theo Tháng
Nếu dự án kéo dài nhiều tháng và bạn muốn header hiển thị dạng "Tuần 1 Tháng 7" thay vì từng ngày:
// Hàng 1: Nhãn tuần
="Tuần "&WEEKNUM(G2,2)-WEEKNUM(DATE(YEAR(G2),MONTH(G2),1),2)+1&" T"&MONTH(G2)
// Hàng 2: Ngày đầu tuần (cộng 7 thay vì 1)
=G2+7
Milestone Marker (Dấu Mốc Quan Trọng)
Thêm hàng riêng cho milestone, dùng ký tự đặc biệt trong ô:
=IF(G$1=E2,"◆","")
Ngày kết thúc của milestone sẽ hiển thị ký hiệu ◆ trên timeline. Format ô này màu tím (#7B1FA2) để nổi bật.
Mẹo Nâng Cao Cho Gantt Chart Chuyên Nghiệp
1. Tô Nền Cuối Tuần Tự Động
Áp dụng conditional formatting cho toàn bộ vùng timeline (không phải chỉ hàng 1) với công thức:
=WEEKDAY(G$1,2)>=6
Màu nền: xám rất nhạt (#FAFAFA). Điều này tạo ra "vạch kẻ" cuối tuần xuyên suốt Gantt Chart, giúp planning tránh nhầm ngày nghỉ.
2. Thêm Cột Số Ngày Còn Lại
Thêm cột H trong phần thông tin task:
=MAX(0, NETWORKDAYS(TODAY(), E2))
Hiển thị số ngày làm việc còn lại. Áp dụng conditional formatting: dưới 3 ngày → đỏ, 3-7 ngày → vàng, hơn 7 ngày → xanh. Giúp nhận biết ngay task nào đang "nguy hiểm".
3. Dropdown Trạng Thái Chuẩn
Thêm cột "Trạng Thái" với Data Validation dropdown (Data > Data validation > Dropdown):
- Chưa bắt đầu
- Đang làm
- Đã xong
- Tạm dừng
- Hủy
Rồi dùng conditional formatting để tô màu cả hàng theo trạng thái — ví dụ hàng "Hủy" sẽ tô xám và gạch ngang text.
4. Export PDF Để Chia Sẻ Với Client
Vào File > Download > PDF (.pdf), chọn:
- Landscape orientation (nằm ngang)
- Fit to page: Width = 1 page, Height = tùy số task
- Bỏ tick "Show gridlines" để PDF trông gọn hơn
- Scale: 50-70% nếu timeline dài
5. Bảo Vệ Sheet Khỏi Chỉnh Sửa Nhầm
Sau khi thiết lập xong, protect Sheet 1 để team chỉ được chỉnh sửa cột F (% hoàn thành) và cột "Ghi chú":
Data > Protect sheets and ranges → chọn vùng được phép sửa → Save.
Ví Dụ Dự Án Thực Tế: Ra Mắt Sản Phẩm Web
Dưới đây là 5 task mẫu của một dự án ra mắt website thương mại điện tử, bắt đầu từ đầu tháng 7/2026:
| # | Task | Người PT | Bắt Đầu | Kết Thúc | % Hoàn Thành | Trạng Thái |
|---|---|---|---|---|---|---|
| 1 | Thiết kế UI/UX | Nam | 01/07 | 07/07 | 100% | Đã xong |
| 2 | Phát triển backend | Hùng | 05/07 | 18/07 | 60% | Đang làm |
| 3 | Phát triển frontend | Linh | 08/07 | 20/07 | 45% | Đang làm |
| 4 | Test + QA | Lan | 21/07 | 25/07 | 0% | Chưa bắt đầu |
| 5 | Deploy & Bàn giao | Hùng | 28/07 | 30/07 | 0% | Chưa bắt đầu |
Với cấu trúc này:
- Task 1 sẽ tô xanh đậm trên timeline (đã xong 100%).
- Task 2 và 3 tô xanh lá (đang trong tiến độ).
- Task 4 và 5 chưa có màu (chưa đến ngày bắt đầu).
- Cột 09/07 (hôm nay giả sử) sẽ tô vàng xuyên suốt các hàng.
Chỉ một nhìn vào Gantt Chart, bất kỳ thành viên nào trong team cũng hiểu ngay tình trạng dự án mà không cần họp.
Lỗi Thường Gặp Và Cách Sửa
Conditional formatting không hiển thị màu: Kiểm tra định dạng ô ngày — cả cột D, E lẫn hàng 1 timeline phải cùng format Date. Nếu một bên là text, phép so sánh <= sẽ không hoạt động.
SPARKLINE hiển thị lỗi #NUM!: Giá trị trong ô % hoàn thành phải là số từ 0 đến 1 (hoặc 0% đến 100% được format dạng percentage). Đừng nhập text như "60%".
Timeline nhảy không đúng ngày: Kiểm tra ô G1 — phải là công thức =DATE() hoặc một ngày thực sự, không phải text. Định dạng hiển thị không ảnh hưởng đến giá trị thực trong ô.
File chậm khi mở: Conditional formatting áp dụng cho vùng quá lớn (ví dụ: toàn bộ sheet) sẽ khiến Sheets tính toán nặng. Giới hạn vùng áp dụng chỉ đúng vùng có dữ liệu thực tế (ví dụ G2:AZ100 thay vì G:AZ).
Kết Luận
Gantt Chart trong Google Sheets không chỉ là giải pháp miễn phí thay thế phần mềm đắt tiền — với đúng cách thiết lập, nó thực sự linh hoạt và mạnh mẽ hơn nhiều công cụ chuyên dụng ở mức cơ bản.
Hai cách tiếp cận trong bài — Conditional Formatting cho cái nhìn timeline trực quan và SPARKLINE cho dashboard tiến độ — bổ trợ cho nhau hoàn hảo trong template 3 sheet. Bạn có thể bắt đầu với Cách 1 để có Gantt Chart đầy đủ, rồi thêm Sheet 3 với SPARKLINE khi cần báo cáo cho stakeholder.
Điểm mạnh nhất của giải pháp này: không cần học thêm phần mềm mới, không tốn phí subscription, và dữ liệu nằm trong Google Drive của bạn — có thể share, comment và cộng tác real-time như mọi Google Sheet khác.
Hãy tạo sheet mới ngay hôm nay, thiết lập 5 task đầu tiên của dự án đang có, và xem Gantt Chart hình thành trong vài phút. Một khi bạn có template, việc reuse cho dự án tiếp theo chỉ mất 5 phút.
Chia sẻ bài viết:
Tuân Hoang
Đội ngũ SheetStore
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.
