Google Sheets Tips

Cách Tạo Form Nhập Liệu Tự Động Trên Google Sheets (Không Cần Code)

Tuân HoangTuân Hoang
27 tháng 2, 2026
Cập nhật: 25 tháng 3, 2026
20 phút đọc
Cách Tạo Form Nhập Liệu Tự Động Trên Google Sheets (Không Cần Code)

Giới Thiệu: Tại Sao Cần Form Nhập Liệu Tự Động Trên Google Sheets?

Bạn đã bao giờ gặp tình huống: nhân viên nhập sai định dạng ngày tháng, gõ nhầm tên sản phẩm, hoặc bỏ trống những ô bắt buộc? Với một bảng tính Google Sheets thông thường, những lỗi nhập liệu kiểu này xảy ra hàng ngày và gây ra hậu quả nghiêm trọng: báo cáo sai, thống kê lệch, mất thời gian sửa lỗi.

Giải pháp là tạo form nhập liệu tự động ngay trên Google Sheets. Thay vì để người dùng tự gõ dữ liệu, bạn thiết kế các ô nhập liệu có kiểm soát: dropdown chọn sẵn, checkbox đánh dấu, validation kiểm tra định dạng, và auto-fill tự điền thông tin liên quan. Kết quả là dữ liệu luôn chính xác, đồng nhất và tiết kiệm thời gian.

Bài viết này dành cho ai?

  • Nhân viên văn phòng cần tạo bảng nhập liệu chuẩn cho team
  • Quản lý muốn kiểm soát chất lượng dữ liệu đầu vào
  • Chủ doanh nghiệp nhỏ cần form đặt hàng, chấm công đơn giản
  • Người mới bắt đầu với Google Sheets, chưa biết code
  • Bất kỳ ai muốn nâng cấp bảng tính từ "bảng trắng" thành "form thông minh"

Lợi ích khi tạo form nhập liệu tự động:

  • Giảm 90% lỗi nhập liệu nhờ dropdown và validation
  • Tiết kiệm 50% thời gian nhờ auto-fill thông tin liên quan
  • Dữ liệu đồng nhất - không còn tình trạng mỗi người gõ một kiểu
  • Dễ thống kê, lọc, báo cáo vì dữ liệu có cấu trúc chuẩn
  • Không cần biết code - chỉ dùng tính năng có sẵn của Google Sheets

Bước 1: Thiết Kế Cấu Trúc Bảng Dữ Liệu

Trước khi tạo form, bạn cần thiết kế cấu trúc bảng dữ liệu hợp lý. Đây là bước nền tảng quyết định form của bạn có dễ sử dụng hay không.

1.1. Thiết kế Header (Tiêu đề cột)

Header là hàng đầu tiên của bảng, chứa tên các trường dữ liệu. Hãy đặt tên rõ ràng, ngắn gọn và dễ hiểu:

Cột Tên header Kiểu dữ liệu Ghi chú
A Mã đơn hàng Text (auto) Tự sinh bằng công thức
B Ngày đặt Date Date picker
C Khách hàng Text (dropdown) Chọn từ danh sách
D Sản phẩm Text (dropdown) Chọn từ danh sách
E Số lượng Number Chỉ cho phép số nguyên dương
F Đơn giá Number (auto) Tự điền từ bảng sản phẩm
G Thành tiền Number (auto) = Số lượng x Đơn giá
H Đã thanh toán Checkbox TRUE/FALSE

1.2. Quy tắc đặt tên và định dạng

  • Header in đậm, nền màu: Chọn hàng 1, bôi đậm (Ctrl+B), đặt nền màu xanh nhạt để phân biệt
  • Freeze header: Vào View > Freeze > 1 row để header luôn hiển thị khi cuộn xuống
  • Đặt tên rõ ràng: Không viết tắt ("SL" thay vì "Số lượng"), không dùng ký tự đặc biệt
  • Mỗi cột một loại dữ liệu: Không trộn text và số trong cùng một cột
  • Tách sheet dữ liệu gốc: Tạo sheet riêng (ví dụ: "DanhMuc") để chứa danh sách sản phẩm, khách hàng

Lưu ý quan trọng:

Luôn tạo một sheet riêng (thường gọi là "DanhMuc" hoặc "Data") để chứa các danh sách dropdown. Không nhập trực tiếp danh sách vào Data Validation vì sẽ khó quản lý khi danh sách thay đổi.

1.3. Tạo sheet danh mục dữ liệu

Tạo một sheet mới tên "DanhMuc" với các danh sách sau:

Sheet "DanhMuc":

Cột A: Danh sách sản phẩm     Cột B: Đơn giá      Cột C: Danh mục
-------------------------------------------------------------------
Áo thun nam                    150,000              Thời trang
Áo thun nữ                     130,000              Thời trang
Quần jeans nam                 350,000              Thời trang
Quần jeans nữ                  320,000              Thời trang
Giày sneaker                   500,000              Giày dép
Giày cao gót                   450,000              Giày dép
Balo laptop                    280,000              Phụ kiện
Ví da nam                      200,000              Phụ kiện

Cột E: Khách hàng              Cột F: SĐT          Cột G: Địa chỉ
-------------------------------------------------------------------
Nguyễn Văn A                   0901234567           Hà Nội
Trần Thị B                     0912345678           TP.HCM
Lê Văn C                       0923456789           Đà Nẵng
Phạm Thị D                     0934567890           Hải Phòng

Bước 2: Tạo Dropdown List (Data Validation)

Dropdown list là tính năng quan trọng nhất khi tạo form nhập liệu. Thay vì gõ tay, người dùng chỉ cần click chọn từ danh sách có sẵn. Điều này đảm bảo dữ liệu luôn chính xác và đồng nhất.

2.1. Cách tạo Dropdown từ danh sách trong sheet (List from a range)

