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:
- Chọn ô hoặc vùng ô cần tạo dropdown (ví dụ: cột D - "Sản phẩm", chọn D2:D100)
- Vào menu
Data > Data validation - Trong phần Criteria, chọn "Dropdown (from a range)"
- Nhập vùng dữ liệu:
DanhMuc!A2:A100(cột sản phẩm trong sheet DanhMuc) - 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
- 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.
- Chọn vùng ô cần tạo dropdown
- Vào
Data > Data validation - Chọn "Dropdown"
- Nhập các giá trị, mỗi giá trị trên một dòng:
Chờ xử lý,Đang giao,Đã giao,Đã hủy - Bạn có thể chọn màu cho từng giá trị để phân biệt trực quan
- 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.
- Chọn vùng ô cần tạo checkbox (ví dụ: H2:H100 - cột "Đã thanh toán")
- Vào menu
Insert > Checkbox - Ngay lập tức, các ô được chọn sẽ hiển thị checkbox
- 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:
- Chọn vùng checkbox
- Vào
Data > Data validation - Chọn Checkbox
- Tick vào "Use custom cell values"
- 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:
- Chọn cột ngày tháng (ví dụ: B2:B100 - cột "Ngày đặt")
- Vào
Data > Data validation - Criteria: chọn "Is valid date"
- Chọn "Reject input" nếu không phải ngày hợp lệ
- 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.
- Chọn toàn bộ vùng dữ liệu:
A2:H100 - Vào
Format > Conditional formatting - 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 = đỏ.
- Chọn cột thành tiền (G2:G100)
- Vào
Format > Conditional formatting - Chọn tab "Color scale"
- Minpoint: Trắng, Midpoint: Vàng, Maxpoint: Xanh lá đậm
- 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
- Chọn vùng A2:A6 trong sheet DanhMuc (danh sách Thời trang)
- Vào
Data > Named ranges - Đặt tên:
Thời_trang(phải dùng dấu gạch dưới thay khoảng trắng) - Nhấn Done
- 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)
- Chọn cột C (Danh mục) trong sheet nhập liệu
- 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
- Chọn cột D (Sản phẩm)
- Data validation > Dropdown (from a range)
- 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ức và chỉ 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
- Click phải vào tab sheet > chọn "Protect sheet"
- Hoặc vào
Data > Protect sheets and ranges - Chọn "Sheet", tick vào sheet cần bảo vệ
- Click "Set permissions"
- Chọn "Only you" hoặc thêm người có quyền chỉnh sửa
- 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:
- Click phải vào tab "DanhMuc" > Protect sheet
- Chọn "Only you" (chỉ chủ sheet mới sửa được)
- 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:
- Giảm thiểu nhập tay: Dùng dropdown, checkbox, auto-fill càng nhiều càng tốt
- Kiểm tra đầu vào: Mọi trường nhập liệu đều cần Data Validation
- Bảo vệ công thức: Protect sheet và lock các ô tự động tính
Lộ trình thực hành:
- Ngày 1: Tạo bảng với dropdown và date picker (Bước 1-3)
- Ngày 2: Thêm conditional formatting và data validation nâng cao (Bước 4-5)
- Ngày 3: Thiết lập dependent dropdown và auto-fill (Bước 6-7)
- Ngày 4: Protect sheet và hoàn thiện (Bước 8)
- 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:
- Phần mềm quản lý bán hàng - Form đặt hàng, quản lý kho, báo cáo doanh thu
- Hệ thống quản lý bất động sản - CRM khách hàng, quản lý tin đăng BĐS
- Blog hướng dẫn Google Sheets - Thêm nhiều tips & tricks hữu ích
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
Độ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.