google-sheets
Cách dùng Google Apps Script tự động hóa Sheets cơ bản

Google Apps Script là gì?
Các hàm quen thuộc như SUMIF, QUERY, VLOOKUP đều tính toán dựa trên dữ liệu có sẵn trong bảng. Nhưng có những việc hàm không làm được, ví dụ: tự động ghi lại thời gian mỗi khi một dòng được cập nhật, hiện một menu riêng để chạy thao tác lặp lại chỉ bằng một cú click, hoặc gửi email khi có dữ liệu mới.
Google Apps Script là công cụ viết code (dựa trên JavaScript) tích hợp sẵn trong Google Sheets, Docs, Forms... cho phép điều khiển file bằng lệnh thay vì thao tác tay. Không cần cài đặt gì thêm, không cần biết lập trình chuyên sâu — bài này hướng dẫn từ con số 0: mở trình soạn thảo, chạy hàm đầu tiên, rồi tự động hóa 2 việc thực tế hay dùng nhất.
Bước 1: Mở trình soạn thảo Apps Script
- Mở file Google Sheets muốn thao tác.
- Vào menu Tiện ích mở rộng (Extensions) → Apps Script.
- Một tab mới hiện ra với file mặc định tên
Code.gs— đây là nơi viết code.
Mỗi file Sheets có một project Apps Script gắn riêng với nó (gọi là container-bound script), chỉ chạy được trên file này trừ khi bạn chủ động chia sẻ hoặc copy code sang file khác.
Bước 2: Viết và chạy hàm đầu tiên
Xóa nội dung mặc định trong Code.gs, dán đoạn sau:
function xinChao() {
SpreadsheetApp.getUi().alert("Xin chào! Script đã chạy thành công.");
}
Cách chạy thử:
- Bấm nút Run (▶) trên thanh công cụ (đảm bảo ô dropdown bên cạnh đang chọn đúng hàm
xinChao). - Lần chạy đầu tiên, Google sẽ yêu cầu cấp quyền (Authorization required). Bấm Review permissions, chọn tài khoản Google, sau đó bấm Advanced → Go to (tên project) (unsafe) → Allow. Bước này chỉ hiện một lần cho mỗi project vì script chưa được Google xác minh — đây là cơ chế bảo mật bình thường với script tự viết, không phải lỗi.
- Quay lại tab Sheets, nếu thấy hộp thoại "Xin chào! Script đã chạy thành công." là đã chạy đúng.
Bước 3: Tự động ghi thời gian chỉnh sửa bằng onEdit
Ví dụ thực tế hay gặp: cột A là nơi nhập dữ liệu, muốn cột B tự động ghi lại thời điểm chỉnh sửa mà không cần gõ tay. Google Apps Script có sẵn cơ chế simple trigger tên onEdit(e) — hàm này tự chạy mỗi khi có ô nào đó trong Sheets được sửa, không cần bấm Run.
function onEdit(e) {
var range = e.range;
var sheet = range.getSheet();
// Chỉ xử lý khi sửa cột A, từ dòng 2 trở đi (bỏ qua dòng tiêu đề)
if (range.getColumn() === 1 && range.getRow() > 1) {
var oCotB = sheet.getRange(range.getRow(), 2);
oCotB.setValue(new Date());
}
}
Dán đoạn này vào Code.gs (đặt đúng tên hàm là onEdit, không đổi tên), bấm Save (Ctrl+S). Không cần bấm Run — quay lại Sheets, thử sửa một ô bất kỳ ở cột A từ dòng 2 trở xuống, cột B cùng dòng sẽ tự hiện ngày giờ hiện tại.
Lưu ý quan trọng: onEdit dạng simple trigger chạy dưới quyền hạn chế, không dùng được các dịch vụ cần cấp quyền như gửi email (MailApp) hay gọi API bên ngoài (UrlFetchApp). Nếu cần làm việc đó, phải tạo installable trigger (bước 5 bên dưới).
Bước 4: Tạo menu tùy chỉnh trong Sheets
Muốn đồng nghiệp không biết code cũng dùng được script, tạo một menu riêng xuất hiện ngay trên thanh menu của Sheets bằng hàm onOpen:
function onOpen() {
SpreadsheetApp.getUi()
.createMenu("Công cụ")
.addItem("Chạy báo cáo", "chayBaoCao")
.addToUi();
}
function chayBaoCao() {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange("D1").setValue("Đã chạy lúc: " + new Date());
}
Lưu script, tải lại (F5) file Sheets — menu "Công cụ" sẽ xuất hiện trên thanh menu, bên trong có mục "Chạy báo cáo". Bấm vào đó sẽ ghi thời gian chạy vào ô D1. Đây là khung sườn để gắn bất kỳ thao tác lặp lại nào (xóa dữ liệu tạm, định dạng lại bảng, tổng hợp số liệu...) thành một cú click thay vì làm tay.
Bước 5: Tạo installable trigger để dùng được email, API
Khi cần các thao tác nâng cao hơn onEdit cho phép (ví dụ gửi email cảnh báo khi có dòng mới), tạo trigger cài đặt riêng:
- Trong trình soạn thảo Apps Script, bấm biểu tượng đồng hồ ở thanh bên trái (Triggers).
- Bấm Add Trigger (góc dưới bên phải).
- Chọn hàm cần chạy, sự kiện nguồn là From spreadsheet, loại sự kiện chọn On edit (hoặc On form submit, Time-driven tùy nhu cầu).
- Bấm Save, cấp quyền lại nếu được yêu cầu (vì lần này script được phép dùng thêm các dịch vụ cần xác thực).
Từ giờ hàm được gắn trigger sẽ tự chạy đúng sự kiện, và có thể dùng MailApp.sendEmail(...) hoặc các dịch vụ khác mà simple trigger không cho phép.
Bảng lỗi thường gặp khi mới học Apps Script
| Lỗi / hiện tượng | Nguyên nhân | Cách xử lý |
|---|---|---|
Exception: You do not have permission to call getUi khi bấm Run |
Hàm dùng getUi() chỉ chạy được khi gọi từ giao diện Sheets (menu, trigger), không chạy được khi bấm Run trực tiếp trong trình soạn thảo với vài phương thức UI |
Test bằng cách gọi qua menu tùy chỉnh hoặc trigger thay vì bấm Run cho các hàm có tương tác UI |
| onEdit viết đúng nhưng không tự chạy | Đặt sai tên hàm (phải đúng chữ onEdit, phân biệt hoa/thường) hoặc quên Save trước khi thử |
Kiểm tra lại tên hàm, bấm Ctrl+S trước khi quay lại Sheets thử |
| Trigger cấu hình rồi nhưng không thấy email gửi đi | Dùng MailApp trong simple trigger onEdit thay vì installable trigger |
Tạo installable trigger theo Bước 5, không viết MailApp trực tiếp trong hàm onEdit mặc định |
| "Authorization required" hiện lại nhiều lần | Bình thường khi vừa thêm quyền mới (ví dụ vừa thêm MailApp) — Google yêu cầu xác nhận lại phạm vi quyền | Bấm Review permissions và Allow lại như bước 2 |
| Script chạy quá chậm hoặc báo lỗi vượt giới hạn thời gian thực thi | Vòng lặp xử lý quá nhiều dòng dữ liệu trong một lần chạy | Giới hạn vùng dữ liệu xử lý, hoặc dùng getValues()/setValues() theo mảng thay vì đọc/ghi từng ô một trong vòng lặp |
Khi nào nên dùng Apps Script thay vì công thức?
- Cần một hành động tự động chạy theo sự kiện (mở file, sửa ô, gửi form) chứ không phải một giá trị tính toán trong ô.
- Cần thao tác vượt khả năng công thức: gửi email, tạo menu, đổi định dạng hàng loạt theo điều kiện phức tạp, làm việc với nhiều file/sheet cùng lúc.
- Muốn đóng gói một quy trình lặp lại thành nút bấm cho người không rành công thức cũng dùng được.
Nếu chỉ cần tính toán, tổng hợp dữ liệu hiển thị trong bảng, các hàm như QUERY, SUMIF, ARRAYFORMULA vẫn gọn và dễ bảo trì hơn — chỉ chuyển sang Apps Script khi công thức thực sự không đáp ứng được.
Học Google Sheets thực chiến tại TP Vinh
Google Apps Script là bước nâng cao sau khi đã nắm chắc các hàm và thao tác cơ bản trong Google Sheets. Nếu bạn muốn học từ nền tảng — hàm, xử lý dữ liệu, chia sẻ làm việc nhóm — trước khi tiến tới tự động hóa, tham khảo khóa học Google Sheets tại Điền Nguyễn AZ.
📞 Hotline / Zalo: 0362 465 361
👉 Xem chi tiết: Khóa học Google Sheets thực tế tại TP Vinh
Tài liệu miễn phí
30 phím tắt Excel hay dùng nhất
Tổng hợp phím tắt giúp thao tác Excel nhanh hơn — điền thông tin để tải file PDF miễn phí về dùng ngay.
Bài viết liên quan

14/09/2026
Cách gửi email tự động từ Google Sheets bằng Apps Script
Hướng dẫn dùng Google Apps Script để gửi email tự động từ dữ liệu trong Google Sheets: gửi hàng loạt cá nhân hóa, tránh gửi trùng và tự động chạy theo lịch hoặc khi có dữ liệu mới.

11/09/2026
Hàm ARRAYFORMULA trong Google Sheets: tính toán hàng loạt chỉ với 1 công thức
Hướng dẫn dùng ARRAYFORMULA trong Google Sheets để áp dụng 1 công thức cho cả cột dữ liệu thay vì kéo copy từng dòng. Có ví dụ cụ thể và lỗi thường gặp.

28/09/2026
Cách làm việc offline với Google Sheets (không lo mất mạng giữa chừng)
Hướng dẫn bật và dùng chế độ ngoại tuyến (offline) trong Google Sheets trên máy tính và điện thoại, những gì hoạt động/không hoạt động khi mất mạng, và cách đồng bộ an toàn khi có mạng trở lại.