
Nếu bạn đang phải kéo công thức xuống hàng nghìn dòng mỗi lần có đơn hàng mới, ARRAYFORMULA trong Google Sheet chính là thứ bạn cần. Đây là hàm biến một công thức viết ở một ô thành công thức áp dụng cho cả một vùng dữ liệu, nên khi bảng có thêm dòng, kết quả tự tính mà không ai phải kéo lại. Chỉ cần viết đúng một ô duy nhất là cả cột hoạt động, kể cả khi dữ liệu do Google Form đổ về.
Trong bài này tôi đi từ cú pháp cơ bản, các ví dụ tôi dùng thật khi dựng bảng cho cửa hàng và kho, tới những lỗi mà gần như ai cũng gặp trong tuần đầu dùng hàm này.
ARRAYFORMULA là gì, ARRAYFORMULA là hàm gì?
ARRAYFORMULA là hàm của Google Sheet cho phép một công thức trả về kết quả cho nhiều ô cùng lúc, thay vì chỉ một ô. Nói cách khác, bạn chỉ cho Google Sheet biết "quy tắc tính" một lần, còn việc áp quy tắc đó xuống từng dòng là máy tự làm.
Lợi ích thực tế của cách làm này:
- Dòng mới tự tính. Google Form ghi thêm một dòng, hay nhân viên gõ thêm một đơn, cột kết quả tự có số — không ai phải nhớ kéo công thức.
- Không còn lỗi sót công thức. Tôi gặp rất nhiều file mà dòng 1.200 có công thức, dòng 1.201 thì trống, và báo cáo cuối tháng sai mà không ai biết vì sao.
- File gọn hơn về mặt quản lý. Muốn sửa cách tính, bạn sửa đúng một ô, không phải sửa rồi kéo lại từ đầu bảng.
Cả bài tôi dùng một bảng đơn giản, cũng là bảng hay gặp nhất ở cửa hàng vật liệu xây dựng hoặc shop bán lẻ:
- Cột A:
Ngay - Cột B:
Ma_SP - Cột C:
So_luong - Cột D:
Don_gia - Cột E:
Thanh_tien— cột chúng ta sẽ tính tự động
Cú pháp ARRAYFORMULA và ví dụ đầu tiên
Cú pháp chỉ có một tham số: =ARRAYFORMULA(biểu_thức_mảng). Việc của bạn là viết biểu thức bằng vùng thay vì bằng ô. Thay vì =C2*D2 rồi kéo xuống, bạn vào ô E2 và gõ:
=ARRAYFORMULA(C2:C*D2:D)
Ngay lập tức cả cột E có kết quả. Nhưng bạn sẽ thấy một vấn đề: những dòng chưa có dữ liệu bên dưới đều hiện số 0, kéo dài tới cuối bảng tính. Vì C2:C là cả cột, ô trống được hiểu là 0 và 0 × 0 = 0.
Cách sửa là thêm một điều kiện kiểm tra ô trống:
=ARRAYFORMULA(IF(C2:C="",,C2:C*D2:D))
Để ý hai dấu phẩy liền nhau trong IF(C2:C="",,...): phần "nếu đúng" bị bỏ trống, nghĩa là dòng nào chưa có số lượng thì trả về ô rỗng. Đây là mẹo tôi dùng gần như trong mọi ARRAYFORMULA, vì nó giữ bảng sạch và các hàm thống kê phía sau không bị đếm nhầm.
Một tiểu tiết tiện tay: bạn có thể gõ công thức bình thường =C2:C*D2:D rồi bấm Ctrl + Shift + Enter, Google Sheet sẽ tự bọc ARRAYFORMULA vào cho bạn.
Lưu ý về dấu phân cách: tuỳ cài đặt vùng miền của file (menu File > Settings), dấu ngăn cách tham số có thể là dấu phẩy hoặc dấu chấm phẩy. Nếu dán công thức trong bài mà báo lỗi cú pháp, hãy đổi , thành ;.