Đây là cách phổ biến nhất và linh hoạt nhất. Danh sách dropdown được lấy từ một vùng dữ liệu trong sheet khác, khi bạn thêm/xóa item trong danh sách gốc thì dropdown tự cập nhật.

Các bước thực hiện:

  1. Chọn ô hoặc vùng ô cần tạo dropdown (ví dụ: cột D - "Sản phẩm", chọn D2:D100)
  2. Vào menu Data > Data validation
  3. Trong phần Criteria, chọn "Dropdown (from a range)"
  4. Nhập vùng dữ liệu: DanhMuc!A2:A100 (cột sản phẩm trong sheet DanhMuc)
  5. Tại mục "If the data is invalid", chọn "Reject input" để không cho phép nhập giá trị ngoài danh sách
  6. Nhấn Done

Kết quả:

Khi click vào ô D2, một mũi tên dropdown xuất hiện. Click vào đó sẽ hiện danh sách sản phẩm để chọn. Nếu cố gõ giá trị không có trong danh sách, Google Sheets sẽ báo lỗi và từ chối.

2.2. Cách tạo Dropdown từ danh sách nhập tay (List of items)

Phù hợp khi danh sách ngắn và cố định, ví dụ: trạng thái đơn hàng, mức ưu tiên, phương thức thanh toán.

  1. Chọn vùng ô cần tạo dropdown
  2. Vào Data > Data validation
  3. Chọn "Dropdown"
  4. Nhập các giá trị, mỗi giá trị trên một dòng: Chờ xử lý, Đang giao, Đã giao, Đã hủy
  5. Bạn có thể chọn màu cho từng giá trị để phân biệt trực quan
  6. Nhấn Done

Mẹo hay:

Google Sheets cho phép gán màu cho từng option trong dropdown. Ví dụ: "Chờ xử lý" = vàng, "Đang giao" = xanh dương, "Đã giao" = xanh lá, "Đã hủy" = đỏ. Điều này giúp nhìn nhanh trạng thái mà không cần đọc.

2.3. Dropdown với Custom Formula

Khi bạn cần dropdown thông minh hơn, ví dụ chỉ hiển thị sản phẩm còn hàng, hoặc chỉ hiển thị khách hàng thuộc khu vực đã chọn, hãy dùng custom formula.

// Criteria: Custom formula is
// Chỉ cho phép chọn sản phẩm có tồn kho > 0
=COUNTIF(DanhMuc!A:A, D2) > 0

// Dropdown chỉ hiển thị sản phẩm thuộc danh mục đã chọn ở cột C
// (Sẽ học chi tiết ở phần Dependent Dropdown bên dưới)

Bước 3: Checkbox và Date Picker

Ngoài dropdown, Google Sheets cung cấp hai công cụ nhập liệu hữu ích khác: Checkbox cho dữ liệu đúng/sai, và Date Picker cho dữ liệu ngày tháng.

3.1. Tạo Checkbox

Checkbox phù hợp cho các trường: Đã thanh toán (Có/Không), Đã hoàn thành, Chọn để xóa, Đồng ý điều khoản.

  1. Chọn vùng ô cần tạo checkbox (ví dụ: H2:H100 - cột "Đã thanh toán")
  2. Vào menu Insert > Checkbox
  3. Ngay lập tức, các ô được chọn sẽ hiển thị checkbox
  4. Click vào checkbox để đánh dấu (TRUE) hoặc bỏ dấu (FALSE)

Ứng dụng thực tế:

Kết hợp checkbox với COUNTIF để đếm số đơn đã thanh toán:

=COUNTIF(H2:H100, TRUE) & "/" & COUNTA(A2:A100) & " đơn đã thanh toán"

Hoặc tính tổng tiền đã thanh toán:

=SUMIF(H2:H100, TRUE, G2:G100)

3.2. Checkbox với giá trị tùy chỉnh

Mặc định checkbox trả về TRUE/FALSE. Bạn có thể đổi thành giá trị khác:

  1. Chọn vùng checkbox
  2. Vào Data > Data validation
  3. Chọn Checkbox
  4. Tick vào "Use custom cell values"
  5. Nhập: Checked = Đã TT, Unchecked = Chưa TT

3.3. Date Picker (Chọn ngày)

Để đảm bảo người dùng nhập đúng định dạng ngày tháng, hãy thiết lập Date Validation:

  1. Chọn cột ngày tháng (ví dụ: B2:B100 - cột "Ngày đặt")
  2. Vào Data > Data validation
  3. Criteria: chọn "Is valid date"
  4. Chọn "Reject input" nếu không phải ngày hợp lệ
  5. Nhấn Done

Bây giờ khi double-click vào ô, một date picker sẽ xuất hiện để người dùng chọn ngày bằng cách click, thay vì phải gõ tay.

Mẹo định dạng ngày:

Sau khi thiết lập validation, hãy format cột ngày theo định dạng mong muốn: chọn cột > Format > Number > Date. Chọn định dạng phù hợp với Việt Nam như dd/MM/yyyy để hiển thị 14/02/2026 thay vì 2/14/2026.

Bước 4: Conditional Formatting - Tô Màu Tự Động Theo Điều Kiện

Conditional Formatting giúp bảng dữ liệu "sống động" hơn bằng cách tự động tô màu các ô theo điều kiện. Điều này giúp phát hiện lỗi nhanh, nhìn tổng quan trạng thái và highlight thông tin quan trọng.

4.1. Tô màu hàng theo trạng thái đơn hàng

Mục tiêu: Toàn bộ hàng đổi màu nền dựa vào cột trạng thái.

  1. Chọn toàn bộ vùng dữ liệu: A2:H100
  2. Vào Format > Conditional formatting
  3. Thêm các rule sau:
Rule 1: Đơn đã giao - nền xanh lá nhạt
  Format rules: Custom formula is
  Công thức: =$I2="Đã giao"
  Formatting style: Nền #D5F5E3 (xanh lá nhạt)

