Google Sheets Nâng Cao Bài 6: ARRAYFORMULA - Tự Động Hóa Công Thức Hàng Loạt

ARRAYFORMULA Google Sheets Là Gì và Tại Sao Bạn Cần Dùng?
Bạn có bao giờ phải kéo một công thức xuống cả trăm hàng rồi mỗi lần thêm dữ liệu lại phải kéo tiếp không? Đó chính xác là vấn đề mà ARRAYFORMULA giải quyết.
ARRAYFORMULA là một hàm đặc biệt trong Google Sheets cho phép bạn áp dụng một công thức duy nhất cho toàn bộ phạm vi dữ liệu — không cần kéo, không cần copy. Chỉ cần nhập một lần ở hàng đầu, công thức sẽ tự động tính toán cho tất cả các hàng hiện có và cả hàng sẽ được thêm vào sau.
- Bài 1: Data Validation — Kiểm soát dữ liệu nhập vào
- Bài 2: Conditional Formatting — Định dạng có điều kiện
- Bài 3: IMPORTRANGE — Kết nối nhiều sheet
- Bài 4: QUERY — Truy vấn dữ liệu như SQL
- Bài 5: Apps Script — Tự động hóa với JavaScript
- Bài 6: ARRAYFORMULA — Tự động hóa công thức hàng loạt (bài này)
- Bài 7: Charts & Dashboard — Biểu đồ chuyên nghiệp
Vấn đề khi không dùng ARRAYFORMULA
Giả sử bạn có 1.000 hàng dữ liệu bán hàng và muốn tính tổng tiền (số lượng × đơn giá) ở cột D:
- Cách thông thường: nhập
=B2*C2rồi kéo xuống D1001 — 1.000 ô riêng lẻ - Cách ARRAYFORMULA: nhập
=ARRAYFORMULA(B2:B1001*C2:C1001)— chỉ 1 ô, tự xử lý tất cả
Nhưng lợi ích thực sự còn hơn thế: khi bạn thêm hàng mới, ARRAYFORMULA tự mở rộng. Không cần kéo. Không lo quên.
Cú Pháp Cơ Bản Của ARRAYFORMULA
=ARRAYFORMULA(array_formula)
Trong đó array_formula là bất kỳ công thức nào hoạt động với phạm vi (range) thay vì ô đơn lẻ.
Cách nhập nhanh
Thay vì gõ ARRAYFORMULA, bạn có thể nhấn Ctrl + Shift + Enter khi đang nhập công thức — Google Sheets sẽ tự bọc vào ARRAYFORMULA.
Ví dụ đơn giản nhất
| Không dùng ARRAYFORMULA | Dùng ARRAYFORMULA |
|---|---|
=B2*C2 (rồi kéo xuống) | =ARRAYFORMULA(B2:B*C2:C) |
=A2&" "&B2 (rồi kéo xuống) | =ARRAYFORMULA(A2:A&" "&B2:B) |
=IF(A2="","",(A2)) (kéo xuống) | =ARRAYFORMULA(IF(A2:A="","",A2:A)) |
So Sánh Có và Không Có ARRAYFORMULA
Hãy xem bảng so sánh chi tiết để hiểu rõ sự khác biệt:
| Tiêu chí | Không có ARRAYFORMULA | Có ARRAYFORMULA |
|---|---|---|
| Số ô công thức | N ô (1 per row) | 1 ô duy nhất |
| Tự mở rộng khi thêm data | Không, phải kéo tay | Có (nếu dùng open range) |
| Hiệu suất | Chậm hơn với nhiều ô | Nhanh hơn (1 phép tính) |
| Dễ bị xóa nhầm | Dễ xóa từng ô | Khó xóa (1 ô gốc) |
| File size | Lớn hơn | Nhỏ hơn đáng kể |
ARRAYFORMULA Kết Hợp Với IF
Đây là combo phổ biến nhất. Thay vì IF thông thường chỉ kiểm tra 1 ô, ARRAYFORMULA + IF kiểm tra cả cột.
Ví dụ 1: Điền trạng thái tự động
' Nếu cột A trống thì để trống, không thì hiển thị "Đã điền" =ARRAYFORMULA(IF(A2:A="","","Đã điền"))
Ví dụ 2: Tính hoa hồng theo mức doanh số
' Cột B là doanh số, tính hoa hồng:
' Dưới 5 triệu: 5%, từ 5-10 triệu: 8%, trên 10 triệu: 12%
=ARRAYFORMULA(
IF(B2:B="","",
IF(B2:B>=10000000, B2:B*0.12,
IF(B2:B>=5000000, B2:B*0.08,
B2:B*0.05
)
)
)
)
Ví dụ 3: Xếp loại học sinh
' Cột C là điểm trung bình
=ARRAYFORMULA(
IF(C2:C="","",
IF(C2:C>=9,"Xuất sắc",
IF(C2:C>=8,"Giỏi",
IF(C2:C>=6.5,"Khá",
IF(C2:C>=5,"Trung bình","Yếu")
)
)
)
)
)
IF(A2:A="","", ...) trước khi tính toán. Nếu không, ARRAYFORMULA sẽ điền công thức vào tất cả các hàng trống và gây lộn xộn.
ARRAYFORMULA + VLOOKUP — Lookup Hàng Loạt
Đây là ứng dụng cực kỳ hữu ích trong thực tế. Thay vì VLOOKUP từng ô, bạn lookup cả cột chỉ với 1 công thức.
Cú pháp cơ bản
=ARRAYFORMULA(VLOOKUP(A2:A, Sheet2!A:C, 2, FALSE))
Ví dụ thực tế: Tự động điền tên sản phẩm và giá
Bạn có sheet "Đơn hàng" với mã sản phẩm ở cột A, muốn tự động điền tên (cột B) và giá (cột C) từ sheet "DanhMuc":
' Tự động điền tên sản phẩm (cột 2 trong DanhMuc)
=ARRAYFORMULA(
IF(A2:A="","",
VLOOKUP(A2:A, DanhMuc!A:C, 2, FALSE)
)
)
' Tự động điền giá (cột 3 trong DanhMuc)
=ARRAYFORMULA(
IF(A2:A="","",
VLOOKUP(A2:A, DanhMuc!A:C, 3, FALSE)
)
)
ARRAYFORMULA + INDEX/MATCH (linh hoạt hơn VLOOKUP)
=ARRAYFORMULA(
IF(A2:A="","",
INDEX(DanhMuc!B:B,
MATCH(A2:A, DanhMuc!A:A, 0)
)
)
)
ARRAYFORMULA + IFERROR — Xử Lý Lỗi Hàng Loạt
Khi kết hợp ARRAYFORMULA với VLOOKUP hoặc các hàm có thể trả về lỗi, IFERROR là người bạn đồng hành không thể thiếu.
' Thay #N/A bằng "Không tìm thấy"
=ARRAYFORMULA(
IFERROR(
VLOOKUP(A2:A, DanhMuc!A:C, 2, FALSE),
"Không tìm thấy"
)
)
' Thay lỗi chia cho 0 bằng 0
=ARRAYFORMULA(IFERROR(B2:B/C2:C, 0))
' Thay mọi lỗi bằng chuỗi rỗng
=ARRAYFORMULA(IFERROR(VLOOKUP(A2:A, Ref!A:B, 2, 0), ""))
ARRAYFORMULA + TEXT — Format Hàng Loạt
Chuyển đổi định dạng số, ngày tháng cho cả cột chỉ với 1 công thức:
' Format ngày tháng cả cột
=ARRAYFORMULA(TEXT(A2:A, "dd/mm/yyyy"))
' Format tiền tệ VND
=ARRAYFORMULA(TEXT(B2:B, "#,##0") & " đ")
' Format số với 2 chữ số thập phân
=ARRAYFORMULA(TEXT(C2:C, "0.00"))
' Kết hợp text + format ngày
=ARRAYFORMULA(
IF(A2:A="", "",
"Ngày " & TEXT(A2:A, "dd/mm/yyyy")
)
)
ARRAYFORMULA Cho Tính Toán Phức Tạp
Tính toán nhiều cột cùng lúc
' Tính doanh thu = số lượng * giá * (1 - chiết khấu)
=ARRAYFORMULA(
IF(B2:B="","",
B2:B * C2:C * (1 - D2:D)
)
)
Tính tổng tiền theo điều kiện
' Tính tổng tiền chỉ cho các đơn hàng trạng thái "Hoàn thành"
' (Cột A: trạng thái, B: doanh thu)
=SUMPRODUCT(ARRAYFORMULA(IF(A2:A="Hoàn thành", B2:B, 0)))
' Đếm số đơn theo từng trạng thái
=ARRAYFORMULA(COUNTIF(A2:A, {"Hoàn thành","Huỷ","Đang xử lý"}))
Tạo số thứ tự tự động
' Tự động đánh số thứ tự cho các hàng có dữ liệu
=ARRAYFORMULA(
IF(B2:B="", "",
ROW(B2:B) - ROW(B2) + 1
)
)
Ghép chuỗi và tạo ID tự động
' Tạo mã đơn hàng tự động: ORD-001, ORD-002, ...
=ARRAYFORMULA(
IF(B2:B="","",
"ORD-" & TEXT(ROW(B2:B)-ROW(B2)+1,"000")
)
)
' Ghép họ tên
=ARRAYFORMULA(
IF(A2:A="","",
A2:A & " " & B2:B
)
)
ARRAYFORMULA vs FILTER — Khi Nào Dùng Cái Nào?
| Tiêu chí | ARRAYFORMULA | FILTER |
|---|---|---|
| Mục đích | Áp dụng công thức cho cả phạm vi | Lọc và trả về subset dữ liệu |
| Giữ nguyên vị trí hàng | Có | Không (compact lại) |
| Tạo cột tính toán | Tốt | Không phù hợp |
| Lọc dữ liệu | Không trực tiếp | Tốt |
| Dùng kết hợp | Với IF, TEXT, VLOOKUP | Với SORT, UNIQUE |
Ví dụ so sánh
' ARRAYFORMULA: Tạo cột "Phân loại" ngay trên bảng gốc =ARRAYFORMULA(IF(B2:B>10000000,"VIP","Thường")) ' FILTER: Trả về danh sách riêng chỉ gồm khách VIP =FILTER(A2:C, B2:B>10000000)
Performance Tips — Khi Nào Dùng và Không Dùng
Nên dùng ARRAYFORMULA khi:
- Cần áp dụng cùng 1 công thức cho nhiều hàng
- Muốn tự động mở rộng khi thêm dữ liệu
- Cần giảm số lượng ô công thức (cải thiện tốc độ)
- Tạo cột tính toán phụ từ dữ liệu gốc
Không nên dùng ARRAYFORMULA khi:
- Dải dữ liệu quá lớn (trên 100.000 hàng) với công thức phức tạp — có thể chậm
- Công thức cần tham chiếu đến kết quả của chính hàng đó (circular reference)
- Dùng trong Google Forms response sheet nơi mỗi hàng độc lập
Open range vs Fixed range
' Open range (A2:A) — tự mở rộng, nhưng tốn tài nguyên hơn =ARRAYFORMULA(IF(A2:A="","",A2:A*B2:B)) ' Fixed range (A2:A1001) — giới hạn 1000 hàng, nhanh hơn =ARRAYFORMULA(IF(A2:A1001="","",A2:A1001*B2:B1001))
Ví Dụ Thực Tế: Bảng Quản Lý Đơn Hàng Hoàn Chỉnh
Giả sử bảng đơn hàng có cấu trúc: A=Mã SP, B=Tên SP (auto), C=Số lượng, D=Đơn giá (auto), E=Doanh thu, F=Trạng thái, G=Phân loại (auto)
' Cột B1 - Tự động điền tên sản phẩm
=ARRAYFORMULA(
IF(A2:A="","",
IFERROR(VLOOKUP(A2:A, DanhMuc!A:C, 2, 0), "Không tìm thấy")
)
)
' Cột D1 - Tự động điền đơn giá
=ARRAYFORMULA(
IF(A2:A="","",
IFERROR(VLOOKUP(A2:A, DanhMuc!A:C, 3, 0), 0)
)
)
' Cột E1 - Tính doanh thu
=ARRAYFORMULA(IF(A2:A="","",C2:C*D2:D))
' Cột G1 - Phân loại đơn hàng
=ARRAYFORMULA(
IF(A2:A="","",
IF(E2:E>=5000000,"Đơn lớn",
IF(E2:E>=1000000,"Đơn trung","Đơn nhỏ")
)
)
)
Lỗi Thường Gặp Và Cách Fix
Lỗi 1: #REF! — Tham chiếu vòng
Nguyên nhân: ARRAYFORMULA cố ghi vào các ô đã có nội dung Fix: Đảm bảo các ô trong phạm vi output trống hoàn toàn
Lỗi 2: #VALUE! — Kiểu dữ liệu không khớp
Nguyên nhân: Cộng text với số, hoặc range có kích thước khác nhau Fix: Dùng VALUE() để chuyển text sang số, kiểm tra range size Ví dụ: =ARRAYFORMULA(VALUE(A2:A) * B2:B)
Lỗi 3: Kết quả chỉ hiện 1 ô, không lan ra cả cột
Nguyên nhân: Bên dưới ô ARRAYFORMULA có nội dung chặn Fix: Xóa sạch cột output trước khi nhập ARRAYFORMULA
Lỗi 4: Hiệu suất chậm
Nguyên nhân: Open range quá lớn (A:A thay vì A2:A10000) Fix: Giới hạn range cụ thể hoặc dùng QUERY/FILTER thay thế
Lỗi 5: ARRAYFORMULA không hoạt động với SUMIF/COUNTIF lồng nhau
Nguyên nhân: Một số hàm aggregate không tương thích với ARRAYFORMULA Fix: Dùng SUMPRODUCT thay thế Ví dụ: =SUMPRODUCT((A2:A="Hà Nội")*(B2:B))
Ứng Dụng Thực Tế Nâng Cao
1. Tự động tính ngày hết hạn
' Cột A là ngày nhập hàng, tính ngày hết hạn sau 90 ngày
=ARRAYFORMULA(IF(A2:A="","",A2:A+90))
' Đánh dấu sản phẩm sắp hết hạn (trong vòng 7 ngày)
=ARRAYFORMULA(
IF(A2:A="","",
IF(A2:A+90-TODAY()<=7,"Sắp hết hạn","Còn hạn")
)
)
2. Tính phần trăm đóng góp
' Cột B là doanh số từng sản phẩm
' Tính % đóng góp vào tổng doanh thu
=ARRAYFORMULA(
IF(B2:B="","",
TEXT(B2:B/SUM(B2:B)*100,"0.00") & "%"
)
)
3. Tạo hyperlink tự động
' Tạo hyperlink đến trang sản phẩm tự động
=ARRAYFORMULA(
IF(A2:A="","",
HYPERLINK(
"https://sheet.com.vn/products/" & A2:A,
"Xem sản phẩm " & A2:A
)
)
)
Bạn muốn template đã sẵn sàng ARRAYFORMULA?
SheetStore cung cấp các template quản lý bán hàng, kế toán, nhân sự với ARRAYFORMULA được cấu hình sẵn — tiết kiệm hàng giờ setup.
Xem Phần Mềm Quản Lý Bán HàngTổng Kết và Bước Tiếp Theo
ARRAYFORMULA là một trong những công cụ mạnh nhất trong Google Sheets, giúp bạn:
- Tự động hóa hoàn toàn các cột tính toán
- Giảm thiểu lỗi do quên kéo công thức
- Cải thiện hiệu suất sheet với ít ô công thức hơn
- Tạo các hệ thống quản lý dữ liệu chuyên nghiệp
Hãy bắt đầu với những ứng dụng đơn giản: tính tổng tiền, điền trạng thái, ghép tên — rồi dần dần nâng lên các combo phức tạp hơn với VLOOKUP và IF lồng nhau.
Nếu bạn mới bắt đầu với Google Sheets, hãy xem Hướng dẫn Google Sheets cho người mới bắt đầu 2026 để có nền tảng vững chắc trước khi học ARRAYFORMULA.
Bài tiếp theo trong series: Bài 7 — Charts & Dashboard: Tạo biểu đồ và dashboard chuyên nghiệp, nơi bạn sẽ học cách trực quan hóa dữ liệu một cách ấn tượng.
Xem thêm bảng giá các gói dịch vụ SheetStore để được hỗ trợ xây dựng hệ thống Google Sheets theo yêu cầu.
📚 Bài Viết Liên Quan
- Template Google Sheets Báo Cáo Bán Hàng Theo Vùng và Đại Lý 2027: Phân Tích Đa Chiều
- Google Sheets Nâng Cao Bài 9: Bảo Mật, Phân Quyền và Chia Sẻ Chuyên Nghiệp
- Google Sheets Nâng Cao Bài 4: Hàm QUERY - Lọc và Phân Tích Dữ Liệu Chuyên Nghiệp
- Template Google Sheets Quản Lý Phòng Khám và Bệnh Viện Nhỏ 2027
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.