Menu

Hàm IFERROR trong Excel: thay #N/A, #DIV/0! (và IFNA)

=IFERROR(B2/C2,0) trả về B2/C2, hoặc 0 khi phép chia bị lỗi. Tìm hiểu IFERROR với VLOOKUP, trả về ô trống thay cho lỗi, vì sao IFNA hợp hơn cho tra cứu, và vì sao giấu mọi lỗi có thể che mất sai sót thật.

Mọi bảng tính trên trang này đều trực tiếp: đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

=IFERROR(B2/C2,0) trả về kết quả của B2/C2, hoặc 0 khi kết quả đó là lỗi. Đối số đầu tiên là công thức bạn cần; đối số thứ hai là nội dung hiện ra thay cho bất kỳ lỗi nào công thức đó gây ra.

Giá mỗi đơn vị
E2
ABCDE
1ProductRevenueUnitsPlainWith IFERROR
2Pens$12080$1.50$1.50
3Paper$30050$6.00$6.00
4Ink$900#DIV/0!$0.00
5Tape$4530$1.50$1.50
6Clips$00#DIV/0!$0.00
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Ink và Clips có 0 đơn vị, nên phép chia thông thường ở cột D báo #DIV/0!. Cột E hiện $0,00 cho hai mặt hàng này và giá bình thường cho mọi hàng khác. Nhập 15 vào C4 và cả hai cột đều hiện giá của Ink.

Cú pháp hàm IFERROR

=IFERROR(value, value_if_error)
  • value là công thức cần tính.
  • value_if_error được trả về khi value là bất kỳ lỗi nào: #N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, #NULL!, và các lỗi mới hơn như #CALC!.
  • Nếu value không phải lỗi, IFERROR trả về nguyên giá trị đó.

Giá trị thay thế có thể là một số (0), văn bản ("Not found"), văn bản rỗng ("") hoặc một công thức khác, ví dụ một phép tra cứu thứ hai trong bảng khác: =IFERROR(VLOOKUP(E2,A2:C6,3,FALSE),VLOOKUP(E2,G2:I6,3,FALSE)).

IFERROR với VLOOKUP

Phép tra cứu trả về #N/A khi giá trị không có trong bảng. Bọc nó trong IFERROR để hiện một thông báo thay thế:

Tra cứu giá
F2
ABCDEF
1ProductCategoryPriceLook forPrice
2AppleFruit$1.20Pear$1.50
3PearFruit$1.50KiwiNot found
4CarrotVegetable$0.80Milk$1.10
5BreadBakery$2.40
6MilkDairy$1.10
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Kiwi không có trong danh sách, nên F3 ghi Not found. Nhập Kiwi vào A4 thay cho Carrot và F3 sẽ tìm thấy. Với XLOOKUP bạn không cần IFERROR cho việc này, vì đối số thứ tư của nó chính là giá trị khi "không tìm thấy": =XLOOKUP(E2,A2:A6,C2:C6,"Not found").

IFNA: chỉ bắt lỗi #N/A

IFNA hoạt động như IFERROR nhưng chỉ thay #N/A. Với tra cứu, đó thường là điều bạn cần: #N/A nghĩa là "không tìm thấy", một câu trả lời bình thường, còn bất kỳ lỗi nào khác nghĩa là chính công thức bị sai. Trong trang tính này, các công thức lấy cột 4 của một bảng chỉ có ba cột, một lỗi đánh máy:

IFERROR giấu lỗi đánh máy, IFNA để lộ nó
F2
ABCDEFG
1ProductCategoryPriceLook forIFERRORIFNA
2AppleFruit1.2PearNot found#REF!
3PearFruit1.5
4CarrotVegetable0.8
5BreadBakery2.4
6MilkDairy1.1
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Pear có trong bảng, vậy mà F2 ghi Not found: IFERROR đã biến lỗi #REF! do sai số cột thành cùng thông báo như khi thiếu sản phẩm. G2 để lỗi #REF! hiện ra, nên bạn thấy công thức bị hỏng. Đổi số 4 thành 3 trong G2 và nó trả về 1,5. IFNA cần Excel 2013 trở lên.

Trả về ô trống thay cho lỗi