Rule 2: Đơn đã hủy - nền đỏ nhạt, chữ gạch ngang
  Công thức: =$I2="Đã hủy"
  Formatting style: Nền #FADBD8, chữ gạch ngang (strikethrough)

Rule 3: Đơn chờ xử lý - nền vàng nhạt
  Công thức: =$I2="Chờ xử lý"
  Formatting style: Nền #FEF9E7

Rule 4: Đơn đang giao - nền xanh dương nhạt
  Công thức: =$I2="Đang giao"
  Formatting style: Nền #D6EAF8

Lưu ý quan trọng:

Trong công thức, dùng $I2 (có dấu $ trước cột, không có $ trước hàng). Dấu $ giúp cố định cột I (cột trạng thái), còn hàng thay đổi theo từng dòng. Nếu thiếu dấu $, conditional formatting sẽ không hoạt động đúng.

4.2. Highlight ô trống bắt buộc

Tô đỏ các ô bắt buộc nhưng còn trống để nhắc nhở người dùng điền:

// Chọn vùng cột "Khách hàng" (C2:C100)
// Custom formula is:
=AND($C2="", $A2<>"")

// Giải thích: Nếu cột khách hàng trống ($C2="")
// nhưng cột mã đơn hàng có dữ liệu ($A2<>"")
// thì tô nền đỏ nhạt - báo hiệu ô bắt buộc chưa điền

// Format: Nền #F5B7B1 (đỏ nhạt), viền đỏ

4.3. Color Scale cho số liệu

Dùng Color Scale để tạo hiệu ứng gradient cho cột số liệu (thành tiền, doanh thu). Giá trị thấp = xanh lá, cao = đỏ.

  1. Chọn cột thành tiền (G2:G100)
  2. Vào Format > Conditional formatting
  3. Chọn tab "Color scale"
  4. Minpoint: Trắng, Midpoint: Vàng, Maxpoint: Xanh lá đậm
  5. Nhấn Done

Bước 5: Data Validation Nâng Cao

Ngoài dropdown và date picker, Data Validation còn cho phép kiểm tra nhiều điều kiện phức tạp hơn bằng custom formula. Đây là cách để đảm bảo dữ liệu nhập vào đúng định dạng.

5.1. Validate số điện thoại Việt Nam

Chỉ cho phép nhập số điện thoại đúng định dạng 10 chữ số, bắt đầu bằng 0:

// Chọn cột SĐT, vào Data > Data validation
// Criteria: Custom formula is

=AND(LEN(F2)=10, LEFT(F2,1)="0", ISNUMBER(VALUE(F2)))

// Giải thích:
// LEN(F2)=10       - Đúng 10 ký tự
// LEFT(F2,1)="0"   - Bắt đầu bằng số 0
// ISNUMBER(VALUE(F2)) - Toàn bộ là số

// Cách khác dùng REGEXMATCH (mạnh hơn):
=REGEXMATCH(F2, "^0[0-9]{9}$")

// Giải thích regex:
// ^0      - Bắt đầu bằng 0
// [0-9]{9} - Tiếp theo là 9 chữ số
// $       - Kết thúc

5.2. Validate email

// Custom formula is:
=REGEXMATCH(E2, "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$")

// Giải thích:
// Kiểm tra email có đúng định dạng: ten@domain.com
// Cho phép: nguyen.van.a@gmail.com, info@sheet.com.vn
// Từ chối: abc, abc@, @gmail.com, abc@.com

5.3. Validate số lượng (số nguyên dương)

// Cách 1: Dùng sẵn "Number" criteria
// Data validation > Criteria: Number > between > 1 và 10000

// Cách 2: Custom formula (linh hoạt hơn)
=AND(ISNUMBER(E2), E2=INT(E2), E2>0, E2<=10000)

// Giải thích:
// ISNUMBER(E2)   - Phải là số
// E2=INT(E2)     - Phải là số nguyên (không có phần thập phân)
// E2>0          - Lớn hơn 0
// E2<=10000     - Không quá 10,000 (tùy chỉnh)

5.4. Reject vs Warning Mode

Khi thiết lập Data Validation, bạn có 2 tùy chọn cho dữ liệu không hợp lệ:

Mode Hành vi Khi nào dùng
Reject input Không cho phép nhập giá trị sai. Hiện popup cảnh báo và xóa giá trị vừa nhập. Khi dữ liệu BẮT BUỘC phải chính xác (mã SP, SĐT, email)
Show warning Cho phép nhập nhưng hiện cảnh báo (tam giác cam góc ô). Hover sẽ thấy thông báo lỗi. Khi muốn linh hoạt hơn, cho phép ngoại lệ (ghi chú, mô tả)

Mẹo thêm thông báo lỗi tùy chỉnh:

Trong phần Data validation, có mục "Advanced options". Tại đây bạn có thể nhập thông báo tùy chỉnh hiển thị khi người dùng nhập sai. Ví dụ: "Vui lòng nhập số điện thoại 10 chữ số bắt đầu bằng 0".

Bước 6: Tạo Dependent Dropdown (Dropdown Phụ Thuộc)

Dependent dropdown (hay cascade dropdown) là loại dropdown mà danh sách ở dropdown thứ hai phụ thuộc vào giá trị đã chọn ở dropdown thứ nhất. Ví dụ: chọn "Danh mục = Thời trang" thì dropdown "Sản phẩm" chỉ hiện các sản phẩm thời trang.

Đây là kỹ thuật nâng cao nhưng cực kỳ hữu ích. Có 2 cách thực hiện:

6.1. Cách 1: Dùng INDIRECT + Named Ranges

Bước 1: Tạo danh sách theo nhóm trong sheet DanhMuc

Sheet "DanhMuc":

