Bảng tính trong công việc

GAS (Google Apps Script) là gì?
Nhập môn tự động hóa Google Trang tính

Mỗi tuần sắp lại bảng theo cùng một dạng. Xóa các hàng trống trong dữ liệu vừa dán. Đánh dấu các hàng thỏa điều kiện. Bảng tính đầy những việc có các bước cố định.

GAS (Google Apps Script) là thứ làm những việc như vậy một cách tự động. Bài viết này giới thiệu GAS làm được gì, bắt đầu từ đâu và cách vượt qua các màn hình “ủy quyền” mà nhiều người bị kẹt ở lần đầu.

GAS là gì?

GAS là cách Google chạy chương trình. Nó dùng cùng cú pháp với JavaScript và điều khiển được Google Trang tính cùng Gmail, Google Lịch, Google Drive và Google Biểu mẫu.

Chỉ cần một tài khoản Google. Miễn phí và không phải cài đặt gì: mở bảng tính trên trình duyệt rồi bắt đầu viết. Chương trình chạy trên máy chủ của Google, không phải trên máy tính của bạn.

Macro được ghi và GAS

Google Trang tính có “macro” ghi lại thao tác của bạn để chạy lại bao nhiêu lần cũng được. Bắt đầu ghi bằng “Tiện ích” → “Macro” → “Ghi macro”, chọn và nhập vào các ô, thao tác của bạn sẽ được lưu thành mã GAS.

Bản ghi: nhập “test” vào B2 và in đậm
/** @OnlyCurrentDoc */

function myFunction() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('B2').activate();
  spreadsheet.getCurrentCell().setValue('test');
  spreadsheet.getActiveRangeList().setFontWeight('bold');
};

Nghĩa là bên trong macro chính là GAS. Dù bạn đặt tên macro như “Thử in đậm”, hàm trong mã vẫn tên là myFunction. Tên hiện trên menu và tên hàm được lưu riêng.

Khi ghi, bạn chọn ở thanh phía dưới “Sử dụng tham chiếu tuyệt đối” hoặc “Sử dụng tham chiếu tương đối”. Tham chiếu tuyệt đối lưu thành địa chỉ ô như B2, nên macro luôn ghi vào cùng một chỗ dù đang chọn ô nào. Tham chiếu tương đối lưu thành “dưới ô hiện tại một hàng” và tính từ ô đang chọn.

Chỉ ghi macro thì không xử lý được bảng có số hàng thay đổi hay các bước phụ thuộc điều kiện. Từ đó trở đi, bạn đọc mã đã ghi rồi viết thêm.

Những việc làm được với GAS

  • Xóa hàng trống trong dữ liệu dán vào và chỉnh tiêu đề
  • Xem số tiền hoặc ngày rồi ghi “Lớn” hay “Quá hạn” vào một cột
  • Thêm menu riêng vào bảng tính và chạy việc như bấm nút
  • Tự viết hàm dùng trong ô (hàm tùy chỉnh)
  • Gửi email bằng Gmail dựa trên một bảng
  • Chạy việc vào giờ cố định, ví dụ 8 giờ sáng mỗi ngày (trình kích hoạt)
  • Chép câu trả lời Google Biểu mẫu sang trang tính khác ngay khi có

Làm tay, mỗi việc này mất từ vài phút đến vài chục phút. Viết một lần, sau đó chỉ cần bấm menu, hoặc nó tự chạy.

Cách bắt đầu với GAS

  1. Mở bảng tính và chọn “Tiện ích” → “Apps Script”
  2. Trình chỉnh sửa mở trong tab mới: bên trái là “Mã.gs”, bên phải có function myFunction() { }
  3. Viết mã bên trong { } rồi lưu (Ctrl+S, trên Mac ⌘+S)
  4. Bấm “▷ Chạy” ở trên. Kết quả hiện ở “Nhật ký thực thi” bên dưới
Script đầu tiên: đọc A1, ghi vào nhật ký và viết vào B1
function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const value = sheet.getRange('A1').getValue();
  Logger.log(value);
  sheet.getRange('B1').setValue('Đã kiểm tra');
}

