
Hàm IMPORTRANGE Google Sheet là hàm kéo dữ liệu từ một file Google Sheet khác về file bạn đang mở, chỉ cần bạn có link (hoặc ID) của file nguồn và quyền xem file đó. Cú pháp cơ bản là =IMPORTRANGE("link_file_nguon"; "DonHang!A1:H"), và lần đầu chạy bạn phải bấm nút Cho phép truy cập hiện ra ngay trong ô. Nếu muốn lọc theo điều kiện hoặc tổng hợp luôn khi nhập, bạn bọc IMPORTRANGE bên trong QUERY hoặc FILTER thay vì kéo hết rồi lọc tay.
Trong bài này tôi đi theo đúng tình huống hay gặp nhất ở doanh nghiệp vừa và nhỏ: mỗi chi nhánh giữ một file riêng, văn phòng cần một file tổng để xem doanh số chung. Bạn sẽ có công thức cụ thể để sao chép, cách gộp nhiều file, và bảng tra lỗi #REF! theo từng nguyên nhân.
IMPORTRANGE là gì và dùng khi nào?
IMPORTRANGE là hàm của Google Sheet dùng để lấy một vùng ô từ bảng tính khác đưa vào bảng tính hiện tại. Nó khác hoàn toàn với tham chiếu nội bộ kiểu =DonHang!A1 — tham chiếu nội bộ chỉ chạy trong cùng một file, còn IMPORTRANGE đi xuyên qua ranh giới giữa hai file khác nhau trên Google Drive.
Ví dụ dễ hình dung: một chuỗi cửa hàng có ba chi nhánh, mỗi chi nhánh dùng một file DonHang riêng để nhân viên nhập đơn trong ngày. Cách làm này có cái lý của nó — file nhỏ, chạy nhanh, nhân viên chi nhánh này không nhìn thấy số của chi nhánh kia. Nhưng cuối tháng kế toán phải mở ba file, copy ba lần, dán vào một file tổng. Tháng nào cũng lặp lại, và chỉ cần copy thiếu một dòng là báo cáo sai. IMPORTRANGE giải quyết đúng chỗ đó: file tổng tự đọc dữ liệu từ ba file con, bạn không phải copy nữa.
Những lúc nên dùng IMPORTRANGE:
- Dữ liệu nằm ở nhiều file do nhiều người/nhiều bộ phận nhập, cần gom về một chỗ để xem tổng.
- Bạn muốn chia sẻ một phần dữ liệu cho người khác mà không cho họ quyền vào file gốc.
- Bạn cần một file báo cáo "chỉ đọc", không ai sửa được số liệu nguồn từ đây.
Những lúc không nên dùng: dữ liệu quá lớn (vài chục nghìn dòng trở lên và còn tăng), nhiều người cùng ghi vào một lúc, hoặc bạn cần phân quyền theo từng dòng. Lúc đó Google Sheet đã bị đẩy quá vai trò của nó — tôi có viết riêng về chuyện dùng Google Sheet làm database đến lúc nào thì phải chuyển.
Cú pháp hàm IMPORTRANGE Google Sheet
Hàm chỉ có đúng hai tham số: địa chỉ file nguồn và vùng dữ liệu cần lấy. Cả hai đều phải là chuỗi, tức là nằm trong dấu nháy kép (hoặc trỏ tới một ô đang chứa chuỗi đó).
=IMPORTRANGE("https://docs.google.com/spreadsheets/d/ABC123xyz/edit"; "DonHang!A1:H")
Bạn cũng có thể dùng mỗi phần ID của file (đoạn ABC123xyz nằm giữa /d/ và /edit trên thanh địa chỉ) thay cho cả link dài:
=IMPORTRANGE("ABC123xyz"; "DonHang!A1:H")
Ba điều phải nhớ khi gõ công thức
- Lần đầu luôn hiện lỗi. Ô sẽ báo
#REF!kèm dòng "Bạn cần kết nối các trang tính này". Bấm vào ô, bấm Cho phép truy cập. Đây là bước bắt buộc một lần cho mỗi cặp file, không phải lỗi sai công thức. - Tên tab phải đúng từng ký tự. "DonHang" khác "Don Hang" khác "donhang". Nếu tên tab có dấu cách hoặc dấu tiếng Việt, bọc trong nháy đơn:
"'Đơn hàng'!A1:H". - Dấu phân cách tham số tuỳ theo cài đặt vùng của file. Vào File → Cài đặt → Ngôn ngữ và khu vực để xem. File để vùng Việt Nam thường dùng dấu chấm phẩy
;, file để vùng United States dùng dấu phẩy,. Công thức trong bài tôi viết dấu chấm phẩy; nếu file bạn báo lỗi cú pháp, hãy đổi hết;thành,.
Mẹo nhỏ: để link vào một ô riêng
Thay vì nhúng link dài vào từng công thức, tôi hay dành hẳn một tab tên CauHinh, ô B2 ghi link file chi nhánh 1, B3 ghi chi nhánh 2... rồi viết:
=IMPORTRANGE(CauHinh!B2; "DonHang!A1:H")
Khi đầu năm đổi sang file mới, bạn chỉ sửa một ô thay vì sửa hai chục công thức rải khắp file. Lưu ý là ô đó phải chứa link ở dạng văn bản thuần, đừng để Google tự biến nó thành liên kết rút gọn hiển thị tên file.
IMPORTRANGE có điều kiện với FILTER
Muốn IMPORTRANGE có điều kiện, cách đơn giản nhất là bọc nó trong FILTER và dùng INDEX để chỉ ra cột làm điều kiện. Giả sử file chi nhánh có bảng DonHang với cột A là MaDon, B là Ngay, C là NhanVien, D là KhachHang, E là SanPham, F là SoLuong, G là ThanhTien, H là TrangThai. Bạn chỉ muốn lấy các đơn đã "Hoàn thành":
=FILTER(IMPORTRANGE(CauHinh!B2; "DonHang!A2:H"); INDEX(IMPORTRANGE(CauHinh!B2; "DonHang!A2:H"); 0; 8)="Hoàn thành")
Giải thích phần rối nhất: INDEX(...; 0; 8) nghĩa là "lấy toàn bộ cột thứ 8" của kết quả nhập về — số 0 ở vị trí dòng nghĩa là mọi dòng. Bạn không thể viết H:H ở đây, vì dữ liệu nhập về chưa nằm trong ô nào của file hiện tại, nó chỉ là một khối kết quả tạm trong bộ nhớ.
Nhược điểm thấy ngay: IMPORTRANGE bị gọi hai lần trong cùng một công thức, một lần lấy dữ liệu và một lần lấy cột điều kiện. Thêm một điều kiện nữa là thành ba lần. File nhỏ thì không sao, file vài nghìn dòng sẽ thấy rõ độ trễ mỗi lần mở bảng tính. Vì vậy FILTER hợp khi điều kiện đơn giản và dữ liệu vừa phải; nhiều điều kiện hoặc cần tính tổng thì nên chuyển sang QUERY.
IMPORTRANGE + QUERY: lọc và tổng hợp ngay khi nhập
Cặp IMPORTRANGE+QUERY cho phép bạn vừa lấy dữ liệu, vừa lọc, vừa nhóm và tính tổng chỉ bằng một công thức, và chỉ gọi IMPORTRANGE đúng một lần. Đây là cách tôi dùng nhiều nhất cho các file báo cáo.
Ví dụ: lấy doanh số đã hoàn thành của từng nhân viên ở file chi nhánh 1:
=QUERY(IMPORTRANGE(CauHinh!B2; "DonHang!A1:H"); "select Col3, sum(Col7) where Col8 = 'Hoàn thành' group by Col3 order by sum(Col7) desc"; 1)
Vì sao phải viết Col3 chứ không phải C?
Vì QUERY đang làm việc trên một khối dữ liệu tạm do IMPORTRANGE trả về, không phải trên một vùng ô có địa chỉ thật. Khối đó không có tên cột A, B, C — nó chỉ có cột số 1, 2, 3 tính từ trái của vùng bạn nhập. Quy tắc để không nhầm:
- Cột trong câu lệnh được đánh số từ 1, tính từ cột đầu tiên của vùng nhập, không phải từ cột A của file nguồn.
- Nếu bạn nhập
"DonHang!C1:H"thì cột C trở thànhCol1, cột D làCol2, và cột TrangThai (H) làCol6. - Chuỗi so sánh trong câu lệnh dùng nháy đơn:
where Col8 = 'Hoàn thành', vì cả câu lệnh đã nằm trong nháy kép. - Số
1cuối công thức là số dòng tiêu đề của vùng nhập. Nếu bạn nhập từA2(không có tiêu đề) thì ghi0.
Một vài câu lệnh hay dùng, dán vào chỗ phần "select ...":
| Mục đích | Câu lệnh QUERY |
|---|---|
| Lấy đơn từ ngày 01/09/2026 trở đi | select * where Col2 >= date '2026-09-01' |
| Đơn chưa hoàn thành và trên 1 triệu | select * where Col8 <> 'Hoàn thành' and Col7 > 1000000 |
| Doanh số theo sản phẩm | select Col5, sum(Col7) group by Col5 |
| Đếm số đơn theo trạng thái | select Col8, count(Col1) group by Col8 |
| Tìm theo tên khách gần đúng | select * where lower(Col4) contains 'minh' |
Lưu ý ngày tháng: QUERY chỉ hiểu date 'YYYY-MM-DD', không hiểu định dạng ngày kiểu Việt Nam. Nếu cột ngày ở file nguồn đang là văn bản chứ không phải ngày thật, câu lệnh sẽ trả về rỗng mà không báo lỗi — đây là cái bẫy làm nhiều người mất cả buổi. Tôi có bài riêng đi sâu hơn về cấu trúc hàm QUERY và cách viết nhiều điều kiện nếu bạn muốn khai thác hết phần này.
Gộp dữ liệu nhiều chi nhánh vào một file tổng
Để gộp dọc nhiều file, bạn đặt các hàm IMPORTRANGE trong cặp ngoặc nhọn { } và ngăn cách bằng dấu xuống dòng của mảng. Điều kiện bắt buộc: các file phải có cùng số cột và cùng thứ tự cột, nếu không công thức sẽ báo lỗi.
={IMPORTRANGE(CauHinh!B2; "DonHang!A2:H"); IMPORTRANGE(CauHinh!B3; "DonHang!A2:H"); IMPORTRANGE(CauHinh!B4; "DonHang!A2:H")}
Ba điểm cần chú ý:
- Bỏ dòng tiêu đề của file thứ hai trở đi. Tôi để tất cả đều bắt đầu từ
A2, rồi tự gõ tiêu đề cố định ở dòng 1 của file tổng. Nếu đểA1, bạn sẽ thấy dòng "MaDon / Ngay / NhanVien..." lặp lại ba lần giữa bảng, và mọi hàm SUMIF phía sau sẽ lệch. - Dấu phân cách trong
{ }phụ thuộc cài đặt vùng. Đây là chỗ hay làm người mới nản. Nếu công thức trên báo lỗi, thử đổi dấu ngăn giữa các IMPORTRANGE sang dấu phẩy, hoặc ngược lại. Cách chắc ăn: gõ thử={1;2}vào một ô trống — nếu ra hai số nằm trên hai dòng thì dấu chấm phẩy đang là dấu xuống dòng. - Thêm cột ChiNhanh để biết dòng nào của ai. Khi gộp xong, cả ba chi nhánh trộn lẫn và bạn không phân biệt được nữa. Cách gọn nhất là thêm sẵn một cột ChiNhanh ngay trong file nguồn của mỗi chi nhánh. Nếu không sửa được file nguồn, hãy nhập mỗi file vào một tab riêng (CN1, CN2, CN3), ở cột trống bên cạnh dùng
=ARRAYFORMULA(IF(A2:A=""; ""; "Chi nhanh 1")), rồi mới gộp ba tab lại.
Sau khi có bảng gộp, bạn có thể dùng QUERY ngay trên vùng nội bộ đó — nhanh hơn nhiều so với lồng QUERY vào trong khối { }.