Cột A: Thời_trang     Cột B: Giày_dép      Cột C: Phụ_kiện
---------------------------------------------------------------
Áo thun nam            Giày sneaker          Balo laptop
Áo thun nữ             Giày cao gót          Ví da nam
Quần jeans nam         Dép sandal            Mũ lưỡi trai
Quần jeans nữ          Giày boot             Thắt lưng da
Áo khoác               Giày thể thao         Kính mát

Bước 2: Tạo Named Ranges cho từng danh sách

  1. Chọn vùng A2:A6 trong sheet DanhMuc (danh sách Thời trang)
  2. Vào Data > Named ranges
  3. Đặt tên: Thời_trang (phải dùng dấu gạch dưới thay khoảng trắng)
  4. Nhấn Done
  5. Lặp lại cho B2:B6 = Giày_dép, C2:C6 = Phụ_kiện

Bước 3: Tạo dropdown cấp 1 (Danh mục)

  1. Chọn cột C (Danh mục) trong sheet nhập liệu
  2. Data validation > Dropdown: Thời trang, Giày dép, Phụ kiện

Bước 4: Tạo dropdown cấp 2 (Sản phẩm) phụ thuộc cấp 1

  1. Chọn cột D (Sản phẩm)
  2. Data validation > Dropdown (from a range)
  3. Nhập công thức: =INDIRECT(SUBSTITUTE(C2," ","_"))
// Công thức INDIRECT(SUBSTITUTE(C2," ","_"))
//
// Hoạt động:
// 1. C2 = "Thời trang" (giá trị người dùng chọn ở dropdown cấp 1)
// 2. SUBSTITUTE(C2," ","_") = "Thời_trang" (thay khoảng trắng bằng _)
// 3. INDIRECT("Thời_trang") = trả về vùng dữ liệu của Named Range "Thời_trang"
// 4. Dropdown sẽ hiển thị: Áo thun nam, Áo thun nữ, Quần jeans nam, ...

Lưu ý quan trọng với Named Ranges:

  • Tên Named Range không được có khoảng trắng, phải thay bằng dấu gạch dưới (_)
  • Tên Named Range phải trùng khớp chính xác với giá trị dropdown cấp 1 (sau khi thay khoảng trắng)
  • Nếu thêm sản phẩm mới, phải cập nhật Named Range cho phù hợp

6.2. Cách 2: Dùng FILTER trong Data Validation (Đơn giản hơn)

Nếu dữ liệu trong sheet DanhMuc có cấu trúc dạng bảng (cột A: Sản phẩm, cột B: Danh mục), bạn có thể dùng FILTER:

// Sheet DanhMuc có cấu trúc:
// Cột A: Tên sản phẩm | Cột B: Danh mục
// Áo thun nam          | Thời trang
// Giày sneaker         | Giày dép
// ...

// Tạo một cột phụ trong sheet nhập liệu (ẩn cột này sau)
// Ở cột ẩn, dùng công thức:
=IFERROR(FILTER(DanhMuc!A:A, DanhMuc!B:B=C2), "")

// Sau đó, Data validation của cột D (Sản phẩm)
// tham chiếu đến cột phụ này

Bước 7: Auto-Fill Thông Tin Liên Quan

Một trong những tính năng hay nhất của form nhập liệu là tự động điền thông tin khi người dùng chọn một giá trị từ dropdown. Ví dụ: chọn sản phẩm thì đơn giá tự điền, chọn khách hàng thì SĐT và địa chỉ tự điền.

7.1. VLOOKUP - Tự điền đơn giá khi chọn sản phẩm

// Ô F2 (cột Đơn giá) - tự điền khi chọn sản phẩm ở D2
=IFERROR(VLOOKUP(D2, DanhMuc!A:B, 2, FALSE), "")

// Giải thích:
// D2: Sản phẩm đã chọn từ dropdown
// DanhMuc!A:B: Bảng tra cứu (cột A = tên SP, cột B = đơn giá)
// 2: Lấy giá trị cột thứ 2 (đơn giá)
// FALSE: Tra cứu chính xác
// IFERROR(..., ""): Nếu chưa chọn SP, hiện ô trống thay vì #N/A

7.2. INDEX-MATCH - Tự điền SĐT và Địa chỉ khi chọn khách hàng

// Ô J2 (SĐT) - tự điền khi chọn khách hàng ở C2
=IFERROR(INDEX(DanhMuc!F:F, MATCH(C2, DanhMuc!E:E, 0)), "")

// Ô K2 (Địa chỉ) - tự điền khi chọn khách hàng ở C2
=IFERROR(INDEX(DanhMuc!G:G, MATCH(C2, DanhMuc!E:E, 0)), "")

// Giải thích INDEX-MATCH:
// MATCH(C2, DanhMuc!E:E, 0): Tìm vị trí của tên KH trong cột E
// INDEX(DanhMuc!F:F, ...): Lấy giá trị SĐT tại vị trí tìm được
// Ưu điểm hơn VLOOKUP: cột tra cứu không cần ở bên trái

7.3. Tự tính Thành tiền

// Ô G2 (Thành tiền) = Số lượng x Đơn giá
=IFERROR(E2 * F2, "")

// Hoặc dùng ARRAYFORMULA để áp dụng cho toàn bộ cột (chỉ cần gõ 1 lần ở G2):
=ARRAYFORMULA(IF(E2:E * F2:F = 0, "", E2:E * F2:F))

// Công thức ARRAYFORMULA sẽ tự tính cho tất cả các hàng
// Khi E hoặc F trống thì G cũng trống (nhờ IF kiểm tra = 0)

7.4. Tự sinh mã đơn hàng

// Ô A2 - Tự sinh mã đơn hàng khi có dữ liệu ở hàng đó
=IF(B2="", "", "DH-" & TEXT(ROW()-1, "0000"))

// Kết quả: DH-0001, DH-0002, DH-0003, ...