Để không hiện gì, hãy dùng văn bản rỗng, tức hai dấu ngoặc kép, làm giá trị thay thế:

Tăng trưởng, để trống khi lỗi
D2
ABCD
1MonthLast yearThis yearGrowth
2Jan20024020%
3Feb0150
4Mar180171-5%
5Apr90
6May25030020%
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Tháng Hai và tháng Tư năm ngoái không có doanh số, nên không tính được tăng trưởng và ô để trống. Các tháng khác hiện 20%, âm 5% và 20%. Ô chứa "" là văn bản: SUM và AVERAGE bỏ qua nó, nhưng =D3*2 cho #VALUE!. Nếu các công thức sau còn tính toán trên cột này, hãy trả về 0.

Luyện tập: tra cứu có giá trị dự phòng

Tra cứu tồn kho
F2
ABCDEF
1ProductStockLook forStock
2Apple40Kiwi
3Pear25
4Carrot60
5Bread12
6Milk30
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Đến lượt bạn: Trong F2, tra cứu tồn kho của sản phẩm ở E2 từ A2:B6, và hiện "Not found" khi sản phẩm không có trong danh sách.

Vì sao giấu mọi lỗi có thể che mất sai sót

IFERROR không sửa được gì; nó chỉ quyết định ô sẽ hiện gì. Trước khi bọc một công thức trong IFERROR:

  1. Tìm hiểu vì sao lỗi xảy ra. Khi một ô Units trống gây ra #DIV/0!, cách sửa đúng có thể là dữ liệu cần ai đó nhập vào, không phải một mức giá bằng 0.
  2. Ưu tiên IFNA cho tra cứu, để số cột sai (#REF!), tên gõ sai (#NAME?) hay văn bản trong cột số (#VALUE!) vẫn hiện ra.
  3. Kiểm tra đúng trường hợp cụ thể với phép chia. =IF(C2=0,0,B2/C2) chỉ xử lý số chia bằng 0; một tham chiếu sai ở B2 vẫn báo lỗi. Trang về #DIV/0! so sánh hai cách làm.
  4. Chọn giá trị thay thế không thể nhầm với dữ liệu. Số 0 trong cột giá trông như một mức giá thật và kéo giá trị trung bình xuống; "" hay "Not found" thì không.

Hãy bọc công thức sau cùng, khi nó đã cho kết quả đúng ở những hàng lẽ ra phải chạy đúng.

Câu hỏi thường gặp

Làm sao dùng IFERROR với VLOOKUP?

Bọc phép tra cứu lại: =IFERROR(VLOOKUP(E2,A2:C6,3,FALSE),"Not found"). Khi E2 không có ở cột đầu tiên, ô hiện Not found thay cho #N/A. =IFNA(VLOOKUP(E2,A2:C6,3,FALSE),"Not found") làm điều tương tự nhưng vẫn hiện các lỗi khác.

Làm sao để IFERROR trả về ô trống?

Dùng văn bản rỗng làm đối số thứ hai: =IFERROR(B2/C2,""). Ô trông như trống nhưng chứa văn bản, nên =D2+1 trên ô đó cho #VALUE!; còn SUM và AVERAGE thì bỏ qua nó.

IFERROR và IFNA khác nhau thế nào?

IFERROR thay thế mọi lỗi: #N/A, #DIV/0!, #VALUE!, #REF!, #NAME?, #NUM! và #NULL!. IFNA chỉ thay #N/A, tức kết quả "không tìm thấy" của phép tra cứu, và để các lỗi khác hiện ra, nên công thức bị hỏng không bị che đi.

Làm sao thay #N/A bằng 0 trong Excel?

Bọc công thức trong IFNA với giá trị 0: =IFNA(VLOOKUP(E2,A2:C6,3,FALSE),0). XLOOKUP có sẵn giá trị thay thế ở đối số thứ tư: =XLOOKUP(E2,A2:A6,C2:C6,0).

Phiên bản Excel nào có IFERROR và IFNA?

IFERROR có từ Excel 2007 và IFNA từ Excel 2013. Trong các tệp cũ bạn có thể gặp =IF(ISERROR(B2/C2),0,B2/C2), làm cùng việc với IFERROR nhưng tính công thức hai lần.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu