This is the full tutorial catalog. The homepage is a short starter set of common cases. Each page here is one Google Sheets error value or one formula that failed in a specific way. Match the value in the cell — #N/A, #REF!, #DIV/0!, #NAME?, #VALUE!, #NUM! — or the function that failed, then open that page.
The list is grouped by error family, in the same order as the sidebar. A page can appear under more than one heading when it belongs in both. Every published tutorial is included. You do not need an account. Pages are English, against the English Google Sheets UI. Each tutorial is independent: type the recreate on a blank sheet. The site is an independent library, not a Google product.
Every page follows recreate, cause, fix. You reproduce the error on a blank spreadsheet, read what is actually wrong — and what it is not — then type a formula. There are no draft pages in this list.
What #N/A actually means in Google Sheets#N/A means the formula found no match. Confirm with a tiny recreate, then fix the key — wrap with IFNA only when an empty result is expected.
Fix #N/A after a CSV import in Google Sheets (text vs number)After File → Import, VLOOKUP is #N/A because Sheets converted CSV ids to numbers (and stripped leading zeros). Recreate the type split, then VALUE / TO_TEXT — this is not a missing row.
A long CSV id becomes 1.23E+15 and the lost digits do not come backSheets stores numbers in binary floating point. An id longer than the exact integer range rounds. Scientific notation is the display. TEXT and a later apostrophe cannot restore digits the import already dropped.
Fix FILTER #N/A in Google Sheets (no matches and mismatched range sizes)FILTER returns #N/A for two different reasons: zero matching rows, or a condition range that is not the same height as the data. Recreate both, then IFNA only the empty result — mismatch needs equal heights, not a wrapper.
Fix REGEXEXTRACT #N/A in Google Sheets (pattern did not match)REGEXEXTRACT is #N/A when the regex does not match, including a capturing group that captures nothing. Recreate it, then fix the pattern or wrap with IFNA — REGEXMATCH on the same miss is FALSE.
Look left of the key in Google Sheets (INDEX/MATCH or XLOOKUP)VLOOKUP returns #N/A when the name sits left of sku. Recreate the left miss, then INDEX/MATCH and XLOOKUP — this is not a missing sku, not number-vs-text, and not TRUE approximate match.
Replace VLOOKUP with XLOOKUP in Google SheetsXLOOKUP looks left of the key, defaults to exact match, and takes a missing_value instead of wrapping IFNA. Recreate the three VLOOKUP traps, then swap the formula.
Fix XLOOKUP #N/A in Google Sheets (no match vs if_not_found)XLOOKUP returns #N/A when the search key is missing. Recreate an exact miss, then missing_value / if_not_found versus wrapping IFNA — not a VLOOKUP type miss and not a left-lookup.
Fix MATCH #N/A in Google Sheets (no match and match type)MATCH returns #N/A when the key is missing, or when match_type 1 / -1 is used on an unsorted range. Recreate an exact miss and a wrong match_type — this page is MATCH, not XLOOKUP.
Fix XMATCH #N/A in Google SheetsXMATCH returns #N/A when the key is missing, or when search_mode 2 / -2 is used on an unsorted range. Recreate an exact miss and a binary search — not MATCH #N/A, not XLOOKUP #N/A.
Fix IFS #N/A in Google Sheets (no condition was true)IFS returns #N/A when every condition is FALSE. Recreate a three-way IFS with no matching branch, then add a final TRUE default — not IFERROR vs IFNA, not FILTER empty.
Fix SWITCH #N/A in Google Sheets (no matching case)SWITCH returns #N/A when no case matches and you omitted the default. Recreate a status SWITCH with no fallback, then add a final default argument — not IFS #N/A.
GOOGLEFINANCE WEEKLY returns week buckets, and MONTHLY is #N/AThe fifth argument is DAILY or WEEKLY. WEEKLY spills fewer rows than the same close window with no interval. MONTHLY is #N/A. HOURLY and a reversed window are the other page. Not investment advice.
Fix INDEX / MATCH two-criteria #N/A in Google SheetsOne MATCH on sku ignores region. Recreate East+101 vs a single MATCH, then INDEX with a multiplied boolean MATCH — not two-way header lookup, not XLOOKUP exact miss.
GOOGLEFINANCE mutual fund symbols are not stock tickersA fund needs the MUTF: prefix. volume and a stock-style close window are often #N/A. Fund attributes include closeyest and returnytd, and the feed can still have no row. Not investment advice. A number is not guaranteed.
GOOGLEFINANCE changepct is #N/A on a currency pairchangepct is a stock and mutual-fund attribute. CURRENCY:USDJPY with changepct is #N/A. The pair’s quote is price, delayed, and it is not a percent. Not investment advice.
Fix IFS #N/A in Google Sheets when there is no default pairIFS has no unpaired default. A trailing other is the wrong number of arguments, or it is read as a condition. The else is a final TRUE pair. SWITCH’s last argument does not paste in.
SWITCH(1, "1", …) misses because a number is not the text "1"SWITCH compares with equality and does not coerce. Multiplying the text by 1 or wrapping N() is not the same as a matching case. The miss is the default, or #N/A when the default is omitted.
FORECAST.ETS seasonality 0 drops the weekly pattern; auto can return #NUM!In Excel, seasonality 0 fits a non-seasonal model and will not repeat a weekday spike. Seasonality 7 forces a weekly cycle. Omitted or 1 is automatic and is #NUM! when no cycle can be detected. Google Sheets has no FORECAST.ETS.
LINEST’s five-row block is not slope, then r², then whatever fitsVerbose LINEST spills coefficients, then their standard errors, then r² and the residual standard error, then F and degrees of freedom, then two sums of squares. Reading the slope’s standard error as r² invents a confidence the fit did not report.
XMATCH match_mode 2 treats * and ? as wildcardsXMATCH’s third argument 2 is wildcard mode. A literal star in the key matches a prefix instead, or misses. Tilde escapes. The fourth argument 2 is binary search, a different page.
SWITCH still returns #N/A when the last word is not a real defaultA default is the leftover argument after complete case, value pairs. An even tail has no default, so the last word is a case value and a new status is still #N/A. A missing else with no extra tokens is the other page.
IFS uses only the first value when the condition is an array from MAPIFS(MAP(A2:A4,LAMBDA(...)), "e", TRUE, "other") returns one cell from the first row. Later East rows never get a label. MAP with IFS inside the lambda runs once per row. ARRAYFORMULA(IFS) is the neighbor bug.
FILTER returns #N/A when any criteria cell is #N/AOne #N/A in the criteria range fails the whole FILTER, including rows whose own criteria cell is fine. Wrap the test in IFNA so each row is TRUE or FALSE. A real empty match is a different #N/A.
HLOOKUP with TRUE on an unsorted header row returns the wrong columnHLOOKUP’s fourth argument TRUE, or an omitted fourth argument, is approximate and needs the first row sorted left to right. On an unsorted header the result is #N/A or another column’s price. FALSE returns the exact column.
MATCH search type -1 needs a descending list and misses on ascending keysMATCH type -1 returns the smallest value that is still greater than or equal to the key, and only when the range is sorted descending. On an ascending list that is #N/A or the wrong position. Type 1 is the ascending page.
LOOKUP with one array is always approximate, and the shape picks the axisLOOKUP(key, array) has no exact flag. A tall range searches the first column and returns the last column. A wide range searches the first row and returns the last row. Unsorted keys still return a neighbor. The three-argument form is the other page.
A trailing space on a month header makes two-way INDEX/MATCH return #N/AMATCH on the header row is exact. Feb with a trailing space is not Feb, so the inner MATCH is #N/A and the whole INDEX is #N/A. A missing month name and a MATCH range that includes the corner cell are the other page.
WRAPROWS pads the last row with #N/A, and SUM of that spill is #N/AWhen the value count is not a multiple of wrap_count, the leftover cells are #N/A unless pad_with is set. SUM and AVERAGE of the spill fail. A blank pad keeps the numeric total. wrap_count 0 is the other page.
#REF! after you delete a cell in Google SheetsDelete a cell or row a formula pointed at and the formula becomes #REF!. Undo, rewrite the reference, and do not confuse this with a circular loop or a VLOOKUP index.
Fix INDEX #REF! in Google Sheets (row or column past the range)INDEX returns #REF! when the row index or the optional column index sits past the range. Recreate a row that is too big and a column that is too big — not VLOOKUP index, not a delete, not INDIRECT.
Fix IMPORTRANGE “Result too large” in Google SheetsIMPORTRANGE errors with Result too large when the pull exceeds the ~10 MB cap. Narrow the range, wrap QUERY, or split the import — this is not the Allow access #REF!.
Fix IMPORTRANGE stuck on Loading… in Google SheetsIMPORTRANGE can sit on Loading… for a large or slow pull. Recreate a small connected import, a wide range that stays on Loading, and what is actually Allow access vs Result too large — do not keep refreshing forever.
Array result was not expanded because it would overwrite dataUNIQUE returns #REF! when its spill would overwrite a cell that already has a value. Recreate a block below and a SORT blocked to the right, then clear the path — this is not a deleted reference.
Fix SORT and UNIQUE #REF! in Google Sheets (spill cannot expand)SORT or UNIQUE returns #REF! when a cell below or to the right already has a value. Recreate the blocked spill, then clear the blockers or move the formula — not a deleted reference and not a VLOOKUP/HLOOKUP index.
SEQUENCE returns #REF! when the spill runs into a merged cellA merge occupies every cell in it, even the ones that look blank. SEQUENCE cannot expand through that block. The tooltip names the merge. Unmerge. A typed note in the way is the same #REF! without a merge.
Circular dependency detected in Google Sheets#REF! from a formula that refers to itself. Recreate a self-ref, a two-cell loop, and a SUM that includes its own cell — iterative calculation is the wrong fix here.
INDIRECT cannot read another workbook, open or closedExcel's INDIRECT does not read a closed file either. Sheets has no second open workbook for INDIRECT to see. A path, an .xlsx name, or a docs URL inside INDIRECT is #REF!. Another Google Sheet is IMPORTRANGE, which has its own permission step.
Restoring a version leaves a named range pointing at #REF!After File → Version history → Restore, a named range can still show #REF! as its target. Formulas that use the name are #REF! even though the cells are back. Re-point the name. Deleting it turns the error into #NAME?.
Dragging an ARRAYFORMULA down makes #REF! in the spillThe fill handle copies ARRAYFORMULA into the cells below. The original spill cannot expand and shows Array result was not expanded. Delete the copies. Leave one formula. A blocked UNIQUE is the same tooltip for a different reason.
Fix TEXTJOIN spill overwrite or empty delimiter in Google SheetsTEXTJOIN with an empty delimiter concatenates into one blob; ARRAYFORMULA(TEXTJOIN) joins the whole block; BYROW+TEXTJOIN #REF!s if the spill is blocked. Recreate all three — not SPLIT empty delimiter.
Fix XLOOKUP return-range spill #REF! in Google SheetsXLOOKUP spills the whole result_range width; a filled neighbor is #REF!. Recreate a two-column return blocked in F2 — not XLOOKUP vs VLOOKUP, not XLOOKUP exact miss.
An IMPORTRANGE cycle between two workbooks never finishesSpreadsheet A imports B and B imports that result from A. Google's help says the cycle never produces output. The cells sit on Loading… or return #REF!. A one-way small import is the control.
A named function that calls IMPORTRANGE hides the Allow access promptIMPORTRANGE inside Data, Named functions often shows #REF! with no Allow access button. A direct IMPORTRANGE in a cell is what connects the two files. The named function does not grant access, and a new spreadsheet needs its own connect.
Iterative calculation is on and the circular cell is still #REF!File → Settings → Calculation can allow a circular formula, but a max iteration of 0 or 1 leaves #REF! or a value that has not converged. Raise the max. An accidental SUM loop is the other page.
INDIRECT of R[1]C[1] moves when you fill the formula acrossINDIRECT("R[1]C[1]", FALSE) is relative to the cell that holds the formula. Filled one column over, it points one column further. Absolute R1C1 text does not. Omitting FALSE is #REF!.
A sheet full of INDIRECT recalculates on every editINDIRECT is volatile. Hundreds of INDIRECT formulas rerun when any cell changes, so the file lags. A normal reference or INDEX does not. A bad address string is the #REF! page.
OFFSET height or width that runs past the grid is #REF!A positive height or width is legal until the rectangle leaves the sheet. Sheets stops at column ZZZ. A width of 20000 from column A is #REF!. Stepping above row 1, and height 0, are other pages.
Named ranges will not store an OFFSET formulaData, Named ranges wants a range like Sheet1!A2:A. An OFFSET that grows with COUNTA is rejected. Excel Name Manager accepts that formula. In Sheets, put OFFSET in a named function or skip it for INDEX.
IFERROR on a spill hides #DIV/0!, and IFNA only hides #N/AWrapped around an array, IFERROR replaces every error in the spill, including #DIV/0!. IFNA replaces only #N/A and leaves the divide visible. One-cell wrappers are the other page.
CORREL returns #DIV/0! when one column does not varyPearson correlation divides by both standard deviations. A column of identical numbers has standard deviation 0, so CORREL is #DIV/0!. A real correlation of 0 is a different result. Do not replace the error with 0.
AI() or Gemini() on a huge range does not analyze every rowA large range passed to AI() can fail to generate, stop after the first 350 selected cells, or return text that never used the later rows. Plan and region still gate the function. This page does not promise a summary.
Apps Script custom functions stay cached until an input changesA custom function with no arguments does not refresh when other cells change. NOW() in the next cell does. Pass the cells you depend on as arguments. There is no volatile switch. #NAME? and the time limit are the other page.
A custom function shows You do not have permission to call UrlFetchAppUrlFetchApp.fetch inside a function called from a cell throws immediately. Custom functions cannot request that authorization. A menu or an installable trigger can fetch, write a cell, and let the sheet read that cell.
LET calculates names in order, including names the result never readsA nested LET that uses a name before the outer assignment is #NAME?. An earlier 1/0 still breaks the cell when the result does not use it. Sheets does not skip that binding. A repeated name in one LET is the clash page.
An Excel LAMBDA stored in Name Manager imports as #NAME? in Google SheetsA name whose formula is LAMBDA is an Excel defined name. Sheets does not turn it into Data, Named functions. The cell that calls the name is #NAME?. _xlfn.LAMBDA is #NAME? too. Recreate the name in Sheets if the body uses functions Sheets has.
FORECAST.ETS seasonality 0 drops the weekly pattern; auto can return #NUM!In Excel, seasonality 0 fits a non-seasonal model and will not repeat a weekday spike. Seasonality 7 forces a weekly cycle. Omitted or 1 is automatic and is #NUM! when no cycle can be detected. Google Sheets has no FORECAST.ETS.
Named ranges will not store an OFFSET formulaData, Named ranges wants a range like Sheet1!A2:A. An OFFSET that grows with COUNTA is rejected. Excel Name Manager accepts that formula. In Sheets, put OFFSET in a named function or skip it for INDEX.
#VALUE!
Fix #VALUE! in Google Sheets (wrong type)A2+B2 is #VALUE! when one cell is text. Recreate the type mix, then convert or stop adding the unit — this is not #N/A, #NAME?, or a parse error.
Fix COUNTIFS / SUMIFS #VALUE! in Google Sheets (mismatched range sizes)COUNTIFS and SUMIFS return #VALUE! when a criteria range is not the same length as the count or sum range. Recreate the size mismatch, then make every range the same size — not FILTER mismatch, not 10 + pcs, and not a QUERY parse.
Fix TO_PURE_NUMBER on currency and text in Google SheetsTO_PURE_NUMBER strips number formatting from a numeric cell; currency typed as text is returned unchanged, so later math is #VALUE!. Recreate $12.50 format vs '$12.50' text — not VALUE() locale.
MMULT of two columns is #VALUE!; the dot product needs one row vectorTwo n×1 ranges have inner dimensions 1 and n. MMULT returns #VALUE!. TRANSPOSE one of them and the product is the single number 1×4+2×5+3×6. Transposing the other way spills a 3×3 outer product, not that number.
Fix #NUM! in Google SheetsSQRT of a negative number is #NUM!. Recreate the domain failure, then guard the input — this is not #VALUE!, not divide-by-zero, and not a parse error.
CEILING and CEILING.MATH round negative numbers in different directionsOn a negative value, CEILING uses the sign of the factor to pick a direction. CEILING.MATH ignores that sign and uses mode. Toward zero and away from zero disagree. A positive value with a negative factor is #NUM!.
RANDBETWEEN returns #NUM! when the bottom is greater than the topThe first argument is the low end and the second is the high end, inclusive. Swapping them is #NUM!. Decimals are truncated first, so 1.2 and 1.8 always return 1. A legal pair still redraws on every edit, which is the other page.
Fix QUERY #VALUE! in Google Sheets (dates mixed with text)QUERY year(A) returns #VALUE! when the column mixes dates with text like TBD. Recreate year() on the mix, then a helper column — this is not locale parse, not Col1 vs A, and not 10 + pcs.
QUERY SELECT * shifts columns after you insert a fieldQUERY select * follows the range by position. Insert a column inside that range and the spill gains a field with no #REF!. Name columns, or pick them by header after the query.
QUERY PIVOT stalls or truncates when the key has too many valuesEach distinct QUERY PIVOT key becomes a column. Two skus finish. A key per row tries to build a very wide table, sits on Loading, or hits the calculation limit. Mixed-type PIVOT errors are the other page.
QUERY date literals must be date 'yyyy-mm-dd'QUERY compares dates with the date keyword and a yyyy-mm-dd literal. A bare date, double quotes, a text compare, or a concatenated serial does not.
QUERY ORDER BY a label alias is NO_COLUMNorder by units fails when units is only a label. Google's query language does not accept a label in place of an id. Order by sum(B), then label that same expression. Put order by before label.
QUERY STARTS WITH is case-sensitive and misses Applestarts with 'a' returns apricot and skips Apple. The empty case is #N/A, Query completed with an empty output. lower(A) starts with 'a' keeps both. The one-word startswith does not parse.
QUERY SELECT Col1 + Col2 fails when the column is textB+C in a QUERY select needs two number columns. Text-looking qty, stored with a leading apostrophe, makes the addition #VALUE!. A helper with VALUE, then add. sum() of mixed types is the GROUP BY page.
QUERY PIVOT and GROUP BY parse only in that clause ordergroup by comes before pivot. pivot then group by is Unable to parse query string. The pivot key cannot also be listed in group by. A legal pair is select A, sum(C) group by A pivot B.
QUERY format datetime patterns use MM for month and mm for minutesformat A 'yyyy-mm-dd hh:mm' is not ignored. mm is minutes and hh is a 12-hour clock, so May 15:04 can display as month 04 and hour 03. The query string does not follow the spreadsheet locale. The result is text.
QUERY IS NULL misses a formula that returns an empty stringwhere B is null keeps a cell you never typed in. A formula that returns "" is not that cell. ISBLANK is FALSE there. where B = '' is the empty-string test. A space matches neither.
IMPORTFEED leaves url or summary blank on an Atom feedIMPORTFEED can fetch an Atom feed and still spill an empty url or summary. RSS link and description fill those columns. The legal item fields are title, summary, url, and created. items content is not a query.
IMPORTDATA stays on Loading or #N/A after a redirect or a 403A browser follows a 301 from http to the CSV. IMPORTDATA often returns #N/A Could not fetch url, or sits on Loading. A 403 is the same tooltip. The final https address that returns 200 is the fix. A dead host is the other page.
Fix ARRAYFORMULA 0 on empty rows in Google SheetsEmpty cells times 2 become 0 in ARRAYFORMULA. Putting 0 in IF still prints 0. Recreate the spill and a COUNT of those zeros, then use an empty string so the blank row looks blank.
Fix UNIQUE by_col and exactly_once surprises in Google SheetsUNIQUE’s second argument compares columns, not rows; the third returns values that appear exactly once. Recreate a wide header row and a doubled sku — not SORT/UNIQUE spill overwrite.
Fix SCAN / REDUCE LAMBDA shape errors in Google SheetsSCAN and REDUCE LAMBDA must return one accumulator value; extra names or a nested array error. Recreate SCAN returning {acc,v} and REDUCE with one name — not BYROW / MAP.
ARRAYFORMULA around IFS still returns only the first rowIFS inside ARRAYFORMULA evaluates the first row of the conditions and returns one cell. A later East row never spills. MAP runs IFS once per row. Not a scalar IFS miss, and not AND collapsing to one FALSE.
BYCOL includes the header row and returns #VALUE!BYCOL on A1:C4 runs the lambda on the text headers. SUM(col+0) is #VALUE! because mon cannot be added. Start at row 2. SUM/ROWS on the header row is a quiet wrong average.
A recursive LAMBDA hits the calculation limit or #NUM!A named function that calls itself returns a short total, then Calculation limit was reached on a deep call. #NUM! is the same wall. Not a #NAME? and not a circular cell.
MAP errors when the LAMBDA returns more than one valueMAP must get one value back per cell. A LAMBDA that returns {h, h*2}, HSTACK, or FILTER is #N/A or #VALUE! (nested array). Sheets does not show Excel’s #CALC! for this. Different input sizes are the other page.
REDUCE with a missing or array initial_valueREDUCE needs a scalar initial_value before the array. Omit it and the call is the wrong number of arguments, or a blank seed is #VALUE!. A two-cell seed is a nested array. The product-of-zero case is the other page.
A case-sensitive sort puts Zebra before appleCharacter-code order places every ASCII capital before every lowercase letter. Plain SORT in Google Sheets usually keeps Apple next to apple. QUERY order by and a CODE key do not.
RAND and RANDARRAY reshuffle the whole model on every editRAND, RANDBETWEEN, and RANDARRAY are volatile. One unrelated edit draws new numbers, charts jump, and a sheet full of them gets slow. A blocked RANDARRAY spill is the other page.
IFS uses only the first value when the condition is an array from MAPIFS(MAP(A2:A4,LAMBDA(...)), "e", TRUE, "other") returns one cell from the first row. Later East rows never get a label. MAP with IFS inside the lambda runs once per row. ARRAYFORMULA(IFS) is the neighbor bug.
IFERROR on a spill hides #DIV/0!, and IFNA only hides #N/AWrapped around an array, IFERROR replaces every error in the spill, including #DIV/0!. IFNA replaces only #N/A and leaves the divide visible. One-cell wrappers are the other page.
SEQUENCE treats 2024-01-01 as subtraction, so the series starts at 2022In a formula, 2024-01-01 is 2024 minus 1 minus 1, which is 2022. SEQUENCE then counts integers. DATE or a real serial is the start. A date serial used as the step jumps by tens of thousands of days. A negative row count is the other page.
WRAPROWS pads the last row with #N/A, and SUM of that spill is #N/AWhen the value count is not a multiple of wrap_count, the leftover cells are #N/A unless pad_with is set. SUM and AVERAGE of the spill fail. A blank pad keeps the numeric total. wrap_count 0 is the other page.
Formula parse error in Google Sheets (comma vs semicolon, locale)VLOOKUP copied with commas is a Formula parse error when this spreadsheet’s locale uses semicolons as argument separators. Recreate VLOOKUP and IF, then type semicolons — this is not #NAME? and not the { } backslash fix.
Fix SUMIF/COUNTIF missing a number in Google Sheets (CHAR(160))COUNTIF and SUMIF skip a sku that looks like 101. LEN is 4 and TRIM stays 4. Recreate CHAR(160) next to an ordinary trailing space — the extra character is not an apostrophe and not CHAR(32).
A Commenter can see formulas and cannot edit themShare as Commenter and the formula bar is read-only. Typing and paste do not change the cell. There is no #REF!. Editor is the role that can edit. A protected range is a different lock.
SPARKLINE goes flat or disappears on blanks and #N/ASPARKLINE of numbers draws a line. Blanks skip or sag. A #N/A in the range turns the cell into #N/A or a chart that drops out. Plot only numbers. An empty range and a bad charttype are the other pages.
INDEX/MATCH with search type 1 returns the wrong row on unsorted keysMATCH type 1, or an omitted type, is approximate and expects ascending keys. On an unsorted list it is #N/A or a nearby row, with no error when it hits the neighbor. Type 0 returns the exact price. Sorted bands are a different page.
HYPERLINK opens for editors and tells viewers they need accessA HYPERLINK to a Drive file shows the label for everyone. Viewers who click get You need access. Editors of the spreadsheet are not viewers of that file. The cell is not #VALUE!. An empty URL is the other page.
A sheet filter hides FILTER spill rows for everyone elseData → Create a filter hides rows. A FILTER formula’s spill sits on those rows, so the visible list looks short. The formula still returned every match. Turn the filter off. SUBTOTAL is the function that skips filtered rows on purpose.
Fix UNIQUE by_col and exactly_once surprises in Google SheetsUNIQUE’s second argument compares columns, not rows; the third returns values that appear exactly once. Recreate a wide header row and a doubled sku — not SORT/UNIQUE spill overwrite.
Fix XLOOKUP search_mode -1 / 2 surprises in Google SheetsXLOOKUP search_mode -1 returns the last match; mode 2 binary-searches and needs sorted data. Recreate two Widgets and an unsorted binary lookup — not XLOOKUP exact miss, not XMATCH.
Fix ISBLANK vs empty string vs IFBLANK in Google SheetsISBLANK is FALSE for a formula that returns ""; Sheets has no IFBLANK (that is #NAME?). Recreate a truly empty cell vs ="" vs a space — not IF(A2=0), not ARRAYFORMULA 0.
Fix TEXTJOIN spill overwrite or empty delimiter in Google SheetsTEXTJOIN with an empty delimiter concatenates into one blob; ARRAYFORMULA(TEXTJOIN) joins the whole block; BYROW+TEXTJOIN #REF!s if the spill is blocked. Recreate all three — not SPLIT empty delimiter.
Split text to columns turns 03/04 into the wrong month or dayData, Split text to columns breaks a date string on the slash and does not ask MDY versus DMY. DATE of the pieces follows the order you pick. Locale does not reshuffle them afterward.
A protected range set to Show a warning still saves the editThe dialog says you are editing a part of the sheet that should not be changed accidentally, and it offers Edit anyway. That click writes the cell. Restrict who can edit is the hard block, with no Edit anyway button.
A named filter view is gone after the filtered column is deletedData, Filter views lists a saved name until that view is removed or the sheet structure it stood on is deleted. Closing the view bar does not delete the name. A temporary filter view was never saved there.
A sort inside a filter view can reorder the sheet for everyoneFiltering in a filter view hides rows for you. A sort from that view can rewrite row order on the sheet, so other people see the new order after you close the view. Check version history. A private order is the SORT function on another range.
A slicer does nothing when its range is not the pivot sourceInsert, Slicer filters pivots and charts that use the same range. A slicer pointed at a copy of the data leaves the pivot totals unchanged. Widen the pivot, or point the slicer at the pivot range. Not GETPIVOTDATA.
A chart trendline shows no R² until Show R² is checkedCustomize, Series, Trendline turns the line on. Show R² is under that checkbox, not above it. The label is on the chart, not in a cell. LINEST is the cell. Pie charts have no trendline section.
Waterfall connectors float when a total is plotted as another changeA waterfall adds the value column as steps. A final row that already holds the sum is added again, so the connector leaves the axis. Connectors are one style for the whole chart. Text and formula blanks break the running base.
A simple onEdit cannot call UrlFetchApp, and the sheet stays quietA function named onEdit runs as a simple trigger. It can write a neighbor cell. It cannot call UrlFetchApp. The cell does not change, and the execution log says you do not have permission. An installable trigger under another name can, after you authorize.
Explore can answer with column names you already renamedThe Explore panel is not a formula. After you rename a header, a suggestion can still say the old name. There is no refresh that this page can guarantee. QUERY and a pivot read the current header. The panel may be missing or replaced.
FILTER OR is addition; extra arguments are ANDFILTER treats each condition argument as AND. OR of two arrays collapses to one boolean and the tooltip is mismatched range sizes. Add the conditions for either-or.
setFormula with commas is a Formula parse error on a semicolon localerange.setFormula('=SUM(A1,B1)') stores commas. On a locale that separates arguments with semicolons, the cell is #ERROR! Formula parse error. The formula bar still shows the commas. English function names do not change the separator.
Conditional formatting Text contains does not read a regular expressionText contains searches for the characters you typed, including a caret. The pattern ^East matches a cell that contains those five characters, not cells that start with East. REGEXMATCH in a custom formula is the regex.
A color scale does not paint a text columnConditional formatting, Color scale maps numbers to a gradient. Status words stay unpainted. Text is exactly, one rule per word, is the categorical color. A color scale has no text stops.
The first true conditional formatting rule is the one that paintsRules run in the order listed. The first true rule sets the format. A later rule does not override it. Sheets has no separate stop-if-true checkbox. Drag the rule you want above the one that is winning.
Show a warning keeps the value; Reject the input does notData validation, Advanced options: Show a warning saves the typed value and marks a triangle. Reject the input shows a dialog and the value does not stay. Help text is not the reject switch.
A checkbox is boolean TRUE; a list item TRUE is textInsert, Checkbox stores TRUE and FALSE as booleans. A dropdown item TRUE is the text TRUE. A2=TRUE is FALSE for the text. COUNTIF on the boolean misses the word. Custom checkbox values can store text on purpose.
GOOGLEFINANCE mutual fund symbols are not stock tickersA fund needs the MUTF: prefix. volume and a stock-style close window are often #N/A. Fund attributes include closeyest and returnytd, and the feed can still have no row. Not investment advice. A number is not guaranteed.
GOOGLEFINANCE changepct is #N/A on a currency pairchangepct is a stock and mutual-fund attribute. CURRENCY:USDJPY with changepct is #N/A. The pair’s quote is price, delayed, and it is not a percent. Not investment advice.
SWITCH(1, "1", …) misses because a number is not the text "1"SWITCH compares with equality and does not coerce. Multiplying the text by 1 or wrapping N() is not the same as a matching case. The miss is the default, or #N/A when the default is omitted.
COUNTA counts a formula blank and a zero as presentCOUNTA counts text, zeros, spaces, and formulas that return an empty string. A truly empty cell is the one it skips. The count is larger than the labels you can see.
MINIFS and MAXIFS return 0 when nothing matchesNo row passes and MINIFS or MAXIFS shows 0, the same 0 as a real minimum of zero. COUNTIFS of the same criteria tells the two zeros apart. A size mismatch is #VALUE!.
RANK.AVG and RANK.EQ score a tie differentlyTwo scores tied for second: RANK.EQ gives both 2 and the next score 4. RANK.AVG gives both 2.5. RANK matches RANK.EQ. Neither result is an error.
SPLIT does not treat the delimiter as a regular expressionThe delimiter \s+ is the characters backslash, s, and plus, not “one or more spaces.” The s inside east is a cut. A period does not mean any character. Use REGEXREPLACE to normalize, then SPLIT on a literal mark.
Iterative calculation is on and the circular cell is still #REF!File → Settings → Calculation can allow a circular formula, but a max iteration of 0 or 1 leaves #REF! or a value that has not converged. Raise the max. An accidental SUM loop is the other page.
RAND and RANDARRAY reshuffle the whole model on every editRAND, RANDBETWEEN, and RANDARRAY are volatile. One unrelated edit draws new numbers, charts jump, and a sheet full of them gets slow. A blocked RANDARRAY spill is the other page.
A sheet full of INDIRECT recalculates on every editINDIRECT is volatile. Hundreds of INDIRECT formulas rerun when any cell changes, so the file lags. A normal reference or INDEX does not. A bad address string is the #REF! page.
INDIRECT of R[1]C[1] moves when you fill the formula acrossINDIRECT("R[1]C[1]", FALSE) is relative to the cell that holds the formula. Filled one column over, it points one column further. Absolute R1C1 text does not. Omitting FALSE is #REF!.
IFERROR on a spill hides #DIV/0!, and IFNA only hides #N/AWrapped around an array, IFERROR replaces every error in the spill, including #DIV/0!. IFNA replaces only #N/A and leaves the divide visible. One-cell wrappers are the other page.
TO_PERCENT shows 2000% when the cell already displays a percentTO_PERCENT is percent format with 1 = 100%. A cell that stores 20 and already looks like a percent displays 2000% again. A stored 0.2 displays 20%. Multiplying by 100 first is the same double scale.
CEILING and CEILING.MATH round negative numbers in different directionsOn a negative value, CEILING uses the sign of the factor to pick a direction. CEILING.MATH ignores that sign and uses mode. Toward zero and away from zero disagree. A positive value with a negative factor is #NUM!.
MOD(0.3, 0.1) returns a long 0.0999… instead of 00.3 and 0.1 are not exact in binary floating point. Their remainder is a hair under 0.1, not 0. Integer tenths, then MOD, then scale back, return 0.
SUMIF and SUMIFS only see the top-left cell of a merged categoryA merged region label stores the word in the top-left cell. The rows underneath are blank. SUMIF adds one qty. SUMIFS with a second condition still misses them. A criterion pointed at the blank half of a merge is 0.
MAXIFS returns the max number, not the rest of that rowMAXIFS can tell you the largest qty. It cannot return the rep who sold it. FILTER or SORTN returns the row. Ties stay in FILTER and collapse in SORTN unless you ask for them.
Pivot Show as % of column snaps back to the raw sumsShow as % of column labels each row as a share of the column. % of row on a single value column is 100% per row. Removing the value and adding it again returns Show as to Default, so 60% becomes 30.
HLOOKUP with TRUE on an unsorted header row returns the wrong columnHLOOKUP’s fourth argument TRUE, or an omitted fourth argument, is approximate and needs the first row sorted left to right. On an unsorted header the result is #N/A or another column’s price. FALSE returns the exact column.
SEQUENCE treats 2024-01-01 as subtraction, so the series starts at 2022In a formula, 2024-01-01 is 2024 minus 1 minus 1, which is 2022. SEQUENCE then counts integers. DATE or a real serial is the start. A date serial used as the step jumps by tens of thousands of days. A negative row count is the other page.
CacheService drops a stored result when the TTL ends, and the sheet flickerscache.get returns null after the expiration, or earlier if the entry was evicted. A script that writes that null onto the sheet clears the block. The maximum TTL is six hours. This is not IMPORTRANGE and not a custom-function cache.
An Excel LAMBDA stored in Name Manager imports as #NAME? in Google SheetsA name whose formula is LAMBDA is an Excel defined name. Sheets does not turn it into Data, Named functions. The cell that calls the name is #NAME?. _xlfn.LAMBDA is #NAME? too. Recreate the name in Sheets if the body uses functions Sheets has.
A long CSV id becomes 1.23E+15 and the lost digits do not come backSheets stores numbers in binary floating point. An id longer than the exact integer range rounds. Scientific notation is the display. TEXT and a later apostrophe cannot restore digits the import already dropped.
Help samples use commas, and a semicolon locale reports Formula parse errorGoogle's function pages and most US write-ups separate arguments with commas. A comma-decimal locale separates arguments with semicolons. The sample is not broken. The paste does not match this file. English function names do not change the separator.
INDIRECT cannot read another workbook, open or closedExcel's INDIRECT does not read a closed file either. Sheets has no second open workbook for INDIRECT to see. A path, an .xlsx name, or a docs URL inside INDIRECT is #REF!. Another Google Sheet is IMPORTRANGE, which has its own permission step.
SUMIFS puts the sum range first, so a SUMIF-shaped call totals the wrong columnSUMIF is criteria range, then criterion, then sum range. SUMIFS is sum range first, then pairs of criteria range and criterion. Swapping two numeric columns returns a plausible total with no error. Putting the criterion in the range slot is #VALUE!.