Logger.log ghi một giá trị vào nhật ký thực thi. Số hiện kèm dấu chấm thập phân, ví dụ 120.0 (console.log hiện 120). Khi có gì không chạy như ý, hãy xem giá trị trong nhật ký trước.

Màn hình ủy quyền khi chạy lần đầu

Lần đầu chạy mã bạn viết, sẽ có màn hình hỏi script có được đọc và chỉnh sửa bảng tính của bạn không. Nhiều người kẹt ở đây, nên ta xem từng bước.

  1. “Cần được ủy quyền” → Xem lại quyền / OK
  2. Chọn tài khoản
  3. “Google chưa xác minh ứng dụng này” → “Nâng cao” ở góc dưới bên trái
  4. “Truy cập (tên dự án) (không an toàn)”
  5. Xem lại những gì bạn cho phép rồi bấm “Cho phép” (nếu có mục để chọn thì chọn rồi bấm “Tiếp tục”)

“Google chưa xác minh ứng dụng này” là cảnh báo cho các script chưa qua kiểm duyệt của Google. Script bạn tự viết và macro bạn tự ghi đều chưa được duyệt, nên màn hình này luôn hiện. Nếu là thứ bạn tự làm thì cứ yên tâm tiếp tục.

Ngược lại, nếu màn hình này hiện trong bảng tính người lạ gửi, hãy chọn “Quay lại trang an toàn”. Một khi đã cho phép, script có thể dùng tài khoản của bạn để thao tác với bảng tính và email.

Nếu viết /** @OnlyCurrentDoc */ ở đầu mã, script chỉ được chạm vào “bảng tính này” và quyền yêu cầu sẽ hẹp hơn. Macro được ghi có sẵn dòng này ngay từ đầu.

Bạn có thể thử đúng các bước này trong nhiệm vụ 1 của bài luyện.

Mã hay dùng

Đây là những thứ hay dùng nhất khi làm việc với bảng tính. Số hàng và cột bắt đầu từ 1, còn chỉ số của mảng đọc bằng getValues bắt đầu từ 0.

Cách viếtÝ nghĩa
const sheet = SpreadsheetApp.getActiveSheet();Trang tính đang mở
sheet.getRange('A1').getValue()Đọc giá trị của A1
sheet.getRange('A1').setValue('Đã hoàn thành')Ghi vào A1
sheet.getRange(2, 3)Hàng 2, cột 3 (C2). Cột có thể ghi bằng số
sheet.getRange('A2:C10').getValues()Đọc cả vùng một lần (mảng hai chiều)
sheet.getRange(2, 1, 9, 3).setValues(values)Ghi một lần (số hàng, cột khớp với mảng)
sheet.getLastRow()Số của hàng cuối cùng có giá trị
sheet.appendRow(['10/31', 'Sato', 5000])Thêm một hàng bên dưới hàng cuối
sheet.deleteRow(5)Xóa hàng 5 (các hàng bên dưới dồn lên)
sheet.getRange('A1:D1').setFontWeight('bold')In đậm
sheet.getRange('A1:D1').setBackground('#fff2cc')Đặt màu nền
Logger.log(value)Ghi vào nhật ký thực thi (để kiểm tra giá trị)
Lặp qua mọi hàng và chia trường hợp theo điều kiện
function judgeTargets() {
  const sheet = SpreadsheetApp.getActiveSheet();
  for (let row = 2; row <= sheet.getLastRow(); row++) {
    const sales = sheet.getRange(row, 2).getValue();
    const target = sheet.getRange(row, 3).getValue();
    if (sales >= target) {
      sheet.getRange(row, 4).setValue('Đạt');
    } else {
      sheet.getRange(row, 4).setValue('Chưa đạt');
    }
  }
}
Thêm menu riêng khi mở tệp (onOpen)
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('Xử lý cuối tháng')
    .addItem('Đánh dấu đơn lớn', 'markLarge')
    .addToUi();
}

Hàm tên onOpen tự chạy khi mở bảng tính. Nếu chạy bằng “▷ Chạy” trong trình chỉnh sửa sẽ gặp lỗi Cannot call SpreadsheetApp.getUi() from this context., vì vậy hãy lưu rồi mở lại bảng tính để kiểm tra.

Gửi email và chạy theo lịch bằng trình kích hoạt

Với GAS, người ta tìm nhiều nhất là gửi email và trình kích hoạt.

Gửi email đến các địa chỉ trong bảng
function sendReminders() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, 2).getValues();
  rows.forEach(([name, email]) => {
    MailApp.sendEmail(email, 'Nhắc hạn nộp', name + ',\n\nhạn nộp là thứ Sáu tuần này.');
  });
}

Có giới hạn gửi: tài khoản Google miễn phí gửi được tối đa 100 email mỗi ngày (tài khoản Google Workspace nhiều hơn). Mỗi lần chạy tối đa 6 phút; quá thời gian sẽ dừng với “Exceeded maximum execution time”.

Để chạy theo lịch, bấm “Trình kích hoạt” (biểu tượng đồng hồ) bên trái trình chỉnh sửa → “Thêm trình kích hoạt”, rồi chọn hàm và “Theo thời gian”. Có thể đặt khung giờ mỗi ngày, mỗi tuần hoặc mỗi tháng.

Email sẽ thật sự được gửi dù bạn chỉ chạy thử. Hãy thử trước với bảng chỉ có địa chỉ của chính bạn.

Khác biệt với VBA của Excel

GASVBA của Excel
Cách viếtJavaScriptVBA(Visual Basic)
Nơi chạyMáy chủ của GoogleExcel trên máy tính của bạn
Cần cóTrình duyệt và tài khoản GoogleExcel bản cài trên máy (chủ yếu trên Windows)
Kết nối vớiGmail, Lịch, Drive, Biểu mẫuWord, Outlook, tệp trên máy tính
Chạy theo giờ cố địnhDùng trình kích hoạt (chạy cả khi máy tính tắt)Kết hợp với Task Scheduler của Windows hoặc công cụ tương tự

Cả hai có cùng ý tưởng: đọc ô, ghi ô, lặp và chia trường hợp theo điều kiện. Biết một cái là đọc được cái kia. Macro Excel được giới thiệu trong bài nhập môn macro Excel.

Luyện tập trên trình duyệt

Trong mô phỏng macro và GAS của trang này, bạn luyện bằng cách chạy mã thật trong bảng tính và trình chỉnh sửa Apps Script ảo. Bạn điền vào chỗ trống trong mã, còn trên điện thoại thì chọn mỗi chỗ trống trong bốn lựa chọn.

  1. Chương 1 Ghi và chạy macro

    Chạy macro đã ghi và tự ghi một macro. Tham chiếu tuyệt đối và tương đối, cách đọc và sửa mã đã ghi.

  2. Chương 2 Đọc, lặp, chia trường hợp

    Đọc ô bằng getValue, ghi bằng setValue và kiểm tra giá trị trong nhật ký thực thi. Lặp qua mọi hàng bằng for và chia trường hợp bằng if.

  3. Chương 3 Tình huống thực tế: chỉnh lại bảng doanh thu tháng

    Xóa hàng trống, đánh dấu đơn lớn một lần và chạy từ menu riêng. Cuối cùng là hàm tự viết dùng trong ô.

Bắt đầu mô phỏng (13 nhiệm vụ) →

Cách học GAS

Cách bắt đầu tốt là “Ghi macro” trong một bảng tính của chính bạn rồi đọc mã được tạo ra. Như vậy dễ thấy mỗi lệnh làm gì.

AI tạo sinh cũng viết được mã. Nhưng để biết mã đó đúng không và cần sửa ở đâu, bạn phải đọc được ít nhất phần “mã hay dùng” trong bài này.

* Tên màn hình và giới hạn tính đến tháng 10 năm 2026; có thể thay đổi theo cập nhật của Google.

* Google Trang tính là nhãn hiệu của Google LLC. Trang web này không liên quan đến Google.