IMPORTRANGE, QUERY, ARRAYFORMULA - 3 Hàm "Thần Thánh" Của Google Sheets

Tại sao 3 hàm này được gọi là "thần thánh"?
Nếu bạn đã quen với Google Sheets cơ bản (SUM, VLOOKUP, IF...), thì IMPORTRANGE, QUERY và ARRAYFORMULA chính là bước nhảy vọt đưa bạn lên level "pro". Ba hàm này giải quyết 3 bài toán lớn nhất khi làm việc với dữ liệu:
| Hàm | Giải quyết vấn đề | Tương đương |
|---|---|---|
| IMPORTRANGE | Kéo dữ liệu từ file khác, liên kết nhiều spreadsheet | Linked Tables trong database |
| QUERY | Truy vấn, lọc, sắp xếp, nhóm dữ liệu | SQL SELECT trong database |
| ARRAYFORMULA | Áp dụng 1 công thức cho toàn bộ cột, không cần copy | Computed columns |
Đặc biệt, khi kết hợp cả 3 hàm, bạn có thể xây dựng hệ thống quản lý dữ liệu phức tạp mà không cần biết lập trình - điều mà trước đây chỉ database hoặc phần mềm chuyên dụng mới làm được.
Phần 1: IMPORTRANGE - Liên kết dữ liệu giữa các file
Cú pháp cơ bản
=IMPORTRANGE("spreadsheet_url", "sheet_name!range")
// Ví dụ thực tế:
=IMPORTRANGE("https://docs.google.com/spreadsheets/d/abc123xyz/edit", "Doanh thu!A1:F100")
Lưu ý quan trọng:
- Lần đầu dùng IMPORTRANGE, bạn phải cho phép truy cập (click "Allow access" trên ô hiện lỗi #REF!)
- Chỉ cần cho phép 1 lần cho mỗi cặp spreadsheet
- URL phải là URL đầy đủ hoặc chỉ phần spreadsheet_key
- Dữ liệu cập nhật tự động nhưng có thể chậm vài phút
10 ví dụ thực tế IMPORTRANGE
1. Kéo toàn bộ dữ liệu từ file khác
// Kéo bảng doanh thu từ file "Bán hàng 2026"
=IMPORTRANGE("1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms", "Sheet1!A:F")
// Kéo cột cụ thể (chỉ tên sản phẩm và doanh thu)
=IMPORTRANGE("1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms", "Sheet1!B:B,E:E")
2. Tổng hợp dữ liệu từ nhiều chi nhánh
// File tổng hợp - kéo dữ liệu từ 3 chi nhánh
// Sheet "HN":
=IMPORTRANGE(url_hanoi, "Doanh thu!A2:E")
// Sheet "HCM":
=IMPORTRANGE(url_hochiminh, "Doanh thu!A2:E")
// Sheet "DN":
=IMPORTRANGE(url_danang, "Doanh thu!A2:E")
3. Dùng Named Range cho gọn
// Đặt URL vào ô tham chiếu (ô A1 sheet Config)
// Config!A1 = "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms"
// Rồi dùng:
=IMPORTRANGE(Config!$A$1, "Sheet1!A:F")
// Khi cần đổi URL, chỉ sửa 1 ô Config!A1
4. Kéo dữ liệu động (range không cố định)
// Kéo dữ liệu từ dòng 2 đến hết (không giới hạn)
=IMPORTRANGE(url, "Data!A2:E")
// Kéo chỉ 1 ô cụ thể (tổng doanh thu)
=IMPORTRANGE(url, "Dashboard!B5")
Giới hạn IMPORTRANGE:
- Tối đa 50 IMPORTRANGE trong 1 spreadsheet
- Mỗi lần kéo tối đa vài ngàn dòng (nếu quá nhiều sẽ chậm)
- Không thể kéo từ file không được share quyền View
- Dữ liệu là read-only - không edit được ở file đích
Phần 2: QUERY - SQL trên Google Sheets
QUERY là hàm mạnh nhất trong Google Sheets - cho phép bạn truy vấn dữ liệu giống SQL nhưng ngay trong spreadsheet. Nếu bạn biết SQL thì sẽ thấy rất quen thuộc, nếu chưa biết thì cũng dễ học.
Cú pháp
=QUERY(data, query_string, headers)
// data: vùng dữ liệu (A1:F100 hoặc range từ IMPORTRANGE)
// query_string: câu truy vấn (giống SQL)
// headers: số dòng header (thường = 1)
Các mệnh đề QUERY phổ biến
| Mệnh đề | Chức năng | SQL tương đương |
|---|---|---|
| SELECT | Chọn cột hiển thị | SELECT |
| WHERE | Lọc dữ liệu theo điều kiện | WHERE |
| GROUP BY | Nhóm dữ liệu | GROUP BY |
| ORDER BY | Sắp xếp kết quả | ORDER BY |
| LIMIT | Giới hạn số dòng | LIMIT |
| PIVOT | Xoay dữ liệu (pivot table) | PIVOT |
| LABEL | Đổi tên cột header | AS alias |
| FORMAT | Định dạng output | FORMAT() |
15 ví dụ QUERY từ cơ bản đến nâng cao
Cơ bản: SELECT + WHERE
// Giả sử data A:F gồm: Ngày | Sản phẩm | Danh mục | Số lượng | Đơn giá | Thành tiền
// 1. Lấy tất cả cột
=QUERY(A:F, "SELECT *", 1)
// 2. Lấy cột cụ thể (Sản phẩm + Thành tiền)
=QUERY(A:F, "SELECT B, F", 1)
// 3. Lọc theo điều kiện (đơn hàng > 1 triệu)
=QUERY(A:F, "SELECT B, F WHERE F > 1000000", 1)
// 4. Lọc theo text (danh mục = "Điện tử")
=QUERY(A:F, "SELECT * WHERE C = 'Điện tử'", 1)
// 5. Nhiều điều kiện (AND/OR)
=QUERY(A:F, "SELECT * WHERE C = 'Điện tử' AND F > 500000", 1)
=QUERY(A:F, "SELECT * WHERE C = 'Điện tử' OR C = 'Thời trang'", 1)
Trung bình: GROUP BY + ORDER BY
// 6. Tổng doanh thu theo danh mục
=QUERY(A:F, "SELECT C, SUM(F) GROUP BY C", 1)
// 7. Tổng doanh thu theo danh mục, sắp xếp giảm dần
=QUERY(A:F, "SELECT C, SUM(F) GROUP BY C ORDER BY SUM(F) DESC", 1)
// 8. Đếm số đơn hàng theo sản phẩm
=QUERY(A:F, "SELECT B, COUNT(B) GROUP BY B ORDER BY COUNT(B) DESC", 1)
// 9. Top 5 sản phẩm bán chạy nhất
=QUERY(A:F, "SELECT B, SUM(D) GROUP BY B ORDER BY SUM(D) DESC LIMIT 5", 1)
// 10. Trung bình đơn giá theo danh mục
=QUERY(A:F, "SELECT C, AVG(E) GROUP BY C LABEL AVG(E) 'Giá TB'", 1)
Nâng cao: Lọc ngày tháng + PIVOT
// 11. Lọc theo ngày (tháng 2/2026)
=QUERY(A:F, "SELECT * WHERE A >= date '2026-02-01' AND A < date '2026-03-01'", 1)
// 12. Lọc theo tháng hiện tại (động)
=QUERY(A:F, "SELECT * WHERE MONTH(A)+1 = "&MONTH(TODAY())&" AND YEAR(A) = "&YEAR(TODAY()), 1)
// 13. PIVOT - Doanh thu theo danh mục theo tháng
=QUERY(A:F, "SELECT MONTH(A)+1, SUM(F) GROUP BY MONTH(A)+1 PIVOT C", 1)
// 14. Tìm kiếm gần đúng (CONTAINS, LIKE)
=QUERY(A:F, "SELECT * WHERE B CONTAINS 'iPhone'", 1)
=QUERY(A:F, "SELECT * WHERE B LIKE '%Samsung%'", 1)
// 15. Đổi tên header + format số
=QUERY(A:F,
"SELECT C, SUM(F), COUNT(B)
GROUP BY C
ORDER BY SUM(F) DESC
LABEL C 'Danh mục', SUM(F) 'Tổng DT', COUNT(B) 'Số đơn'
FORMAT SUM(F) '#,##0'",
1
)
Mẹo QUERY chuyên gia:
- Cột tham chiếu bằng chữ cái: A, B, C... (không phải tên cột)
- Text phải trong nháy đơn:
WHERE C = 'Điện tử' - Ngày phải dùng format date:
date '2026-02-01' - Nối biến bằng &:
"...WHERE A = '"&B1&"'" - MONTH() trả 0-11: cần
MONTH(A)+1để ra tháng thực
Phần 3: ARRAYFORMULA - Một công thức cho cả cột
ARRAYFORMULA cho phép bạn viết 1 công thức duy nhất áp dụng cho toàn bộ cột, thay vì copy-paste xuống từng dòng. Khi có dòng dữ liệu mới, kết quả tự động tính - không cần kéo công thức.
Cú pháp
=ARRAYFORMULA(expression)
// Thay vì copy công thức =D2*E2 xuống hàng trăm dòng:
// Chỉ cần 1 công thức ở F2:
=ARRAYFORMULA(D2:D*E2:E)
10 ví dụ ARRAYFORMULA thiết thực
// 1. Tính thành tiền = Số lượng × Đơn giá (cả cột)
=ARRAYFORMULA(IF(LEN(D2:D), D2:D * E2:E, ""))
// 2. Tự động đánh số thứ tự
=ARRAYFORMULA(IF(LEN(B2:B), ROW(B2:B)-1, ""))
// 3. Ghép họ tên
=ARRAYFORMULA(IF(LEN(A2:A), A2:A & " " & B2:B, ""))
// 4. Tính thuế VAT 10%
=ARRAYFORMULA(IF(LEN(F2:F), F2:F * 0.1, ""))
// 5. IF lồng nhau - Phân loại khách hàng
=ARRAYFORMULA(IF(LEN(F2:F),
IF(F2:F >= 10000000, "VIP",
IF(F2:F >= 5000000, "Tiềm năng", "Thường")),
""))
// 6. Trích xuất tên miền từ email
=ARRAYFORMULA(IF(LEN(C2:C),
RIGHT(C2:C, LEN(C2:C) - FIND("@", C2:C)),
""))
// 7. Đếm số ngày từ ngày tạo đến hôm nay
=ARRAYFORMULA(IF(LEN(A2:A), TODAY() - A2:A, ""))
// 8. Format số tiền có dấu phẩy
=ARRAYFORMULA(IF(LEN(F2:F), TEXT(F2:F, "#,##0"), ""))
// 9. Tạo link Google Maps từ địa chỉ
=ARRAYFORMULA(IF(LEN(G2:G),
"https://www.google.com/maps/search/" & ENCODEURL(G2:G),
""))
// 10. VLOOKUP cho cả cột (thay vì copy từng dòng)
=ARRAYFORMULA(IF(LEN(C2:C),
VLOOKUP(C2:C, DanhMuc!A:B, 2, FALSE),
""))
Tại sao cần IF(LEN(...)) bọc ngoài?
Nếu không bọc, ARRAYFORMULA sẽ tính cho tất cả dòng trống trong cột, gây ra kết quả 0 hoặc lỗi tràn. IF(LEN(A2:A), ..., "") đảm bảo chỉ tính khi ô A có dữ liệu.
Kết hợp 3 hàm: Sức mạnh đỉnh cao
Khi kết hợp cả 3 hàm, bạn có thể xây dựng hệ thống báo cáo tự động cực kỳ mạnh mẽ:
Combo 1: QUERY + IMPORTRANGE - Truy vấn dữ liệu từ file khác
// Kéo và lọc dữ liệu từ file khác trong 1 công thức
=QUERY(
IMPORTRANGE("spreadsheet_url", "Data!A:F"),
"SELECT Col1, Col2, Col6
WHERE Col3 = 'Điện tử' AND Col6 > 1000000
ORDER BY Col6 DESC",
1
)
// LƯU Ý: Khi dùng IMPORTRANGE trong QUERY,
// tên cột là Col1, Col2... (không phải A, B...)
Combo 2: QUERY + ARRAYFORMULA - Báo cáo tổng hợp tự động
// Tạo bảng tổng hợp 12 tháng tự động
=ARRAYFORMULA(
QUERY(
{MONTH(A2:A)+1, B2:B, F2:F},
"SELECT Col1, SUM(Col3)
WHERE Col1 IS NOT NULL
GROUP BY Col1
ORDER BY Col1
LABEL Col1 'Tháng', SUM(Col3) 'Doanh thu'",
0
)
)
Combo 3: Cả 3 hàm - Dashboard báo cáo liên chi nhánh
// Bước 1: Gộp dữ liệu 3 chi nhánh (dùng ARRAYFORMULA + dấu {})
=ARRAYFORMULA({
IMPORTRANGE(url_hn, "Data!A2:F"),
"Hà Nội";
IMPORTRANGE(url_hcm, "Data!A2:F"),
"TP.HCM";
IMPORTRANGE(url_dn, "Data!A2:F"),
"Đà Nẵng"
})
// Bước 2: QUERY trên dữ liệu đã gộp
=QUERY(
MergedData!A:G,
"SELECT G, SUM(F)
WHERE G IS NOT NULL
GROUP BY G
ORDER BY SUM(F) DESC
LABEL G 'Chi nhánh', SUM(F) 'Tổng DT'",
1
)
Bài tập thực hành: Hệ thống quản lý đơn hàng
Áp dụng cả 3 hàm vào một bài toán thực tế - quản lý đơn hàng cho cửa hàng online:
Cấu trúc dữ liệu (Sheet "Đơn hàng"):
A: Mã đơn | B: Ngày | C: Khách hàng | D: Sản phẩm | E: Số lượng | F: Đơn giá | G: Thành tiền | H: Trạng thái | I: Khu vực
// Cột G: Tự động tính thành tiền (ARRAYFORMULA)
=ARRAYFORMULA(IF(LEN(E2:E), E2:E * F2:F, ""))
// Sheet "Báo cáo": Top 10 khách hàng mua nhiều nhất (QUERY)
=QUERY('Đơn hàng'!A:I,
"SELECT C, COUNT(A), SUM(G)
WHERE H = 'Hoàn thành'
GROUP BY C
ORDER BY SUM(G) DESC
LIMIT 10
LABEL C 'Khách hàng', COUNT(A) 'Số đơn', SUM(G) 'Tổng mua'",
1)
// Doanh thu theo khu vực và tháng (QUERY + PIVOT)
=QUERY('Đơn hàng'!A:I,
"SELECT I, SUM(G)
WHERE H = 'Hoàn thành'
GROUP BY I
PIVOT MONTH(B)+1
LABEL I 'Khu vực'",
1)
// Kéo danh sách sản phẩm từ file kho (IMPORTRANGE)
=IMPORTRANGE(url_kho, "Sản phẩm!A:C")
Lỗi thường gặp và cách khắc phục
| Lỗi | Nguyên nhân | Cách sửa |
|---|---|---|
| #REF! | IMPORTRANGE chưa được cho phép | Click ô lỗi → "Allow access" |
| #VALUE! | QUERY syntax sai | Kiểm tra nháy đơn/đôi, tên cột |
| #N/A | Không tìm thấy dữ liệu khớp | Kiểm tra điều kiện WHERE |
| Kết quả tràn | ARRAYFORMULA trả quá nhiều dòng | Thêm IF(LEN()) hoặc giới hạn range |
| Col1, Col2... | QUERY trên IMPORTRANGE dùng Col thay A,B | Đổi A→Col1, B→Col2, C→Col3... |
| Chậm/Loading | Quá nhiều IMPORTRANGE hoặc data lớn | Giới hạn range, giảm số IMPORTRANGE |
So sánh hiệu năng: Khi nào dùng hàm nào?
| Bài toán | Dùng hàm | Tại sao |
|---|---|---|
| Lấy dữ liệu từ file khác | IMPORTRANGE | Chỉ hàm này làm được |
| Lọc + sắp xếp dữ liệu | QUERY | Nhanh hơn FILTER, linh hoạt hơn |
| Tổng hợp theo nhóm (GROUP BY) | QUERY | SUMIFS cần nhiều cột, QUERY gọn hơn |
| Tính công thức cho cả cột | ARRAYFORMULA | Không cần copy, tự mở rộng |
| Lọc đơn giản (1-2 điều kiện) | FILTER | FILTER đơn giản hơn QUERY cho lọc đơn |
| Tra cứu giá trị | VLOOKUP/INDEX-MATCH | Chuyên dụng cho lookup, nhanh hơn QUERY |
Câu hỏi thường gặp (FAQ)
QUERY có thay thế hoàn toàn VLOOKUP không?
Không hoàn toàn. QUERY mạnh hơn cho tổng hợp/nhóm/lọc phức tạp, nhưng VLOOKUP/INDEX-MATCH vẫn nhanh hơn và dễ dùng hơn cho tra cứu đơn giản (1 giá trị). Dùng QUERY khi cần WHERE + GROUP BY, dùng VLOOKUP khi chỉ cần tìm 1 giá trị.
IMPORTRANGE có an toàn không? Người khác có thấy dữ liệu file gốc?
An toàn. IMPORTRANGE chỉ kéo dữ liệu bạn chỉ định (range cụ thể), không share toàn bộ file. Người xem file đích chỉ thấy dữ liệu đã kéo, không truy cập được file nguồn trừ khi được share riêng.
ARRAYFORMULA có làm file chậm không?
Có thể, nếu dùng trên toàn bộ cột (A:A thay vì A2:A5000). Mẹo: giới hạn range cụ thể, tránh ARRAYFORMULA lồng quá nhiều hàm phức tạp, và tránh dùng quá 20-30 ARRAYFORMULA trong 1 file.
Tại sao QUERY trả lỗi khi lọc cột có cả số và text?
QUERY yêu cầu cột phải có kiểu dữ liệu đồng nhất. Nếu cột vừa có số vừa có text, Google Sheets sẽ chọn kiểu chiếm đa số và bỏ qua kiểu còn lại. Fix: Đảm bảo cột chỉ chứa 1 kiểu dữ liệu, hoặc dùng TO_TEXT() để convert.
Có thể dùng biến trong QUERY không?
Có! Dùng toán tử & để nối ô tham chiếu vào chuỗi query. Ví dụ: =QUERY(A:F, "SELECT * WHERE C = '"&B1&"'", 1) - lọc theo giá trị ô B1.
Kết luận
IMPORTRANGE, QUERY và ARRAYFORMULA là bộ 3 hàm nền tảng biến Google Sheets từ bảng tính đơn giản thành công cụ quản lý dữ liệu mạnh mẽ. Khi thành thạo 3 hàm này, bạn có thể:
- Liên kết dữ liệu giữa nhiều file mà không copy-paste
- Truy vấn, lọc, nhóm dữ liệu như database chuyên nghiệp
- Tự động hóa tính toán cho hàng nghìn dòng mà không cần lập trình
- Xây dựng hệ thống báo cáo real-time liên chi nhánh
Hãy bắt đầu với từng hàm riêng lẻ, rồi dần kết hợp chúng. Thực hành là cách học nhanh nhất!
Muốn hệ thống quản lý chuyên nghiệp hơn?
SheetStore cung cấp phần mềm quản lý bán hàng được xây dựng trên Google Sheets - sử dụng QUERY, ARRAYFORMULA và nhiều công thức nâng cao. Giá chỉ từ 699K.
Xem sản phẩm SheetStoreBà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.
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.