// Hoặc mã theo ngày:
=IF(B2="", "", "DH" & TEXT(B2, "YYMMDD") & "-" & TEXT(ROW()-1, "000"))
// Kết quả: DH260214-001, DH260214-002, ...

// Dùng ARRAYFORMULA cho toàn cột:
=ARRAYFORMULA(IF(B2:B="", "", "DH-" & TEXT(ROW(B2:B)-1, "0000")))

Tổng kết Auto-fill:

Với các công thức trên, người dùng chỉ cần nhập 3 thông tin: Ngày đặt, Khách hàng, Sản phẩm, Số lượng. Các trường còn lại (Mã đơn, Đơn giá, Thành tiền, SĐT, Địa chỉ) sẽ tự động điền. Tiết kiệm hơn 50% thời gian nhập liệu!

Bước 8: Bảo Vệ Sheet & Lock Columns

Sau khi thiết lập form, bạn cần bảo vệ các ô công thứcchỉ cho phép nhập liệu vào các ô cần thiết. Nếu không, người dùng có thể vô tình xóa công thức hoặc sửa cấu trúc bảng.

8.1. Protect Sheet - Bảo vệ toàn bộ sheet

  1. Click phải vào tab sheet > chọn "Protect sheet"
  2. Hoặc vào Data > Protect sheets and ranges
  3. Chọn "Sheet", tick vào sheet cần bảo vệ
  4. Click "Set permissions"
  5. Chọn "Only you" hoặc thêm người có quyền chỉnh sửa
  6. Tick "Except certain cells" và nhập các vùng cho phép nhập liệu

8.2. Cho phép nhập liệu vào các ô cụ thể

// Khi bảo vệ sheet, loại trừ (cho phép edit) các vùng sau:
// B2:B100   - Cột Ngày đặt (người dùng nhập)
// C2:C100   - Cột Khách hàng (dropdown)
// D2:D100   - Cột Sản phẩm (dropdown)
// E2:E100   - Cột Số lượng (người dùng nhập)
// H2:H100   - Cột Đã thanh toán (checkbox)
// I2:I100   - Cột Trạng thái (dropdown)

// Các cột sau sẽ bị KHÓA (không cho sửa):
// A         - Mã đơn hàng (auto-generate)
// F         - Đơn giá (auto-fill từ VLOOKUP)
// G         - Thành tiền (auto-calculate)
// Hàng 1    - Header

8.3. Bảo vệ sheet DanhMuc

Sheet DanhMuc chứa dữ liệu gốc cho dropdown, chỉ admin mới được sửa:

  1. Click phải vào tab "DanhMuc" > Protect sheet
  2. Chọn "Only you" (chỉ chủ sheet mới sửa được)
  3. Không loại trừ ô nào

Lưu ý:

Bạn có thể ẩn sheet DanhMuc bằng cách click phải vào tab > "Hide sheet". Người dùng sẽ không thấy sheet này nhưng các công thức vẫn hoạt động bình thường. Để mở lại: View > Hidden sheets > DanhMuc.

Ví Dụ Thực Tế 1: Form Đặt Hàng Hoàn Chỉnh

Bây giờ hãy kết hợp tất cả các kỹ thuật trên để xây dựng một form đặt hàng hoàn chỉnh, từng bước một.

Bước 1: Tạo 2 sheet

Sheet 1: "DonHang" (sheet nhập liệu chính)
Sheet 2: "DanhMuc" (dữ liệu gốc, ẩn sau khi setup)

// Sheet "DanhMuc" - Bảng sản phẩm:
// A1: Tên SP | B1: Mã SP | C1: Đơn giá | D1: Tồn kho | E1: Danh mục
// A2: Áo thun nam    | B2: SP001 | C2: 150000 | D2: 200 | E2: Thời trang
// A3: Áo thun nữ     | B3: SP002 | C3: 130000 | D3: 150 | E3: Thời trang
// A4: Quần jeans nam  | B4: SP003 | C4: 350000 | D4: 100 | E4: Thời trang
// A5: Giày sneaker    | B5: SP004 | C5: 500000 | D5: 80  | E5: Giày dép
// A6: Balo laptop     | B6: SP005 | C6: 280000 | D6: 60  | E6: Phụ kiện

// Sheet "DanhMuc" - Bảng khách hàng:
// G1: Tên KH | H1: SĐT | I1: Email | J1: Địa chỉ
// G2: Nguyễn Văn A | H2: 0901234567 | I2: a@gmail.com | J2: Hà Nội
// G3: Trần Thị B   | H3: 0912345678 | I3: b@gmail.com | J3: TP.HCM
// G4: Lê Văn C     | H4: 0923456789 | I4: c@gmail.com | J4: Đà Nẵng

Bước 2: Thiết kế header cho sheet DonHang

// Hàng 1 (Header) - in đậm, nền xanh #4285F4, chữ trắng:
// A1: Mã ĐH | B1: Ngày | C1: Khách hàng | D1: SĐT | E1: Địa chỉ
// F1: Sản phẩm | G1: SL | H1: Đơn giá | I1: Thành tiền
// J1: Thanh toán | K1: Trạng thái | L1: Ghi chú

// Freeze hàng 1: View > Freeze > 1 row
// Chỉnh width cột cho phù hợp

Bước 3: Thiết lập các dropdown và validation

// C2:C500 - Dropdown Khách hàng (from range):
// Criteria: Dropdown (from a range) = DanhMuc!G2:G100

// F2:F500 - Dropdown Sản phẩm (from range):
// Criteria: Dropdown (from a range) = DanhMuc!A2:A100

// G2:G500 - Số lượng (number validation):
// Criteria: Number > between 1 and 9999

// J2:J500 - Checkbox: Insert > Checkbox

// K2:K500 - Dropdown Trạng thái (list of items):
// Chờ xử lý (vàng), Đang giao (xanh dương), Đã giao (xanh lá), Đã hủy (đỏ)

