# Hàm IMPORTRANGE trong Google Sheets: lấy dữ liệu từ file khác, gộp nhiều file chi nhánh và sửa lỗi #REF!

IMPORTRANGE lấy một vùng ô từ file Google Sheets khác về file đang mở: =IMPORTRANGE("link hoặc ID file"; "'Đơn hàng'!A1:D"). Lần đầu ô báo #REF!, bạn bấm "Cho phép truy cập" một lần là dữ liệu hiện ra và tự cập nhật khi file nguồn đổi. Bài này đi qua cú pháp, bước cấp quyền, cách lọc bằng QUERY và FILTER, cách gộp nhiều file chi nhánh vào một bảng (kể cả dấu \ và ; theo vùng Việt Nam), các lỗi #REF! hay gặp, giới hạn tốc độ và điều cần biết về bảo mật.

Đăng 2026-10-20 · 15 phút đọc · IMPORTRANGE, QUERY, Google Sheets, Công thức

## Hàm IMPORTRANGE là gì, dùng khi nào

Trong cùng một file, bạn lấy dữ liệu trang khác bằng 'Đơn hàng'!A2:D. Khi dữ liệu nằm ở **file khác** — mỗi chi nhánh một file, kế toán giữ file lương riêng, đội bán hàng có file riêng — thì cần IMPORTRANGE. Hàm này kéo một vùng ô từ file nguồn về file đích; file nguồn đổi số thì file đích đổi theo.

- **Đối số:** Link hoặc ID file nguồn; "Tên trang!vùng ô"
- **Lần đầu:** Bấm "Cho phép truy cập" một lần cho mỗi file nguồn
- **Giới hạn:** 10 MB dữ liệu nhận về mỗi yêu cầu
- **Cập nhật:** Khi file nguồn đổi, và tự kiểm tra mỗi giờ khi file đang mở

Ví dụ trong bài: một cửa hàng có 3 chi nhánh Quận 1, Quận 3, Thủ Đức. Mỗi chi nhánh có một file riêng, trang **Đơn hàng** gồm A = Ngày, B = Mã đơn, C = Nhân viên, D = Doanh thu. Chủ cửa hàng muốn một file tổng hợp tự cập nhật mà không phải chép tay mỗi tối.

## Cú pháp hàm IMPORTRANGE

Tên đối số theo trợ giúp tiếng Việt của Google.

```
=IMPORTRANGE(url_bảng_tính; chuỗi_dải_ô)
```

| Đối số | Nghĩa | Ví dụ |
|---|---|---|
| url_bảng_tính | Link của file nguồn, đặt trong dấu ngoặc kép hoặc trỏ tới ô chứa link. Chỉ dán phần ID (chuỗi giữa /d/ và /edit) cũng được | "https://docs.google.com/spreadsheets/d/1AbC…/edit" hoặc B1 |
| chuỗi_dải_ô | Tên trang, dấu !, rồi vùng ô, đặt trong ngoặc kép. Bỏ tên trang thì lấy trang đầu tiên của file | "'Đơn hàng'!A1:D" |

Cách gọn nhất là để link mỗi file ở một ô riêng, ví dụ B1 là link file Quận 1, rồi viết công thức trỏ tới ô đó. Đổi file nguồn chỉ cần dán link mới vào B1.

Gõ ở A3 trang tổng hợp. Tên trang có dấu cách nên bọc trong nháy đơn. A1:D lấy từ dòng tiêu đề tới hết trang, 4 cột.

```
=IMPORTRANGE(B1; "'Đơn hàng'!A1:D")
```

**Thử lại:** file Quận 1 có 3 đơn: 02/10/2026 · Q1-01 · Lan · 1.200.000; 05/10/2026 · Q1-02 · Minh · 850.000; 09/10/2026 · Q1-03 · Lan · 2.000.000. Sau khi cho phép truy cập, A3:D3 là dòng tiêu đề, A4:D6 là 3 đơn trên. Chi nhánh thêm đơn thứ 4 thì nó tự hiện ở dòng 7.

Thay vì A1:D, bạn có thể dùng tên của dải ô được đặt tên trong file nguồn, ví dụ "DonHang". Dải ô được đặt tên đi theo dữ liệu khi người ta đổi tên trang hay chèn cột, nên ít gãy hơn gõ tay "'Đơn hàng'!A1:D".