Đặt tiêu đề cột ngay trong công thức
Bạn có thể viết cả tiêu đề cột và công thức trong cùng một ô E1, để không còn ô nào trong cột E bị gõ đè. Cú pháp dùng dấu ngoặc nhọn và dấu chấm phẩy để xếp các phần tử xuống dòng:
={"Thanh_tien"; ARRAYFORMULA(IF(C2:C="",,C2:C*D2:D))}
Đặt công thức này vào E1. Ô E1 hiện chữ "Thanh_tien", từ E2 trở xuống là kết quả tính.
Vì sao tôi thích cách này khi bảng nhận dữ liệu từ Google Form? Vì Google Form chèn dòng mới vào ngay dưới dòng tiêu đề hoặc cuối vùng dữ liệu, và trong nhiều trường hợp nó không sao chép công thức của bạn sang dòng mới. Khi toàn bộ cột E chỉ sống nhờ một ô E1 duy nhất, Form chèn bao nhiêu dòng cũng không phá được công thức. Với cách để công thức ở E2, chỉ cần một người lỡ tay xoá dòng 2 là cả cột mất.
Nhược điểm cần biết: ô E1 lúc này vừa là tiêu đề vừa là công thức, nên nếu ai đó sửa chữ tiêu đề trực tiếp trên bảng thì công thức bay mất. Bù lại, chỉ có đúng một điểm cần bảo vệ thay vì cả nghìn ô.
Kết hợp ARRAYFORMULA với hàm khác
Nguyên tắc chung: cứ thay tham chiếu ô bằng tham chiếu vùng, phần còn lại giữ nguyên. Dưới đây là bốn kiểu kết hợp tôi dùng nhiều nhất.
VLOOKUP lấy đơn giá cho cả cột
Giả sử bạn có sheet DM_SP chứa mã sản phẩm ở cột A và đơn giá ở cột C. Để cột D tự điền đơn giá theo mã ở cột B:
=ARRAYFORMULA(IF(B2:B="",,VLOOKUP(B2:B,DM_SP!A:C,3,FALSE)))
Chỉ một thay đổi so với công thức thường: tham số đầu tiên là B2:B chứ không phải B2. Nếu mã sản phẩm có thể nhập sai, bọc thêm IFERROR để không hiện #N/A đỏ cả cột. Chi tiết về các lỗi của hàm này, tôi đã viết riêng trong bài hàm VLOOKUP Google Sheet: cách dùng đúng và sửa lỗi.
IF lồng nhau để phân loại đơn
Muốn cột F tự dán nhãn đơn theo giá trị:
=ARRAYFORMULA(IF(E2:E="",,IF(E2:E>=10000000,"Đơn lớn",IF(E2:E>=2000000,"Đơn vừa","Đơn nhỏ"))))
Các mốc tiền ở đây chỉ là ví dụ, bạn thay bằng ngưỡng của doanh nghiệp mình.
Nối chuỗi bằng & và định dạng ngày bằng TEXT
Tạo mã hiển thị gọn cho từng dòng, kiểu "XM01 - 12/10/2026":
=ARRAYFORMULA(IF(B2:B="",,B2:B&" - "&TEXT(A2:A,"dd/mm/yyyy")))
TEXT rất hữu ích khi bạn cần gom theo tháng: TEXT(A2:A,"yyyy-mm") cho ra chuỗi "2026-10", sắp xếp đúng thứ tự thời gian.
Điều kiện VÀ / HOẶC phải viết bằng * và +
Đây là chỗ nhiều người tưởng công thức sai mà thật ra là dùng nhầm hàm. Trong ARRAYFORMULA, AND và OR gộp cả mảng lại thành một giá trị duy nhất, nên cả cột sẽ ra cùng một kết quả. Thay vào đó:
- Điều kiện VÀ: nhân các điều kiện với nhau bằng dấu
* - Điều kiện HOẶC: cộng các điều kiện bằng dấu
+
Ví dụ đánh dấu đơn cần ưu tiên giao khi số lượng từ 10 trở lên và đơn giá từ 50.000 trở lên:
=ARRAYFORMULA(IF((C2:C>=10)*(D2:D>=50000),"Ưu tiên",""))

