Google Sheets hay Excel: so sánh thật cho người dùng văn phòng và chủ cửa hàng nhỏ
Google Sheets hay Excel: so chi phí, làm chung, dùng trên điện thoại, khi mất mạng, giới hạn dữ liệu, Apps Script với VBA và các công thức khác nhau.
Mẹo Google Sheets · 15 phút đọc
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.

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.
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.
=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.
=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.
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.

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.
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.
=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.
=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.
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):
=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 trên trang đó.
Để 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.
=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.

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 \ :
=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. Đặ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:
=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)| 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 đề.
| 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.
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 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ộ.

Đâ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.
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 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ả 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 ô đó.
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ì.
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.
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.
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.
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.
Mẫu khác liên quan: Quản lý Lead & Bán hàng PRO.
Google Sheets hay Excel: so chi phí, làm chung, dùng trên điện thoại, khi mất mạng, giới hạn dữ liệu, Apps Script với VBA và các công thức khác nhau.
Cách dùng hàm XLOOKUP trong Google Sheets: gõ mã khách ra tên, SĐT, hạng; tra sang trái, giá trị khi không thấy, khớp gần đúng, sửa lỗi #N/A.
Cách tạo biểu đồ trong Google Sheets: chọn loại cột, đường, tròn, kết hợp, cột chồng; trục phụ, đổi màu, nhãn, biểu đồ tự cập nhật, SPARKLINE và lỗi hay gặp.
Cách dùng hàm QUERY trong Google Sheets: cú pháp, select, where, group by, order by, label, pivot, Col1, lọc theo ngày, theo ô tham chiếu và sửa lỗi hay gặp.
Xem thêm mẹo và video hướng dẫn trên kênh YouTube HiTaVa, hoặc đọc các bài khác trong chủ đề Mẹo Google Sheets.
Cần hỏi thêm?Zalo 0935077673 (Hải Vân)