// B2:B500 - Date validation:
// Criteria: Is valid date

Bước 4: Thiết lập công thức auto-fill

// A2 - Mã đơn hàng tự sinh:
=IF(B2="", "", "DH-" & TEXT(ROW()-1, "0000"))

// D2 - SĐT tự điền từ khách hàng:
=IFERROR(INDEX(DanhMuc!H:H, MATCH(C2, DanhMuc!G:G, 0)), "")

// E2 - Địa chỉ tự điền:
=IFERROR(INDEX(DanhMuc!J:J, MATCH(C2, DanhMuc!G:G, 0)), "")

// H2 - Đơn giá tự điền từ sản phẩm:
=IFERROR(VLOOKUP(F2, DanhMuc!A:C, 3, FALSE), "")

// I2 - Thành tiền:
=IFERROR(G2 * H2, "")

// Copy các công thức từ hàng 2 xuống hàng 500 (Ctrl+C, chọn vùng, Ctrl+V)
// Hoặc dùng ARRAYFORMULA (chỉ gõ 1 lần ở hàng 2)

Bước 5: Tạo bảng tổng hợp phía trên

// Thêm vài ô tổng hợp ở phía trên hoặc bên phải:

// Tổng đơn hàng:
=COUNTA(A2:A500)

// Tổng doanh thu:
=SUM(I2:I500)

// Số đơn đã thanh toán:
=COUNTIF(J2:J500, TRUE)

// Tổng tiền đã thanh toán:
=SUMIF(J2:J500, TRUE, I2:I500)

// Đơn chờ xử lý:
=COUNTIF(K2:K500, "Chờ xử lý")

// Đơn đã giao:
=COUNTIF(K2:K500, "Đã giao")

Kết quả:

Bạn đã có một form đặt hàng hoàn chỉnh! Nhân viên chỉ cần: (1) Chọn ngày, (2) Chọn khách hàng từ dropdown, (3) Chọn sản phẩm từ dropdown, (4) Nhập số lượng. Mọi thông tin còn lại tự điền. Không thể nhập sai vì đã có validation. Các cột công thức được bảo vệ.

Ví Dụ Thực Tế 2: Form Chấm Công (Timesheet)

Form chấm công là một ứng dụng rất phổ biến. Mỗi nhân viên ghi lại giờ vào/ra, hệ thống tự tính số giờ làm, giờ tăng ca, và tổng lương.

Cấu trúc bảng chấm công

Cột Tên Loại Ghi chú
A Ngày Date Date picker
B Nhân viên Dropdown Từ danh sách NV
C Phòng ban Auto-fill VLOOKUP từ bảng NV
D Giờ vào Time Dropdown giờ cố định
E Giờ ra Time Dropdown giờ cố định
F Số giờ làm Auto = Giờ ra - Giờ vào - Nghỉ trưa
G Tăng ca Auto = MAX(Số giờ - 8, 0)
H Trạng thái Auto Đúng giờ / Đi trễ / Nghỉ
I Ghi chú Text Tự do nhập

Công thức chấm công

// C2 - Phòng ban (auto-fill từ tên nhân viên):
=IFERROR(VLOOKUP(B2, DanhMuc!A:C, 3, FALSE), "")

// D2:D500 - Dropdown Giờ vào:
// Tạo danh sách trong DanhMuc: 07:00, 07:30, 08:00, 08:30, 09:00, ...
// Data validation: Dropdown (from a range)

// E2:E500 - Dropdown Giờ ra (tương tự)
// Danh sách: 16:00, 16:30, 17:00, 17:30, 18:00, 18:30, 19:00, ...

// F2 - Số giờ làm (trừ 1 giờ nghỉ trưa):
=IF(OR(D2="", E2=""), "", (E2-D2)*24 - 1)
// Nhân 24 vì Google Sheets lưu time dưới dạng phân số ngày
// Trừ 1 giờ nghỉ trưa

// G2 - Giờ tăng ca:
=IF(F2="", "", MAX(F2 - 8, 0))
// Nếu làm hơn 8 tiếng, phần dư là tăng ca

// H2 - Trạng thái (tự phân loại):
=IF(D2="", "Nghỉ", IF(HOUR(D2)<=8, "Đúng giờ", "Đi trễ"))
// Nếu không có giờ vào: Nghỉ
// Nếu giờ vào <= 8h: Đúng giờ
// Nếu giờ vào > 8h: Đi trễ

Bảng tổng hợp chấm công theo tháng

// Tạo sheet "TongHop" với bảng thống kê:

// Tổng ngày công của nhân viên X trong tháng 2:
=COUNTIFS(ChamCong!B:B, "Nguyễn Văn A",
          ChamCong!A:A, ">="&DATE(2026,2,1),
          ChamCong!A:A, "<"&DATE(2026,3,1),
          ChamCong!D:D, "<>")

// Tổng giờ tăng ca:
=SUMIFS(ChamCong!G:G,
        ChamCong!B:B, "Nguyễn Văn A",
        ChamCong!A:A, ">="&DATE(2026,2,1),
        ChamCong!A:A, "<"&DATE(2026,3,1))

// Số lần đi trễ:
=COUNTIFS(ChamCong!B:B, "Nguyễn Văn A",
          ChamCong!H:H, "Đi trễ",
          ChamCong!A:A, ">="&DATE(2026,2,1),
          ChamCong!A:A, "<"&DATE(2026,3,1))

// Số ngày nghỉ:
=COUNTIFS(ChamCong!B:B, "Nguyễn Văn A",
          ChamCong!H:H, "Nghỉ",
          ChamCong!A:A, ">="&DATE(2026,2,1),
          ChamCong!A:A, "<"&DATE(2026,3,1))

Conditional Formatting cho chấm công:

  • Hàng có "Đi trễ" = nền vàng nhạt
  • Hàng có "Nghỉ" = nền xám nhạt, chữ nghiêng
  • Cột tăng ca > 0 = chữ đỏ đậm
  • Ô giờ vào sau 8:30 = nền đỏ nhạt