**Lấy vừa đủ, đừng lấy cả trang:** Viết "'Đơn hàng'!A:Z" khi chỉ cần 4 cột là kéo về cả nghìn ô trống, làm file chậm và dễ chạm giới hạn 10 MB. Chỉ lấy đúng các cột cần dùng.

## Cấp quyền IMPORTRANGE: bấm "Cho phép truy cập"

Lần đầu file đích lấy dữ liệu từ một file nguồn mới, Google không trả dữ liệu ngay mà hỏi quyền. Sau vài giây ô công thức báo #REF!; di chuột hoặc bấm vào ô sẽ thấy dòng "Bạn cần phải kết nối các trang tính này" và nút **Cho phép truy cập**.

![Ba bước: gõ =IMPORTRANGE(B1; "'Đơn hàng'!A1:D"), ô báo #REF! với hộp Bạn cần phải kết nối các trang tính này và nút Cho phép truy cập, rồi bảng 3 đơn Q1-01 Lan 1.200.000, Q1-02 Minh 850.000, Q1-03 Lan 2.000.000](https://www.hitava.cloud/img/blog/importrange-google-sheets/cho-phep-truy-cap.webp)
*Mỗi cặp file đích – file nguồn chỉ cần cho phép một lần.*

- **Bạn phải có ít nhất quyền xem file nguồn.** Không có quyền thì Google báo bạn không có quyền truy cập trang tính; mở link file nguồn, xin quyền và chờ chủ file chấp nhận.
- **Mỗi file nguồn cho phép một lần.** File tổng hợp lấy từ 3 chi nhánh thì phải bấm cho phép 3 lần, mỗi file một lần. Lần sau thêm IMPORTRANGE khác từ cùng file đó thì không phải bấm nữa.
- **Quyền đi theo người bấm.** Theo Google, quyền này còn hiệu lực cho tới khi người đã bấm cho phép bị gỡ khỏi file nguồn.

**Ghép nhiều IMPORTRANGE mà không thấy nút cho phép:** Khi ba IMPORTRANGE nằm chung một công thức {…}, chỉ cần một file chưa cho phép là cả công thức báo #REF!, và có lúc không hiện nút. Cách xử lý: gõ riêng từng =IMPORTRANGE(B1; "A1"), =IMPORTRANGE(B2; "A1")… vào ô trống, bấm cho phép từng cái, rồi xoá các ô đó. Công thức gộp sẽ chạy.

## IMPORTRANGE kết hợp QUERY và FILTER

Thường bạn không cần cả bảng mà chỉ một phần: đơn trên 1 triệu, đơn của một nhân viên, tổng theo người. Bọc IMPORTRANGE trong QUERY. Vì dữ liệu lúc này là **mảng** chứ không phải dải ô thường, QUERY không hiểu cột A, B mà phải gọi theo vị trí **Col1, Col2, Col3, Col4**.

Số 1 ở cuối: dòng đầu tiên lấy về là tiêu đề.

```
=QUERY(IMPORTRANGE(B1; "'Đơn hàng'!A1:D"); "select Col2, Col3, Col4 where Col4 >= 1000000"; 1)
```

**Thử lại:** trong 3 đơn của Quận 1, chỉ Q1-01 (1.200.000) và Q1-03 (2.000.000) từ 1 triệu trở lên. Kết quả: dòng tiêu đề + **2 dòng**: Q1-01 · Lan · 1.200.000 và Q1-03 · Lan · 2.000.000.

Cộng doanh thu theo nhân viên.

```
=QUERY(IMPORTRANGE(B1; "'Đơn hàng'!A1:D"); "select Col3, sum(Col4) where Col3 is not null group by Col3 label sum(Col4) 'Doanh thu'"; 1)
```

**Thử lại:** Lan = 1.200.000 + 2.000.000 = **3.200.000**, Minh = **850.000**. Viết WHERE, GROUP BY, lọc theo ngày trong QUERY có ở bài [hàm QUERY trong Google Sheets](https://www.hitava.cloud/blog/cach-dung-ham-query-google-sheets).

Muốn dùng FILTER, đặt kết quả IMPORTRANGE vào một tên bằng LET để khỏi gọi hai lần, rồi lấy cột thứ 3 bằng INDEX(d; 0; 3):

A2:D bỏ dòng tiêu đề vì FILTER không cần.

```
=LET(d; IMPORTRANGE(B1; "'Đơn hàng'!A2:D"); FILTER(d; INDEX(d; 0; 3)="Lan"))
```

**Thử lại:** ra 2 dòng của Lan: Q1-01 và Q1-03.

**SUMIFS, COUNTIF không nhận kết quả IMPORTRANGE:** SUMIF, SUMIFS, COUNTIF, COUNTIFS chỉ nhận dải ô thật, đưa mảng IMPORTRANGE vào thì báo lỗi. Dùng QUERY như trên, hoặc =LET(d; IMPORTRANGE(B1; "'Đơn hàng'!A2:D"); SUM(FILTER(INDEX(d; 0; 4); INDEX(d; 0; 3)="Lan"))) ra 3.200.000. Còn nếu cần dùng SUMIFS nhiều lần, lấy dữ liệu về một trang riêng rồi viết [SUMIFS, COUNTIFS](https://www.hitava.cloud/blog/cach-dung-ham-sumifs-countifs) trên trang đó.

## Gộp nhiều file chi nhánh bằng IMPORTRANGE

Để xếp dữ liệu 3 chi nhánh chồng lên nhau thành một bảng, đặt các IMPORTRANGE trong ngoặc nhọn, cách nhau bằng dấu chấm phẩy. B1, B2, B3 là link 3 file.

Dải mở A2:D lấy cả các dòng trống cuối mỗi file; QUERY với where Col1 is not null bỏ chúng đi để các chi nhánh nằm liền nhau.

```
=QUERY({IMPORTRANGE(B1; "'Đơn hàng'!A2:D"); IMPORTRANGE(B2; "'Đơn hàng'!A2:D"); IMPORTRANGE(B3; "'Đơn hàng'!A2:D")}; "select * where Col1 is not null"; 0)
```

**Thử lại:** Quận 1 có 3 đơn, Quận 3 có 2 đơn (600.000 và 1.500.000), Thủ Đức có 4 đơn (900.000, 700.000, 1.100.000, 300.000). Kết quả là **9 dòng** liền nhau, tổng cột thứ 4 là 4.050.000 + 2.100.000 + 3.000.000 = **9.150.000**. Không có QUERY bọc ngoài thì giữa các chi nhánh là cả trăm dòng trống.

![Bảng so sánh vùng Việt Nam và vùng Hoa Kỳ: đối số cách bằng ; và ,; xếp chồng xuống dưới đều dùng ;; ghép sang phải dùng \ và ,; số thập phân 0,9 và 0.9](https://www.hitava.cloud/img/blog/importrange-google-sheets/dau-phan-cach.webp)
*Vùng Việt Nam ghép cột trong ngoặc nhọn bằng dấu \ chứ không phải dấu phẩy.*

Vì sao là dấu \? Theo trợ giúp của Google, ở những vùng dùng dấu phẩy làm dấu thập phân, dấu phẩy ghép cột trong mảng được thay bằng dấu gạch chéo ngược. Vùng Việt Nam viết số là 1.234,5 nên thuộc nhóm này. Dấu ; để xếp xuống dòng dưới thì giống nhau ở mọi vùng. Kiểm vùng của file ở **Tệp › Cài đặt**.

Bảng gộp cần biết dòng nào của chi nhánh nào. Ghép thêm một cột chữ bên phải mỗi phần bằng dấu \ :

Mỗi phần thành 5 cột: 4 cột dữ liệu + cột Chi nhánh (Col5). Cách hoạt động của ARRAYFORMULA ở dòng này có ở bài [hàm ARRAYFORMULA](/blog/cach-dung-arrayformula-google-sheets).

```
=QUERY({
LET(q; IMPORTRANGE(B1; "'Đơn hàng'!A2:D"); {q \ ARRAYFORMULA(IF(INDEX(q; 0; 1)=""; ""; "Quận 1"))});
LET(q; IMPORTRANGE(B2; "'Đơn hàng'!A2:D"); {q \ ARRAYFORMULA(IF(INDEX(q; 0; 1)=""; ""; "Quận 3"))});
LET(q; IMPORTRANGE(B3; "'Đơn hàng'!A2:D"); {q \ ARRAYFORMULA(IF(INDEX(q; 0; 1)=""; ""; "Thủ Đức"))})
}; "select * where Col1 is not null"; 0)
```

ARRAYFORMULA ở đây biến chữ "Quận 1" thành cả một cột dài bằng dữ liệu, dòng trống thì để trống — cách hoạt động có ở bài [hàm ARRAYFORMULA trong Google Sheets](https://www.hitava.cloud/blog/cach-dung-arrayformula-google-sheets). Đặt công thức trên ở trang **Gộp**, rồi làm báo cáo từ trang đó thay vì gọi IMPORTRANGE lại lần nữa:

Trang Gộp là dải ô thường nên gọi cột bằng chữ A, B, C.

```
=QUERY('Gộp'!A1:E; "select E, count(B), sum(D) where A is not null group by E label E 'Chi nhánh', count(B) 'Số đơn', sum(D) 'Doanh thu'"; 0)
```

*Thử lại: kết quả của công thức trên với số liệu ví dụ, tổng 9 đơn, 9.150.000.*

| Chi nhánh | Số đơn | Doanh thu |
|---|---|---|
| Quận 1 | 3 | 4.050.000 |
| Quận 3 | 2 | 2.100.000 |
| Thủ Đức | 4 | 3.000.000 |

**Các file phải cùng cấu trúc cột:** Xếp chồng bằng dấu ; thì mọi phần phải có cùng số cột. Chi nhánh Thủ Đức tự thêm cột "Ghi chú" và bạn lấy A2:E của file đó trong khi hai file kia là A2:D, công thức báo #VALUE! vì mảng thiếu giá trị ở một số dòng. Giữ một file mẫu chung cho mọi chi nhánh và khoá dòng tiêu đề.

## Lỗi #REF! trong IMPORTRANGE và các lỗi hay gặp

| Dấu hiệu | Nguyên nhân | Cách sửa |
|---|---|---|
| #REF!, có nút Cho phép truy cập | Lần đầu lấy từ file nguồn này | Bấm Cho phép truy cập |
| #REF!, báo không có quyền truy cập | Bạn chưa có quyền xem file nguồn | Xin quyền chủ file nguồn |
| #REF! sau khi chi nhánh đổi tên trang | Chuỗi "'Đơn hàng'!A1:D" không còn khớp | Sửa tên trang, hoặc dùng dải ô được đặt tên |
| #REF!, báo sẽ ghi đè dữ liệu | Vùng kết quả bên dưới, bên phải có ô đã có chữ | Xoá ô chặn, để trống vùng tràn |
| Công thức gộp {…} báo #REF! | Một trong các file chưa được cho phép | Gõ riêng từng IMPORTRANGE để bấm cho phép |
| #VALUE! khi gộp | Các file khác số cột | Lấy cùng số cột ở mọi file |
| Báo lỗi đang tải mãi | Quá nhiều hàm IMPORT trong các file của bạn | Giảm số IMPORTRANGE, gộp về một trang |
| Báo lỗi kết quả quá lớn | Vượt 10 MB mỗi yêu cầu | Thu hẹp vùng ô, tóm tắt ở file nguồn trước |
| Báo không được tham chiếu ô có NOW, RAND | Đối số trỏ tới ô dùng hàm thay đổi liên tục | Dán giá trị thay cho công thức; TODAY thì được |

Nếu IMPORTRANGE từng chạy rồi bỗng báo không lấy được dữ liệu, hỏi chủ file nguồn xem họ có bật tuỳ chọn tắt tải xuống, in và sao chép không. Theo Google, khi tuỳ chọn này bật, IMPORTRANGE **mới** không lấy được dữ liệu từ file đó; công thức đã có từ trước vẫn chạy.

## Giới hạn và tốc độ của IMPORTRANGE

- **10 MB mỗi yêu cầu.** Dữ liệu được tải về máy bạn, nên mạng chậm thì file đích cũng chậm.
- **Cập nhật:** file nguồn có thay đổi thì file đích đang mở tự làm mới (thanh tải màu xanh). Ngoài ra Google tự kiểm tra mỗi giờ khi file đang mở. Mở lại file không chắc làm mới ngay.
- **Chuỗi nhiều tầng thì chậm.** File A lấy từ B, B lấy từ C: mỗi tầng phải chờ tầng trước tính xong. Hai file lấy vòng của nhau thì không ra kết quả.
- **Hạn mức tính theo người tạo file**, cộng dồn mọi hàm IMPORT trong mọi file họ tạo. Công thức có đối số thay đổi liên tục dễ bị Google hạn chế.

Mẹo giữ file nhẹ: tóm tắt ngay trong file nguồn (một trang Tổng hợp nhỏ do chi nhánh tự tính), rồi chỉ IMPORTRANGE vùng tóm tắt đó; mỗi file nguồn chỉ gọi IMPORTRANGE **một lần** về một trang riêng, các báo cáo khác tham chiếu trang đó. Bài [Google Sheets hay Excel](https://www.hitava.cloud/blog/google-sheets-hay-excel) có nói khi nào Google Sheets bắt đầu chậm vì nhiều IMPORTRANGE.

Nếu bạn gộp file chỉ vì mỗi cửa hàng có một file riêng, cách bền hơn là để mọi cửa hàng ghi vào **cùng một file** có cột Kho/Cửa hàng ngay từ đầu. Khi đó báo cáo theo từng cửa hàng chỉ là một bộ lọc, không có bước cấp quyền, không chờ đồng bộ.

![Bảng tồn kho của mẫu Bán hàng 360 PRO: mã hàng son môi, các cột Tồn CH-NT, Tồn KHO-BT, Tồn XUONG, Tồn kho 4, Tồn kho 5, Tồn tổng, Đang chuyển, Giá trị tồn, Giá vốn bình quân, Bán 30/60/90 ngày; dòng TỔNG giá trị tồn 1.246.617.637](https://www.hitava.cloud/img/blog/importrange-google-sheets/ton-theo-kho.webp)
*Tồn từng cửa hàng, kho, xưởng nằm cạnh nhau trong một file của mẫu Bán hàng 360 PRO.*

→ [Có 2–5 cửa hàng hoặc kho mà đang ghép file bằng IMPORTRANGE? Mẫu Bán hàng 360 PRO để tới 5 kho, cửa hàng, xưởng trong một file Google Sheets: tồn theo từng kho, chuyển kho, lãi theo từng cửa hàng. Nhân viên bán qua web app bằng link riêng và mã PIN, không cần tài khoản Google, không thấy bảng tính (web app cài bằng Apps Script, chỉ chạy trên Google Sheets).](https://www.hitava.cloud/san-pham/ban-hang-360-pro)

## IMPORTRANGE có an toàn không: ai thấy được dữ liệu

Đây là chỗ nhiều người không ngờ. Theo trợ giúp của Google, sau khi đã cho phép, **mọi người có quyền chỉnh sửa file đích** đều dùng được IMPORTRANGE để lấy **bất kỳ phần nào** của file nguồn, không chỉ vùng bạn đã chọn.

Ví dụ: file lương của kế toán có trang Bảng lương và trang Tổng quỹ lương. Bạn IMPORTRANGE trang Tổng quỹ lương sang file báo cáo rồi chia sẻ quyền sửa file báo cáo cho trưởng nhóm. Trưởng nhóm chỉ cần sửa chuỗi thành "'Bảng lương'!A:Z" là thấy lương từng người, dù chưa bao giờ được chia sẻ file lương.

- **Người chỉ có quyền xem file đích** thấy được những gì IMPORTRANGE đang hiện, dù họ không có quyền vào file nguồn.
- **Khoá ô, khoá trang không che dữ liệu.** Bảo vệ trang tính chỉ chặn sửa, không chặn xem hay chặn lấy dữ liệu — xem [cách khoá ô công thức trong Google Sheets](https://www.hitava.cloud/blog/khoa-o-cong-thuc-google-sheets).
- **Dùng file trung gian.** Chỉ đưa phần được phép chia sẻ (ví dụ tổng quỹ lương theo phòng) sang một file riêng, rồi IMPORTRANGE từ file trung gian đó. File gốc nhạy cảm không bao giờ được kết nối trực tiếp.
- **Thu hồi quyền:** quyền IMPORTRANGE còn tới khi người đã bấm cho phép bị gỡ khỏi file nguồn. Người đó nghỉ việc thì gỡ họ khỏi file nguồn.

Với dữ liệu khách hàng của đội bán hàng, thay vì chia file theo từng người rồi gộp lại, mẫu [Quản lý Lead & Bán hàng PRO](https://www.hitava.cloud/san-pham/quan-ly-lead-ban-hang-pro) có portal trên điện thoại: mỗi nhân viên một link riêng, chỉ thấy lead của mình, không cần quyền mở trang tính (phần này dùng Apps Script, chỉ chạy trên Google Sheets).

## Đọc tiếp

- [Hàm ARRAYFORMULA trong Google Sheets](https://www.hitava.cloud/blog/cach-dung-arrayformula-google-sheets): Một công thức cho cả cột, sửa lỗi #REF! khi mảng bị chặn
- [Hàm QUERY trong Google Sheets](https://www.hitava.cloud/blog/cach-dung-ham-query-google-sheets): Lọc, cộng theo nhóm dữ liệu lấy về
- [Hàm SUMIFS và COUNTIFS](https://www.hitava.cloud/blog/cach-dung-ham-sumifs-countifs): Cộng, đếm theo nhiều điều kiện trên trang đã gộp
- [Google Sheets hay Excel](https://www.hitava.cloud/blog/google-sheets-hay-excel): Lấy dữ liệu file khác ở hai bên khác nhau thế nào

## Câu hỏi thường gặp về IMPORTRANGE

**IMPORTRANGE dùng link hay ID file?**

Cả hai đều được. Link đầy đủ dễ kiểm tra hơn; ID là chuỗi giữa /d/ và /edit trong link. Nên để link ở một ô riêng rồi trỏ công thức tới ô đó.

**Vì sao IMPORTRANGE báo #REF!?**

Hay gặp nhất là chưa bấm Cho phép truy cập, bạn chưa có quyền xem file nguồn, tên trang trong chuỗi sai, hoặc vùng kết quả bị ô có dữ liệu chặn. Di chuột vào ô lỗi để xem Google báo gì.

**IMPORTRANGE bao lâu cập nhật một lần?**

File nguồn có thay đổi thì file đích đang mở tự làm mới; ngoài ra Google kiểm tra mỗi giờ khi file đang mở. Dữ liệu lớn hoặc chuỗi nhiều file lấy của nhau sẽ chậm hơn.

**Gộp nhiều file bằng IMPORTRANGE dùng dấu phẩy hay chấm phẩy?**

Vùng Việt Nam: đối số trong hàm cách bằng ;, xếp chồng các file xuống dưới trong ngoặc nhọn bằng ;, ghép sang phải bằng \. Vùng Hoa Kỳ ghép sang phải bằng dấu phẩy. Kiểm vùng ở Tệp › Cài đặt.

**Người khác có xem được dữ liệu file nguồn qua IMPORTRANGE không?**

Có. Người có quyền sửa file đích lấy được bất kỳ phần nào của file nguồn đã cho phép; người có quyền xem file đích thấy phần đang hiện. Dữ liệu nhạy cảm nên đi qua một file trung gian.

**IMPORTRANGE có chạy trong Excel không?**

Không. Tải file về .xlsx thì IMPORTRANGE không chạy trong Excel; Excel lấy dữ liệu file khác bằng liên kết ngoài hoặc Power Query.

## Nguồn

- [Google — Hàm IMPORTRANGE](https://support.google.com/docs/answer/3093340?hl=vi)
- [Google — Sử dụng mảng trong Google Trang tính (dấu phân cách theo vùng)](https://support.google.com/docs/answer/6208276?hl=vi)
- [Google — Hàm QUERY](https://support.google.com/docs/answer/3093343?hl=vi)
- [Google — Hàm FILTER](https://support.google.com/docs/answer/3093197?hl=vi)
- [Google — Hàm LET](https://support.google.com/docs/answer/13190535?hl=vi)

## Mẫu liên quan

- https://www.hitava.cloud/san-pham/ban-hang-360-pro
- https://www.hitava.cloud/san-pham/quan-ly-lead-ban-hang-pro

Trang bài viết: https://www.hitava.cloud/blog/importrange-google-sheets