Vì sao IMPORTRANGE báo lỗi #REF?
Lỗi #REF! của IMPORTRANGE gần như luôn rơi vào một trong năm nguyên nhân: chưa cấp quyền kết nối, sai tên tab hoặc vùng, kết quả tràn đè lên ô đã có dữ liệu, bạn không có quyền xem file nguồn, hoặc dữ liệu vượt giới hạn. Mẹo chẩn đoán nhanh: đưa chuột vào ô lỗi, Google luôn hiện một dòng mô tả ngắn — đọc dòng đó trước khi sửa công thức.
| Dấu hiệu | Nguyên nhân | Cách sửa |
|---|---|---|
| Hiện nút "Cho phép truy cập" | Cặp file chưa được kết nối lần nào | Bấm vào ô, bấm Cho phép truy cập. Chỉ cần làm một lần cho mỗi cặp file. |
| Báo không tìm thấy phạm vi / dải ô | Sai tên tab, tab đã bị đổi tên hoặc xoá | Mở file nguồn, chép đúng tên tab. Tên có dấu cách thì bọc nháy đơn: "'Đơn hàng'!A1:H". |
| Báo kết quả không được mở rộng / sẽ ghi đè dữ liệu | Vùng bên dưới hoặc bên phải ô công thức đang có dữ liệu | Xoá sạch các ô trong vùng kết quả sẽ tràn ra. Tốt nhất đặt IMPORTRANGE vào một tab trống riêng. |
| Bấm cho phép rồi vẫn lỗi | Tài khoản đang mở file tổng không có quyền xem file nguồn | Chủ file nguồn chia sẻ quyền Người xem cho đúng tài khoản đang viết công thức. |
| Lúc được lúc không, file rất chậm | Vùng nhập quá lớn hoặc quá nhiều IMPORTRANGE | Thu hẹp vùng, gom về một lần nhập duy nhất (xem phần sau). |
Một trường hợp nữa ít gặp hơn: tham chiếu vòng. Nếu file A đã IMPORTRANGE từ file B, mà bạn lại viết trong file B một công thức IMPORTRANGE đọc ngược về file A, Google sẽ từ chối. Vẽ nhanh sơ đồ mũi tên một chiều trước khi làm sẽ tránh được chuyện này.
Bạn có thể bọc công thức trong IFERROR để báo cáo không bị vỡ trước mặt sếp: =IFERROR(IMPORTRANGE(...); "Chưa lấy được dữ liệu"). Nhưng xin lưu ý — đây là che lỗi, không phải sửa lỗi. Dùng xong vẫn phải quay lại tìm nguyên nhân thật, nếu không bạn sẽ có một file tổng luôn "đẹp" nhưng thiếu số liệu của một chi nhánh mà không ai biết.
Lưu ý hiệu năng khi dùng IMPORTRANGE
IMPORTRANGE là hàm nặng vì mỗi lần chạy nó phải gọi sang một file khác qua mạng, nên nguyên tắc chung là gọi càng ít lần và lấy càng ít ô càng tốt. Bốn thói quen giúp file tổng không bị ì:
- Giới hạn vùng thay vì lấy cả cột. Viết
"DonHang!A1:H5000"thay vì"DonHang!A:H". Lấy cả cột nghĩa là kéo về hàng chục nghìn ô trống vô ích. - Chỉ lấy cột cần dùng. Báo cáo doanh số chỉ cần ngày, nhân viên, thành tiền, trạng thái thì đừng kéo cả ghi chú và link ảnh.
- Nhập một lần vào tab trung gian, rồi tham chiếu nội bộ. Đây là mẹo hiệu quả nhất. Tạo tab ẩn tên DL_CN1 chỉ chứa đúng một công thức IMPORTRANGE; mọi QUERY, SUMIFS, PIVOT phía sau đều trỏ vào tab đó. Thay vì 15 lần gọi qua mạng, bạn chỉ còn 1.
- Không lồng nhiều tầng. File A lấy từ file B, file B lại lấy từ file C — chuỗi càng dài thì độ trễ càng cộng dồn và lỗi càng khó truy. Nếu thấy mình đang xây tới tầng thứ ba, đó là tín hiệu dữ liệu nên nằm trong một cơ sở dữ liệu thật hoặc một app có backend riêng.
Về giới hạn con số (kích thước tối đa của một bảng tính, số công thức tham chiếu chéo cho phép), Google có thay đổi theo thời gian nên tôi không ghi số cụ thể ở đây để tránh dẫn bạn đi sai. Tại thời điểm tôi viết bài này (tháng 10/2026), bạn nên kiểm tra trực tiếp ở trang tài liệu chính thức về hàm IMPORTRANGE và trang về giới hạn tệp trên Google Drive.
Và một ranh giới thật lòng: IMPORTRANGE giỏi ở việc đọc. Nó không ghi ngược lại được, không ràng buộc được dữ liệu nhập vào, không phân quyền theo dòng. Khi nhu cầu của bạn bắt đầu là "nhân viên chi nhánh chỉ được sửa đơn của mình", "nhập sai mã hàng phải chặn ngay", thì vấn đề không còn là chọn hàm nào nữa mà là cần một ứng dụng đứng trên dữ liệu. Ngược lại, nếu bạn chỉ cần một bảng tổng để nhìn số mỗi sáng, IMPORTRANGE là đủ và đừng phức tạp hoá.
Tóm tắt và việc bạn nên làm tiếp
Những ý chính cần nhớ:
- IMPORTRANGE lấy dữ liệu từ file Sheet khác, cú pháp hai tham số, lần đầu phải bấm Cho phép truy cập.
- Lọc đơn giản dùng FILTER với INDEX; lọc nhiều điều kiện hoặc cần tính tổng thì dùng QUERY, nhớ gọi cột bằng
Col1,Col2. - Gộp nhiều file bằng
{ }, bỏ dòng tiêu đề lặp và thêm cột ChiNhanh. - Lỗi
#REF!hầu hết do chưa cấp quyền, sai tên tab hoặc kết quả bị chặn đường tràn — đọc dòng gợi ý khi rê chuột vào ô là ra. - Gom về một lần nhập ở tab trung gian, giới hạn vùng, đừng lồng nhiều tầng.
Bước tiếp theo để tự làm được ngay hôm nay: tạo một file mới tên TongHop, thêm tab CauHinh và dán link file chi nhánh vào ô B2; thêm tab DL_CN1 và viết đúng một công thức IMPORTRANGE giới hạn vùng; cấp quyền; cuối cùng ở tab báo cáo viết QUERY trỏ vào DL_CN1. Làm xong với một chi nhánh rồi hãy nhân lên cho chi nhánh thứ hai, thứ ba — đừng viết cả ba cùng lúc, vì khi lỗi bạn sẽ không biết lỗi ở đâu.
Nếu bạn muốn chắc phần nền trước khi vào IMPORTRANGE, hai bài này đi cùng mạch: các hàm Google Sheet hay dùng nhất (IF, SUMIF, COUNTIF, SUMIFS) và hàm QUERY Google Sheet: cấu trúc và ví dụ nâng cao.
Câu hỏi thường gặp
›Vì sao IMPORTRANGE báo lỗi #REF?
Phổ biến nhất là bạn chưa bấm nút "Cho phép truy cập" hiện ra trong ô ở lần chạy đầu tiên — đây là bước bắt buộc một lần cho mỗi cặp file. Các nguyên nhân còn lại gồm: gõ sai tên tab hoặc vùng dữ liệu, kết quả trả về bị chặn vì ô bên dưới đã có dữ liệu, tài khoản đang dùng không có quyền xem file nguồn, hoặc tham chiếu vòng giữa hai file. Hãy rê chuột vào ô lỗi, Google luôn hiện một dòng mô tả nguyên nhân cụ thể.
›IMPORTRANGE có tự cập nhật khi file nguồn thay đổi không?
Có, dữ liệu sẽ tự đồng bộ theo file nguồn mà bạn không phải làm gì. Tuy nhiên việc cập nhật không tức thì như tham chiếu trong cùng một file — thường có độ trễ vài chục giây đến vài phút, nhất là khi vùng dữ liệu lớn. Nếu cần ép làm mới ngay, bạn có thể sửa nhẹ công thức rồi Enter lại, hoặc đóng mở lại bảng tính.
›Người xem file tổng có cần quyền vào file nguồn không?
Không. Quyền truy cập được cấp một lần giữa hai bảng tính bởi người viết công thức, nên sau đó ai xem được file tổng là xem được dữ liệu đã nhập về, kể cả khi họ hoàn toàn không có quyền mở file nguồn. Đây chính là lý do IMPORTRANGE hay được dùng để chia sẻ một phần dữ liệu mà vẫn giữ kín file gốc. Đổi lại, bạn phải cẩn thận: đừng nhập về những cột nhạy cảm như giá vốn hay lương nếu file tổng được chia sẻ rộng.
›Có giới hạn số IMPORTRANGE trong một file không?
Google có áp giới hạn về kích thước bảng tính và số lượng công thức tham chiếu chéo, nhưng các con số này thay đổi theo thời gian nên bạn nên kiểm tra trực tiếp trên trang hỗ trợ chính thức của Google thay vì tin một con số cũ. Về mặt thực tế, trước khi chạm giới hạn kỹ thuật thì file đã chậm thấy rõ. Cách xử lý là gom về một lần nhập duy nhất trong tab trung gian rồi tham chiếu nội bộ, thay vì rải nhiều IMPORTRANGE khắp file.
›Nên dùng FILTER hay QUERY để lọc dữ liệu IMPORTRANGE?
Dùng FILTER khi điều kiện đơn giản và bạn chỉ muốn lấy nguyên các dòng thoả điều kiện. Dùng QUERY khi cần nhiều điều kiện, cần chọn một số cột nhất định, hoặc cần nhóm và tính tổng ngay khi nhập. QUERY còn có lợi thế là chỉ gọi IMPORTRANGE một lần, trong khi FILTER phải gọi lại cho mỗi cột điều kiện nên chậm hơn với dữ liệu lớn.
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.