Hàm nào không cần hoặc không chạy đúng trong ARRAYFORMULA?
Có nhóm hàm vốn đã trả về mảng nên bọc thêm ARRAYFORMULA là thừa, và nhóm hàm luôn gộp mảng thành một giá trị nên bọc vào cũng vô ích.
- Không cần bọc:
FILTER,UNIQUE,QUERY,SORT,IMPORTRANGE. Các hàm này tự trả về nhiều dòng. Nếu bạn cần lọc và tổng hợp theo điều kiện phức tạp, hàm QUERY trong Google Sheet thường là lựa chọn gọn hơn. - Bọc vào cũng không tách theo dòng:
SUM,AND,OR,COUNTA,MAX. Bản chất chúng gom cả vùng lại thành một con số. - Khi cần tính riêng từng dòng theo kiểu phức tạp: dùng
BYROWhoặcMAPkèmLAMBDA. Ví dụ tính thành tiền theo từng dòng:
=BYROW(C2:D, LAMBDA(r, INDEX(r,1,1)*INDEX(r,1,2)))
BYROW đưa từng dòng của vùng vào biến r rồi tính riêng, nên nó làm được những việc ARRAYFORMULA chịu thua — ví dụ cộng dồn, hoặc gọi một hàm chỉ nhận một giá trị. Nhược điểm: khó đọc hơn với người mới, và với vùng cả cột thì các dòng trống vẫn cho ra 0, bạn vẫn phải xử lý điều kiện rỗng.
So sánh: kéo công thức, ARRAYFORMULA và BYROW/MAP
| Tiêu chí | Kéo công thức từng ô | ARRAYFORMULA | BYROW / MAP + LAMBDA |
|---|---|---|---|
| Dễ hiểu với người mới | Dễ nhất | Dễ, cần quen vài quy tắc | Khó hơn, phải hiểu LAMBDA |
| Khi dữ liệu thêm dòng | Phải kéo lại, hay quên | Tự tính | Tự tính |
| Tốc độ khi file lớn | Nặng vì hàng nghìn công thức riêng | Nhẹ hơn nếu giới hạn vùng | Có thể chậm với vùng rất lớn |
| Khi nhiều người cùng sửa | Dễ bị gõ đè từng ô, khó phát hiện | Chỉ một ô cần bảo vệ | Chỉ một ô cần bảo vệ |
| Nên dùng khi | Bảng nhỏ, công thức dùng một lần | Cột tính lặp lại theo dòng, bảng nhận dữ liệu liên tục | Tính theo dòng mà ARRAYFORMULA không làm được |
Lời khuyên của tôi: mặc định dùng ARRAYFORMULA cho các cột tính toán cố định (thành tiền, phân loại, tra giá), chỉ chuyển sang BYROW/MAP khi gặp phép tính mà ARRAYFORMULA bó tay. Còn kéo công thức thủ công thì vẫn hoàn toàn ổn với bảng vài chục dòng dùng một lần — đừng phức tạp hoá chuyện đơn giản.