Mẹo Nâng Cao: Apps Script, Custom Menu & Auto Timestamp

Nếu bạn muốn form nhập liệu mạnh hơn nữa, có thể dùng thêm Apps Script. Dù bài viết này tập trung vào cách không cần code, nhưng biết thêm một vài đoạn script đơn giản sẽ rất hữu ích.

Mẹo 1: Auto Timestamp - Tự ghi ngày giờ khi nhập liệu

Tự động ghi lại thời điểm chính xác khi một hàng được nhập liệu:

// Cách 1: Không cần code - dùng công thức (hạn chế)
// Ô M2 (cột ẩn "Thời gian tạo"):
=IF(A2<>"", IF(M2="", NOW(), M2), "")
// Lưu ý: NOW() sẽ cập nhật mỗi khi mở file, nên cách này không chính xác 100%

// Cách 2: Apps Script (chính xác hơn)
// Vào Extensions > Apps Script, dán code sau:

function onEdit(e) {
  var sheet = e.source.getActiveSheet();
  if (sheet.getName() !== "DonHang") return;

  var row = e.range.getRow();
  var col = e.range.getColumn();

  // Nếu edit ở cột B-L (không phải cột timestamp) và hàng >= 2
  if (row >= 2 && col >= 2 && col <= 12) {
    var timestampCell = sheet.getRange(row, 13); // Cột M
    if (timestampCell.getValue() === "") {
      timestampCell.setValue(new Date());
    }
  }
}

// Kết quả: Khi nhập liệu vào bất kỳ cột nào, cột M tự ghi ngày giờ

Mẹo 2: Nút Reset Form

Tạo nút để xóa nhanh dữ liệu đã nhập (giữ nguyên công thức và định dạng):

// Extensions > Apps Script:

function resetForm() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DonHang");

  // Xóa dữ liệu nhập tay (giữ công thức)
  // Cột B (Ngày), C (KH), F (SP), G (SL), J (Checkbox), K (Trạng thái), L (Ghi chú)
  var columnsToReset = [2, 3, 6, 7, 10, 11, 12];

  columnsToReset.forEach(function(col) {
    sheet.getRange(2, col, 499, 1).clearContent();
  });

  // Reset checkboxes
  var checkboxRange = sheet.getRange("J2:J500");
  checkboxRange.setValue(false);

  SpreadsheetApp.getUi().alert("Form đã được reset!");
}

// Sau đó tạo nút:
// Insert > Drawing > vẽ hình chữ nhật, ghi "Reset Form"
// Click phải vào drawing > Assign script > gõ "resetForm"

Mẹo 3: Custom Menu cho form

// Tạo menu tùy chỉnh trên thanh menu:

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Form Tools')
    .addItem('Reset form', 'resetForm')
    .addItem('Xuất báo cáo', 'exportReport')
    .addItem('Gửi email tổng hợp', 'sendSummaryEmail')
    .addSeparator()
    .addItem('Hướng dẫn sử dụng', 'showHelp')
    .addToUi();
}

function showHelp() {
  var html = HtmlService.createHtmlOutput(
    '<h3>Hướng dẫn sử dụng Form Đặt Hàng</h3>' +
    '<ol>' +
    '<li>Chọn ngày đặt hàng</li>' +
    '<li>Chọn khách hàng từ dropdown</li>' +
    '<li>Chọn sản phẩm</li>' +
    '<li>Nhập số lượng</li>' +
    '<li>Các trường còn lại tự điền</li>' +
    '</ol>'
  ).setWidth(400).setHeight(300);
  SpreadsheetApp.getUi().showModalDialog(html, 'Hướng dẫn');
}

// Khi mở file, menu "Form Tools" sẽ xuất hiện trên thanh menu

Mẹo 4: Thông báo khi có đơn mới (Email notification)

// Tự động gửi email khi có đơn hàng mới:

function onEdit(e) {
  var sheet = e.source.getActiveSheet();
  if (sheet.getName() !== "DonHang") return;

  var row = e.range.getRow();
  var col = e.range.getColumn();

  // Khi nhập xong cột Số lượng (cột G = 7), gửi notification
  if (col === 7 && row >= 2 && e.value) {
    var customer = sheet.getRange(row, 3).getValue();
    var product = sheet.getRange(row, 6).getValue();
    var qty = e.value;

    MailApp.sendEmail({
      to: "admin@company.com",
      subject: "Đơn hàng mới: " + customer,
      body: "Khách hàng: " + customer +
            "\nSản phẩm: " + product +
            "\nSố lượng: " + qty +
            "\nThời gian: " + new Date()
    });
  }
}

Lưu ý về Apps Script:

  • Apps Script miễn phí, không cần cài đặt gì thêm
  • Vào Extensions > Apps Script để mở editor
  • Sau khi lưu script, cần cấp quyền (authorize) khi chạy lần đầu
  • Hàm onEdit() chạy tự động khi có chỉnh sửa
  • Hàm onOpen() chạy tự động khi mở file

So Sánh: Form Google Sheets vs Google Forms

Nhiều người thắc mắc: "Tại sao không dùng Google Forms cho đơn giản?". Cả hai đều có ưu nhược điểm riêng. Hãy so sánh:

Tiêu chí Form trên Google Sheets Google Forms
Auto-fill dữ liệu Có (VLOOKUP, INDEX-MATCH) Không
Dependent dropdown Có (INDIRECT) Có (nhưng phức tạp hơn)
Tính toán trực tiếp Có (công thức tự tính) Không (phải xử lý sau)
Xem dữ liệu real-time Có (xem ngay trên sheet) Phải mở response sheet
Chỉnh sửa sau nhập Dễ dàng (edit trực tiếp) Phải mở lại form
Giao diện đẹp Trung bình (bảng tính) Đẹp (form chuyên dụng)
Chia sẻ ngoài tổ chức Cần share quyền edit Dễ dàng (link public)
Thu thập file đính kèm Không trực tiếp Có (upload file)
Phù hợp cho Team nội bộ, nhập liệu thường xuyên, cần tính toán Khảo sát, thu thập thông tin từ bên ngoài

