Hướng dẫn

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

Tuân HoangTuân Hoang
14 phút đọc
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.

Series Google Sheets Nâng Cao:
  • 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*C2 rồ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ứcN ô (1 per row)1 ô duy nhất
Tự mở rộng khi thêm dataKhông, phải kéo tayCó (nếu dùng open range)
Hiệu suấtChậm hơn với nhiều ôNhanh hơn (1 phép tính)
Dễ bị xóa nhầmDễ xóa từng ôKhó xóa (1 ô gốc)
File sizeLớn hơnNhỏ 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")
        )
      )
    )
  )
)
Mẹo quan trọng: Luôn kiểm tra ô trống với 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)
    )
  )
)
Lưu ý về VLOOKUP trong ARRAYFORMULA: Trong một số phiên bản Google Sheets, VLOOKUP không hoạt động hoàn hảo với ARRAYFORMULA khi dải lookup có nhiều hàng. Nếu gặp lỗi, hãy chuyển sang dùng INDEX/MATCH thay thế.

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 viLọc và trả về subset dữ liệu
Giữ nguyên vị trí hàngKhông (compact lại)
Tạo cột tính toánTốtKhông phù hợp
Lọc dữ liệuKhông trực tiếpTốt
Dùng kết hợpVới IF, TEXT, VLOOKUPVớ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))
Best practice: Với sheet có dưới 10.000 hàng, dùng open range thoải mái. Với sheet lớn hơn, hãy giới hạn range cụ thể để tối ưu hiệu suất.

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àng

Tổ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.

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