Khắc phục Lỗi #CALC! trong Excel: Hướng dẫn Xử lý Sự cố Mảng Động

intermediate📊 Microsoft Excel2026-05-12| Microsoft Excel (Office 365, Excel 2021, Excel dành cho Web) trên Windows/macOS

Error Message

#CALC!
#excel#mang-dong#cong-thuc#loi-spill#loi-calc

Lỗi #CALC! là gì?

#CALC!

Excel đã giới thiệu lỗi #CALC! cùng với Mảng động (Dynamic Arrays) vào năm 2020. Không giống như #REF! (liên kết bị hỏng) hay #DIV/0! (lỗi toán học), #CALC! có nghĩa là công cụ tính toán hiểu logic của bạn nhưng đơn giản là không thể tạo ra kết quả. Nó thường xảy ra khi một công thức cố gắng trả về một tập hợp trống hoặc vượt quá giới hạn lồng nhau nội bộ.

Tại sao lỗi này xảy ra

Bạn thường sẽ gặp phải lỗi này vì ba lý do sau:

  • Kết quả trống: Hàm FILTER của bạn đã tìm kiếm 10.000 hàng nhưng không tìm thấy kết quả khớp nào.
  • Mảng lồng nhau: Bạn đã cố gắng lồng một mảng vào trong một mảng khác, điều mà Excel hiện coi là một thao tác "không hợp lệ".
  • Quá tải bộ nhớ: Công thức quá nặng, có lẽ liên quan đến hàng triệu ô hoặc vòng lặp vô hạn trong một hàm LAMBDA.

Các giải pháp thực tế

1. Xử lý kết quả FILTER trống

Đây là nguyên nhân phổ biến nhất. Nếu bạn sử dụng =FILTER(A2:B500, A2:A500="Project X") và "Project X" không tồn tại, Excel sẽ báo lỗi #CALC! vì nó không biết hiển thị gì trên lưới.

Cách khắc phục: Sử dụng đối số if_empty để cung cấp cho Excel một giá trị dự phòng.

// Thay vì một tìm kiếm bị lỗi:
=FILTER(A2:B500, A2:A500="Project X")

// Sử dụng một chuỗi dự phòng:
=FILTER(A2:B500, A2:A500="Project X", "Không tìm thấy dự án")

Việc cung cấp một chuỗi mặc định hoặc số không giúp công cụ tính toán hoạt động bình thường ngay cả khi thiếu dữ liệu.

2. Sửa lỗi lồng "Mảng của các mảng"

Excel chưa hỗ trợ "Mảng của các mảng". Nếu bạn sử dụng MAP và tính toán bên trong trả về nhiều giá trị cho một hàng duy nhất, công thức sẽ bị hỏng. Hãy tưởng tượng nó giống như việc cố gắng nhét một chiếc vali vào trong một hộp cơm trưa.

// Lệnh này sẽ lỗi nếu một ID khớp với nhiều kết quả:
=MAP(A1:A10, LAMBDA(id, FILTER(C1:C100, D1:D100=id)))

Cách khắc phục: Sử dụng TEXTJOIN để làm phẳng các kết quả phụ thành một chuỗi duy nhất cho mỗi ô.

// Làm phẳng các kết quả phụ để tránh lỗi:
=MAP(A1:A10, LAMBDA(id, TEXTJOIN(", ", TRUE, FILTER(C1:C100, D1:D100=id))))

3. Tối ưu hóa Python trong Excel

Nếu bạn đang sử dụng Python trong Excel, lỗi #CALC! thường được kích hoạt khi tập lệnh của bạn trả về một đối tượng mà Excel không thể hiển thị, chẳng hạn như một kết nối cơ sở dữ liệu thô hoặc một dictionary phức tạp.

Cách khắc phục: Luôn chuyển đổi kết quả của bạn thành một danh sách (list), các giá trị dictionary hoặc một Pandas DataFrame trước khi trả về.

# Ô Python
import pandas as pd
df = xl("SalesData[#All]", headers=True)
# Làm sạch dữ liệu để đảm bảo nó khớp với lưới Excel
return df.query('Total > 1000').values.tolist()

4. Sử dụng LET để quản lý dữ liệu lớn

Khi các công thức xử lý hơn 50.000 hàng với nhiều tiêu chí, công cụ tính toán có thể bị quá thời gian (timeout). Việc chia nhỏ logic giúp Excel tối ưu hóa việc sử dụng bộ nhớ.

Cách khắc phục: Sử dụng hàm LET để định nghĩa các biến một lần thay vì phải tính toán lại chúng năm lần.

// Sử dụng LET để tăng tốc các bộ lọc phức tạp:
=LET(
    raw_data, Sheet2!$A$1:$Z$100000,
    target, "West Region",
    filtered, FILTER(raw_data, CHOOSECOLS(raw_data, 5)=target, "None"),
    filtered
)

Cách xác minh việc khắc phục

Đừng chỉ giả định rằng nó đã được sửa. Hãy thực hiện các bước sau để chắc chắn:

  • Buộc tính toán lại: Nhấn Ctrl + Alt + F9. Thao tác này buộc Excel phải xây dựng lại toàn bộ cây phụ thuộc tính toán.
  • Kiểm tra mảng: Sử dụng =TYPE(A1) trên kết quả. Giá trị 64 xác nhận một mảng hoạt động tốt, trong khi 16 có nghĩa là lỗi vẫn còn đó.
  • Kiểm tra trường hợp biên: Xóa tiêu chí lọc của bạn. Nếu ô hiển thị thông báo "Không có kết quả" thay vì #CALC!, công thức của bạn đã ổn định.

Mẹo từ chuyên gia

  • Luôn xác định đối số thứ ba trong hàm FILTER—nó giúp bạn tránh được 90% các rắc rối liên quan đến lỗi #CALC!.
  • Kiểm tra Tùy chọn Tính toán (Calculation Options). Nếu được đặt thành Thủ công (Manual), các mảng động của bạn có thể hiển thị các lỗi đã cũ.
  • Tránh lồng các hàm BYROW hoặc MAP vào nhau khi làm việc với các tập dữ liệu lớn hơn 10.000 hàng.

Related Error Notes