Tình Huống
2 giờ sáng, dashboard spreadsheet của bạn bị hỏng, và đã có ba người nhắn tin hỏi tại sao tab tổng hợp chỉ hiển thị toàn lỗi #REF!. Bạn truy ngược lại và phát hiện ra thủ phạm là một loạt công thức INDIRECT vốn chạy tốt tuần trước — cho đến khi ai đó đổi tên sheet từ SalesData thành Sales Data Q2.
Lỗi bạn đang thấy:
Error: Function INDIRECT parameter 1 value 'My Sheet!A1' is not a valid cell/range reference.
Công thức trông như thế này:
=INDIRECT("My Sheet!A1")
Hoàn toàn hợp lý. Hoàn toàn bị vỡ.
Tại Sao Lỗi Này Xảy Ra
Google Sheets yêu cầu dấu nháy đơn bao quanh tên sheet khi tên chứa khoảng trắng, ký tự đặc biệt (-, (, ), &), hoặc tên bắt đầu bằng số. Khi bạn nhập công thức trực tiếp, Sheets tự động thêm dấu nháy đơn đó. Còn hàm INDIRECT thì không được hỗ trợ như vậy — nó nhận một chuỗi văn bản thuần túy và tự tạo tham chiếu, không có tính năng tự động thêm dấu nháy.
Bỏ sót dấu nháy trong chuỗi và Sheets sẽ coi đó là một tham chiếu không hợp lệ. Đó là nguồn gốc của lỗi #REF!.
Công thức thông thường (Sheets tự xử lý dấu nháy nội bộ):
='My Sheet'!A1 ✓ Works
INDIRECT với chuỗi thô (không có dấu nháy):
=INDIRECT("My Sheet!A1") ✗ Breaks — #REF!
Quy Trình Debug
Bước 1: Xác nhận tên sheet là nguyên nhân
Kiểm tra nhanh để xác định vấn đề. Trong bất kỳ ô trống nào, tham chiếu đến một sheet có tên đơn giản — không có khoảng trắng, không có ký tự đặc biệt:
=INDIRECT("Sheet1!A1")
Nếu cái đó hoạt động được? Thì vấn đề nằm ở định dạng tên sheet, không phải logic công thức hay ô đích của bạn.
Bước 2: Kiểm tra chuỗi INDIRECT của bạn thực sự trông như thế nào
Khi chuỗi tham chiếu được xây dựng động từ giá trị một ô, hãy cô lập nó trước. Đặt công thức này vào một ô trống:
=A1&"!B2"
Kiểm tra kết quả đầu ra. Nếu bạn thấy My Sheet!B2, đó là chuỗi bị lỗi. Bạn cần 'My Sheet'!B2 — với dấu nháy đơn bao quanh tên sheet.
Bước 3: Xác định những tên sheet cần thêm dấu nháy
Các trường hợp sau đây đều yêu cầu dấu nháy đơn bên trong chuỗi INDIRECT:
- Chứa khoảng trắng:
Sales Data,Q1 Report - Chứa ký tự đặc biệt:
Revenue-2024,Data (Final),Team & Results - Bắt đầu bằng số:
2024 Budget - Chính tên sheet chứa dấu nháy đơn (trường hợp đau đầu — sẽ nói thêm bên dưới)
Cách Sửa
Tùy chọn 1: Tên sheet cố định trong INDIRECT
Bọc tên sheet trong dấu nháy đơn bên trong chuỗi:
=INDIRECT("'My Sheet'!A1")
Dấu nháy kép bên ngoài là ký tự phân định chuỗi. Dấu nháy đơn bên trong bọc lấy tên sheet. Sheets phân tích 'My Sheet'!A1 chính xác và trả về giá trị ô mà bạn mong đợi.
Tùy chọn 2: Tên sheet động lấy từ một ô
Giả sử ô A1 chứa văn bản My Sheet. Hãy nối dấu nháy đơn bao quanh nó:
=INDIRECT("'"&A1&"'!B2")
Giải thích từng phần:
"'"— dấu nháy đơn mở đầu (một chuỗi gồm một ký tự)&A1&— tên sheet lấy từ ô A1"'!B2"— dấu nháy đơn đóng cộng với tham chiếu ô
Cách này tạo ra 'My Sheet'!B2, INDIRECT sẽ phân tích được mà không gặp vấn đề gì.
Tùy chọn 3: Tên sheet động + tham chiếu ô động
Cả hai giá trị đều lấy từ ô:
=INDIRECT("'"&A1&"'!"&B1)
Trong đó A1 chứa tên sheet và B1 chứa địa chỉ ô — ví dụ như C5 hoặc D12.
Trường hợp đặc biệt: Tên sheet chứa dấu nháy đơn
Ai đó đặt tên tab là Manager's Report. Giờ bạn đang đối mặt với vấn đề dấu nháy nằm bên trong dấu nháy. Bên trong chuỗi INDIRECT, hãy thoát ký tự dấu nháy đơn bằng cách nhân đôi nó lên:
=INDIRECT("'Manager''s Report'!A1")
Hai dấu nháy đơn liên tiếp ('') bên trong chuỗi bọc ngoài biểu thị một dấu nháy đơn nghĩa đen — không phải dấu nháy đóng.
Với tên sheet động có thể chứa dấu nháy đơn, dùng SUBSTITUTE để tự động xử lý việc thoát ký tự:
=INDIRECT("'"&SUBSTITUTE(A1,"'","''")&"'!B1")
Cách này trở nên rối rắm rất nhanh. Giải pháp gọn gàng hơn về lâu dài: đổi tên sheet và bỏ hoàn toàn dấu nháy đơn đi.
Kiểm Tra Sau Khi Sửa
Sau khi áp dụng bản sửa lỗi:
- Kiểm tra bằng mắt: Lỗi
#REF!biến mất và ô hiển thị giá trị mong đợi từ sheet đích. - Kiểm tra công thức: Nhấp vào ô và xem thanh công thức — xác nhận chuỗi INDIRECT có dấu nháy đơn bao quanh tên sheet.
- Kiểm tra trên nhiều hàng: Công thức động thường trải dài 20–50 hàng. Hãy kiểm tra ngẫu nhiên một vài hàng có tên sheet khác nhau để đảm bảo logic thêm dấu nháy hoạt động đúng trong mọi trường hợp.
- Kiểm tra bằng cách đổi tên: Tạm thời đổi tên sheet đích sang tên đơn giản (không có khoảng trắng) — công thức sẽ bị lỗi trở lại. Đổi lại tên cũ — công thức phải hoạt động. Cách này giúp cô lập bản sửa lỗi và loại trừ các biến số khác.
Phòng Tránh Lỗi Tái Phát
Lỗi này gây đau đầu nhất trong các dashboard dùng INDIRECT để tạo tham chiếu động. Các công thức trông ổn trong quá trình phát triển — tên sheet gọn gàng, mọi thứ hoạt động. Rồi ai đó đổi tên một tab cho "thân thiện" hơn và sáng thứ Hai bạn đang nhìn chằm chằm vào 50 ô bị lỗi.
Một vài thói quen giúp ngăn chặn điều này:
- Luôn thêm dấu nháy cho tên sheet trong INDIRECT, kể cả khi tên trông có vẻ an toàn.
=INDIRECT("'Sheet1'!A1")hoạt động giống hệt=INDIRECT("Sheet1!A1")— dấu nháy vô hại khi không cần thiết, nhưng thiết yếu khi tên thay đổi. - Dùng một cột phụ trợ để xây dựng chuỗi tham chiếu đầy đủ có dấu nháy, sau đó đưa vào INDIRECT. Debug một ô riêng biệt dễ hơn nhiều so với kiểm tra 50 phép nối chuỗi lồng nhau.
- Đặt quy tắc đặt tên sheet trong một ghi chú trên tab điều khiển nếu có nhiều người chỉnh sửa bảng tính. Chỉ cần một dòng — "Không dùng khoảng trắng trong tên sheet" — là có thể loại bỏ hoàn toàn loại lỗi này.
- Cân nhắc dùng named ranges thay vì INDIRECT khi có thể. Named ranges theo dõi dữ liệu của chúng khi sheet được đổi tên; còn các công thức INDIRECT thì âm thầm bị lỗi.

