Suppress #N/A returned by Google Sheets vlookup

Google Sheets

Google Sheets Problem Overview


I have a Google Sheet (example) with a basic vlookup to create a summable column. It returns "#N/A" for every search key not found, and attaches the following error to those cells:

> Error Did not find value '[email protected]' in VLOOKUP evaluation.

After much searching the only solution I found was to wrap the vlookup in an IF(ISNA()), given in How to link various Google spreadsheets using IMPORTRANGEs that contain VLOOKUP formulas without getting #N/A returned?. This works, but it really seems like I should not have to do this. Is there another way?

Google Sheets Solutions


Solution 1 - Google Sheets

Update 2019-03-01: The best solution is now =IFNA(VLOOKUP(…), 0). See this other answer.

 

You can use the following formula. It will replace the #N/A values returned by VLOOKUP(…) with 0.

=SUMIF(VLOOKUP(…),"<>#N/A")

How it works: This uses SUMIF() with only one value to sum up. So the result is that one value – if unequal to #N/A, according to the condition. If the value is #N/A however, the sum is zero. That's just how SUMIF() works: if no values match the conditions, the result is 0, not NULL, not #N/A.

Advantages:

  • Compared to the solution =IF(ISNA(VLOOKUP(…)),"",VLOOKUP(…)) referenced in the question, this solution contains the VLOOKUP(…) part only once. This makes the formula shorter and simpler, and avoids the mistakes that happen when editing only one of the two VLOOKUP(…) parts.

  • Compared to the solution =IFERROR(VLOOKUP(…)) from the other answer, errors are not suppressed as that would make detecting and debugging them more difficult. Only #N/A values are suppressed.

Solution 2 - Google Sheets

=IFNA(VLOOKUP(...), "")

Not sure if this has changed recently, but the IFNA implementation supports a single listing of the VLOOKUP now. That is, you don't have to wrap it in another IF.

An advantage there is that you could choose "", 0, NULL, etc. as the value to show on failure.

Solution 3 - Google Sheets

A simpler way to suppress error messages - of any kind - is to use the iferror wrapper:

=iferror(vlookup(A1,Lookup!A:B,2,FALSE))

I don't think there can be an easier way than that. By design, vlookup should not simply return blank if the key wasn't found: this would be indistinguishable from the situation where the key was found but the corresponding entry in second column was blank. Some error has to be thrown, and then it's up to the spreadsheet user how to handle it.

Solution 4 - Google Sheets

Just add TRUE, "" to your list of parameters, like so:

IFS(condition1, value1, condition2, value2, TRUE, "")

This works, because IFS "returns a value that corresponds to the FIRST true condition."

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSkipwaveView Question on Stackoverflow
Solution 1 - Google SheetstaniusView Answer on Stackoverflow
Solution 2 - Google SheetsAdam CView Answer on Stackoverflow
Solution 3 - Google Sheetsuser3717023View Answer on Stackoverflow
Solution 4 - Google SheetsBryan ChungView Answer on Stackoverflow