Những lỗi hay gặp khi dùng ARRAYFORMULA
- Lỗi
#REF!kèm dòng chữ "Array result was not expanded". Kết quả mảng cần chỗ để trải xuống, mà bên dưới lại có dữ liệu đang chắn. Cách xử lý: xoá hoặc di chuyển dữ liệu nằm trong vùng kết quả, hoặc thu hẹp vùng tham chiếu. Đây là lỗi số một với người mới. - Dùng cả cột khiến file chậm.
C2:Cnghĩa là toàn bộ cột, kể cả hàng chục nghìn dòng trống. Với file lớn hoặc có nhiều ARRAYFORMULA lồng VLOOKUP, nên giới hạn vùng nhưC2:C5000và nới ra khi cần. - Quên điều kiện ô trống. Kết quả là một cột đầy số 0 hoặc đầy
#N/A, làm hỏng biểu đồ và Pivot Table. Luôn bọcIF(vùng="",,...). - Người khác gõ đè vào vùng kết quả. Chỉ cần một người gõ tay vào ô E500, công thức đứt từ đó trở xuống, hoặc toàn bộ cột báo lỗi. Hãy dùng Protect range (bảo vệ dải ô) cho cột kết quả, chỉ chừa quyền sửa cho người phụ trách file.
- Dùng AND/OR thay vì
*và+. Công thức không báo lỗi, nhưng cả cột ra cùng một giá trị — kiểu sai âm thầm, rất khó phát hiện khi đã lên báo cáo.
Tóm lại và việc bạn nên làm tiếp
ARRAYFORMULA là một trong vài hàm thay đổi hẳn cách bạn làm việc với bảng tính: thay vì sửa hàng nghìn ô, bạn sửa một quy tắc. Ba điều cần nhớ: viết bằng vùng chứ không phải ô, luôn xử lý dòng trống bằng IF(vùng="",,...), và đặt công thức kèm tiêu đề ở dòng 1 nếu bảng nhận dữ liệu từ Google Form.
Bước tiếp theo để tự làm được ngay hôm nay:
- Mở một file đang dùng, tìm cột nào bạn phải kéo công thức thủ công nhiều nhất.
- Viết lại cột đó bằng
={"Tiêu_đề"; ARRAYFORMULA(IF(...))}ở dòng 1. - Thêm thử vài dòng mới ở cuối bảng, kiểm tra kết quả có tự nhảy không.
- Bật Protect range cho cột vừa làm, rồi mới chia sẻ file cho cả nhóm.
Tài liệu chính thức về hàm này có tại trang trợ giúp ARRAYFORMULA của Google; danh sách đầy đủ các hàm của Google Sheet nằm ở bảng tra cứu hàm chính thức — nên kiểm tra ở đó vì Google vẫn bổ sung hàm mới đều đặn.
Xem thêm
Câu hỏi thường gặp
›ARRAYFORMULA là hàm gì?
ARRAYFORMULA là hàm của Google Sheet giúp một công thức trả kết quả cho nhiều ô cùng lúc thay vì chỉ một ô. Bạn viết công thức bằng vùng (ví dụ C2:C*D2:D) thay vì bằng ô (C2*D2), đặt ở một ô duy nhất, và cả cột sẽ tự có kết quả kể cả khi bảng thêm dòng mới.
›Vì sao ARRAYFORMULA báo lỗi #REF!?
Thường là vì kết quả mảng cần trải xuống nhưng bên dưới đang có dữ liệu chắn đường, Google Sheet không ghi đè nên báo lỗi. Hãy xoá hoặc di chuyển dữ liệu nằm trong vùng kết quả, hoặc thu hẹp vùng tham chiếu lại đúng số dòng cần tính.
›Có dùng ARRAYFORMULA với VLOOKUP được không?
Được, chỉ cần đổi tham số tìm kiếm từ ô sang vùng, ví dụ =ARRAYFORMULA(IF(B2:B="",,VLOOKUP(B2:B,DM_SP!A:C,3,FALSE))). Nên thêm điều kiện bỏ qua dòng trống và bọc IFERROR để cột không hiện hàng loạt lỗi #N/A khi mã nhập sai.
›ARRAYFORMULA có làm file chậm không?
Bản thân ARRAYFORMULA thường nhẹ hơn việc kéo hàng nghìn công thức riêng lẻ. Nhưng nếu bạn tham chiếu cả cột (C2:C) và lồng thêm VLOOKUP hay QUERY vào trong, file có thể chậm rõ rệt. Cách khắc phục là giới hạn vùng, ví dụ C2:C5000, và nới ra khi dữ liệu tăng.
Tác giả
Chuyên gia chuyển đổi số · Đại diện 5F Edu
Hơn 8 năm triển khai và tư vấn chuyển đổi số cho doanh nghiệp vừa và nhỏ: chuẩn hoá quy trình, xây phần mềm quản lý bằng AppSheet và web app, tự động hoá bằng N8N. Người làm kênh YouTube Nghiện AppSheet.