Kết luận so sánh:

  • Dùng Form trên Google Sheets khi: nhập liệu nội bộ hàng ngày, cần auto-fill và tính toán, team cùng làm việc trên 1 file, cần chỉnh sửa dữ liệu thường xuyên
  • Dùng Google Forms khi: thu thập thông tin từ nhiều người bên ngoài, cần giao diện form đẹp, không cần tính toán ngay, cần thu thập file đính kèm
  • Kết hợp cả hai: Dùng Google Forms để thu thập dữ liệu ban đầu, sau đó dữ liệu đổ về Google Sheets có form nhập liệu để xử lý tiếp

Checklist Tạo Form Nhập Liệu Hoàn Chỉnh

Dưới đây là checklist tổng hợp để bạn kiểm tra form nhập liệu đã đầy đủ chưa:

STT Hạng mục Trạng thái
1 Header rõ ràng, in đậm, nền màu, freeze row
2 Sheet DanhMuc riêng cho dữ liệu gốc
3 Dropdown cho tất cả trường chọn lựa
4 Date picker cho trường ngày tháng
5 Checkbox cho trường đúng/sai
6 Number validation cho trường số
7 Custom validation (SĐT, email) nếu cần
8 Auto-fill bằng VLOOKUP/INDEX-MATCH
9 Conditional Formatting cho trạng thái, lỗi
10 Protect sheet + Lock cột công thức
11 Ẩn sheet DanhMuc
12 Test thử: nhập 5-10 dòng dữ liệu mẫu

Các Lỗi Thường Gặp & Cách Khắc Phục

Lỗi Nguyên nhân Cách khắc phục
Dropdown không hiện danh sách Vùng tham chiếu sai hoặc sheet bị ẩn/xóa Kiểm tra lại range trong Data validation, đảm bảo sheet DanhMuc còn tồn tại
VLOOKUP trả về #N/A Giá trị tra cứu có khoảng trắng thừa hoặc khác chữ hoa/thường Dùng TRIM() loại bỏ khoảng trắng. Kiểm tra EXACT() để so sánh chính xác
INDIRECT trả về #REF! Named Range chưa tạo hoặc tên không khớp Kiểm tra Data > Named ranges, đảm bảo tên khớp 100% với giá trị dropdown
Conditional formatting không hoạt động Thiếu dấu $ hoặc range chọn sai Dùng $I2 (khóa cột) thay vì I2 hoặc $I$2. Chọn đúng range áp dụng
Checkbox hiện TRUE/FALSE thay vì ô check Ô bị format text hoặc copy từ nơi khác Xóa nội dung ô, vào Insert > Checkbox để tạo lại
Date picker không xuất hiện Ô chưa được format là Date Chọn cột > Format > Number > Date. Sau đó double-click vào ô
Protect sheet nhưng không edit được Quên loại trừ (except) các ô nhập liệu Vào Data > Protect sheets, click "Except certain cells", thêm các vùng cho phép

Kết Luận

Qua bài viết này, bạn đã nắm được cách tạo form nhập liệu tự động trên Google Sheets từ cơ bản đến nâng cao, hoàn toàn không cần biết code. Với các kỹ thuật: Data Validation, Dropdown, Checkbox, Conditional Formatting, VLOOKUP/INDEX-MATCH, INDIRECT, và Protect Sheet, bạn có thể biến bất kỳ bảng tính nào thành một form nhập liệu thông minh.

Hãy nhớ 3 nguyên tắc khi tạo form:

  1. Giảm thiểu nhập tay: Dùng dropdown, checkbox, auto-fill càng nhiều càng tốt
  2. Kiểm tra đầu vào: Mọi trường nhập liệu đều cần Data Validation
  3. Bảo vệ công thức: Protect sheet và lock các ô tự động tính

Lộ trình thực hành:

  1. Ngày 1: Tạo bảng với dropdown và date picker (Bước 1-3)
  2. Ngày 2: Thêm conditional formatting và data validation nâng cao (Bước 4-5)
  3. Ngày 3: Thiết lập dependent dropdown và auto-fill (Bước 6-7)
  4. Ngày 4: Protect sheet và hoàn thiện (Bước 8)
  5. Ngày 5: Thực hành xây dựng form đặt hàng hoàn chỉnh

Nếu bạn cần các template Google Sheets chuyên nghiệp với form nhập liệu đã được thiết kế sẵn, hãy tham khảo bộ sưu tập phần mềm quản lý của SheetStore (sheet.com.vn). Chúng tôi cung cấp các giải pháp quản lý bán hàng, kho hàng, CRM trên Google Sheets - đã tích hợp sẵn form nhập liệu, validation, auto-fill và báo cáo tự động.

Tài nguyên hữu ích tại SheetStore:

Hãy bắt đầu thực hành ngay hôm nay! Mở Google Sheets, tạo một bảng mới và thử áp dụng từng bước trong bài viết. Bắt đầu với dropdown đơn giản, sau đó nâng dần lên auto-fill và protect sheet. Chỉ cần 1-2 ngày thực hành, bạn sẽ tạo được form nhập liệu chuyên nghiệp cho bất kỳ mục đích nào.


Bài viết được cập nhật lần cuối: Tháng 2/2026. Nội dung được biên soạn bởi đội ngũ chuyên gia Google Sheets tại SheetStore.

Bạn đã thử tạo form nhập liệu trên Google Sheets chưa? Chia sẻ kinh nghiệm ở phần bình luận bên dưới!

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