Toolmingo
Guides12 min read

Google Sheets Formulas Cheat Sheet: Complete Reference (2025)

The definitive Google Sheets formula cheat sheet — QUERY, IMPORTRANGE, ARRAYFORMULA, VLOOKUP, IF, SUMIF, and every essential function with real examples, tips, and common mistakes.

Google Sheets shares most of Excel's formula language — but adds a powerful set of Google-exclusive functions: QUERY for SQL-style data analysis, IMPORTRANGE for cross-spreadsheet lookups, ARRAYFORMULA for expanding single formulas across entire columns, and AI-powered helpers like GOOGLETRANSLATE and IMAGE. This cheat sheet covers every category you'll actually use.


Quick reference table

Category Key functions
Lookup VLOOKUP, HLOOKUP, INDEX, MATCH, XLOOKUP, CHOOSE, OFFSET
Logical IF, IFS, AND, OR, NOT, IFERROR, IFNA, SWITCH
Math SUM, SUMIF, SUMIFS, SUMPRODUCT, ROUND, MOD, ABS, INT, CEILING, FLOOR
Statistical COUNT, COUNTA, COUNTIF, COUNTIFS, AVERAGE, AVERAGEIF, AVERAGEIFS, MEDIAN, STDEV
Text LEFT, RIGHT, MID, LEN, TRIM, UPPER, LOWER, PROPER, FIND, SEARCH, SUBSTITUTE, CONCAT, JOIN, SPLIT, REGEXEXTRACT
Date & Time TODAY, NOW, DATE, YEAR, MONTH, DAY, DATEDIF, WORKDAY, NETWORKDAYS, EDATE, DAYS
Array ARRAYFORMULA, FILTER, SORT, UNIQUE, SEQUENCE, FLATTEN, TOCOL, TOROW
Google-only QUERY, IMPORTRANGE, GOOGLETRANSLATE, IMAGE, SPARKLINE, HYPERLINK, ISNUMBER
Reference ROW, COLUMN, ROWS, COLUMNS, INDIRECT, ADDRESS
Information ISNUMBER, ISTEXT, ISBLANK, ISERROR, ISODD, ISEVEN, CELL

Formula syntax basics

Every formula starts with =. Key syntax rules:

Element Syntax Example
Constant =42 =1.08*B2
Cell reference =A1 =A1+B1
Absolute reference =$A$1 =$A$1*B2
Range =SUM(A1:A10) =AVERAGE(B2:B100)
Named range =SUM(Revenue) =Revenue-Costs
Cross-sheet =Sheet2!A1 =SUM(Sheet2!B2:B100)
Nested function =OUTER(INNER(...)) =IF(ISNUMBER(A1),A1,0)

Lock references: Press F4 to cycle A1$A$1A$1$A1.

Separator note: Google Sheets uses , in English locales and ; in many European locales. This guide uses ,.


Lookup functions

VLOOKUP — vertical search

=VLOOKUP(search_key, range, index, [is_sorted])
Argument Meaning
search_key Value to find
range Table array — first column must contain the key
index Column number to return (1 = first column)
is_sorted FALSE for exact match (almost always use this)

Example — find price by product name:

=VLOOKUP("Widget", A2:C100, 3, FALSE)

Wrap with IFERROR to suppress #N/A:

=IFERROR(VLOOKUP(A2, Products!$A:$C, 3, FALSE), "Not found")

INDEX + MATCH — flexible two-way lookup

=INDEX(return_range, MATCH(search_key, lookup_range, 0))

Unlike VLOOKUP, the lookup column doesn't have to be first:

=INDEX(C2:C100, MATCH("Widget", A2:A100, 0))

Two-way lookup (row AND column):

=INDEX(B2:D10, MATCH(G1, A2:A10, 0), MATCH(G2, B1:D1, 0))

XLOOKUP — modern replacement for VLOOKUP

Available in Google Sheets since 2023:

=XLOOKUP(search_key, lookup_range, return_range, [if_not_found], [match_mode], [search_mode])
=XLOOKUP(A2, Products!A:A, Products!C:C, "Not found")

match_mode: 0 exact, -1 next smaller, 1 next larger, 2 wildcard.
search_mode: 1 first to last, -1 last to first, 2 binary ascending.


Logical functions

IF

=IF(condition, value_if_true, value_if_false)
=IF(B2>1000, "High", "Low")
=IF(A2="", "Missing", A2)

IFS — multiple conditions without nesting

=IFS(condition1, value1, condition2, value2, ..., TRUE, default)
=IFS(B2>=90,"A", B2>=80,"B", B2>=70,"C", TRUE,"F")

AND / OR inside IF

=IF(AND(A2>0, B2>0), "Both positive", "Check values")
=IF(OR(A2="Admin", B2="Superuser"), "Access granted", "Denied")

IFERROR / IFNA

=IFERROR(formula, value_if_error)
=IFNA(VLOOKUP(A2,B:C,2,FALSE), "Missing")

Math functions

Function Example Result
SUM =SUM(A2:A100) Total
SUMIF =SUMIF(B:B,"North",C:C) Sum where region = North
SUMIFS =SUMIFS(C:C,B:B,"North",D:D,">1000") Sum with 2+ conditions
SUMPRODUCT =SUMPRODUCT(B2:B10, C2:C10) Sum of products (weighted avg)
ROUND =ROUND(A2, 2) Round to 2 decimal places
ROUNDUP / ROUNDDOWN =ROUNDUP(A2,0) Always up / always down
CEILING =CEILING(A2, 0.25) Round up to nearest 0.25
FLOOR =FLOOR(A2, 5) Round down to nearest 5
MOD =MOD(A2, 3) Remainder after division
ABS =ABS(A2-B2) Absolute difference
POWER =POWER(2, 10) 2^10 = 1024
SQRT =SQRT(A2) Square root
RAND =RAND() Random 0–1 (recalculates)
RANDBETWEEN =RANDBETWEEN(1, 100) Random integer in range

Statistical functions

Function Example Notes
COUNT =COUNT(A2:A100) Count numbers only
COUNTA =COUNTA(A2:A100) Count non-empty cells
COUNTBLANK =COUNTBLANK(A:A) Count empty cells
COUNTIF =COUNTIF(B:B,"North") Count matching condition
COUNTIFS =COUNTIFS(B:B,"North",C:C,">0") Multiple conditions
AVERAGE =AVERAGE(A2:A100) Mean
AVERAGEIF =AVERAGEIF(B:B,"North",C:C) Conditional mean
AVERAGEIFS =AVERAGEIFS(C:C,B:B,"North",D:D,"Q1") Multi-condition mean
MEDIAN =MEDIAN(A2:A100) Middle value
MODE =MODE(A2:A100) Most frequent value
STDEV =STDEV(A2:A100) Standard deviation (sample)
STDEVP =STDEVP(A2:A100) Standard deviation (population)
MIN / MAX =MIN(A2:A100) Smallest / largest
SMALL / LARGE =SMALL(A:A, 3) 3rd smallest / largest
RANK =RANK(A2, $A$2:$A$100, 0) Rank (0=descending)
PERCENTILE =PERCENTILE(A2:A100, 0.9) 90th percentile

Text functions

Function Example Notes
LEFT =LEFT(A2, 3) First 3 characters
RIGHT =RIGHT(A2, 4) Last 4 characters
MID =MID(A2, 5, 3) 3 chars starting at position 5
LEN =LEN(A2) Character count
TRIM =TRIM(A2) Remove extra spaces
UPPER / LOWER / PROPER =PROPER(A2) Case conversion
CONCATENATE / & =A2&" "&B2 Join text
CONCAT =CONCAT(A2:A5) Join range (no delimiter)
JOIN =JOIN(", ", A2:A10) Join with delimiter
SPLIT =SPLIT(A2, ",") Split text into cells
FIND =FIND("@", A2) Position of text (case-sensitive)
SEARCH =SEARCH("@", A2) Position of text (case-insensitive)
SUBSTITUTE =SUBSTITUTE(A2, "old", "new") Replace text
REPLACE =REPLACE(A2, 1, 4, "new") Replace by position
TEXT =TEXT(A2, "YYYY-MM-DD") Format number/date as text
VALUE =VALUE("42") Text to number
REGEXEXTRACT =REGEXEXTRACT(A2, "\d+") Extract with regex
REGEXMATCH =REGEXMATCH(A2, "^[A-Z]") Test against regex
REGEXREPLACE =REGEXREPLACE(A2, "\s+", " ") Replace with regex

Extract domain from email:

=MID(A2, FIND("@",A2)+1, LEN(A2))

First name from full name:

=LEFT(A2, FIND(" ",A2)-1)

Date & time functions

Function Example Notes
TODAY() =TODAY() Current date (no time)
NOW() =NOW() Current date + time
DATE =DATE(2025, 12, 31) Construct a date
YEAR / MONTH / DAY =YEAR(A2) Extract date part
HOUR / MINUTE / SECOND =HOUR(A2) Extract time part
WEEKDAY =WEEKDAY(A2, 2) 1=Mon…7=Sun (type 2)
WEEKNUM =WEEKNUM(A2, 2) ISO week number
DATEDIF =DATEDIF(A2, TODAY(), "Y") Years between dates
DAYS =DAYS(B2, A2) Days between dates
EDATE =EDATE(A2, 3) Date + 3 months
EOMONTH =EOMONTH(A2, 0) Last day of month
WORKDAY =WORKDAY(A2, 10) Date + 10 business days
NETWORKDAYS =NETWORKDAYS(A2, B2) Workdays between dates
TEXT =TEXT(TODAY(), "MMMM YYYY") Format as "July 2025"

Age in years:

=DATEDIF(A2, TODAY(), "Y")

Days until deadline:

=DAYS(B2, TODAY())

ARRAYFORMULA — expand a formula to a whole column

ARRAYFORMULA lets you write one formula that applies to an entire range, avoiding copy-paste and keeping data dynamic.

=ARRAYFORMULA(A2:A100 * B2:B100)

Conditional ARRAYFORMULA (without drag-down):

=ARRAYFORMULA(IF(A2:A100="","", A2:A100 * B2:B100))

Count characters in every row of column A:

=ARRAYFORMULA(LEN(A2:A100))

Join first + last name for all rows:

=ARRAYFORMULA(B2:B100 & " " & C2:C100)

Tip: Wrap with IF(A2:A="",,...) to stop the formula from filling blank rows.


QUERY — SQL-style data analysis

QUERY is one of Google Sheets' most powerful exclusive functions. It uses a subset of SQL syntax called Google Visualization API Query Language.

=QUERY(data, query, [headers])

SELECT + WHERE

=QUERY(A1:D100, "SELECT A, C WHERE B = 'North' AND C > 1000", 1)

ORDER BY + LIMIT

=QUERY(A1:D100, "SELECT A, B, C ORDER BY C DESC LIMIT 10", 1)

GROUP BY + aggregates

=QUERY(A1:D100, "SELECT B, SUM(C) GROUP BY B LABEL SUM(C) 'Total Sales'", 1)

PIVOT table with QUERY

=QUERY(A1:C100, "SELECT B, SUM(C) WHERE A IS NOT NULL GROUP BY B PIVOT A", 1)

Dynamic criteria with cell references

Inject cell values by closing the string and concatenating:

=QUERY(A1:D100, "SELECT A, C WHERE B = '"&G1&"' AND C > "&H1, 1)

QUERY operators

Operator Example
= WHERE B = 'London'
!= WHERE B != 'London'
>, >=, <, <= WHERE C >= 100
AND, OR WHERE B='North' AND C>0
CONTAINS WHERE A CONTAINS 'Pro'
STARTS WITH WHERE A STARTS WITH 'J'
IS NULL WHERE B IS NULL
MATCHES WHERE A MATCHES '.*Pro.*'
NOT WHERE NOT B = 'North'

IMPORTRANGE — pull data from another spreadsheet

=IMPORTRANGE("spreadsheet_url", "range_string")

Example:

=IMPORTRANGE("https://docs.google.com/spreadsheets/d/1abc.../edit", "Sheet1!A1:C100")
  • First use prompts you to click Allow access.
  • Combine with QUERY to filter the imported data:
=QUERY(IMPORTRANGE("https://...","Sheet1!A1:D100"), "SELECT Col1, Col3 WHERE Col2 > 0", 1)
  • Refreshes automatically when the source sheet changes.
  • Use named ranges in the source sheet to keep links maintainable.

Google-exclusive functions

GOOGLETRANSLATE

=GOOGLETRANSLATE(text, [source_language], [target_language])
=GOOGLETRANSLATE(A2, "en", "es")       // English → Spanish
=GOOGLETRANSLATE(A2, "auto", "fr")     // auto-detect source

IMAGE — embed an image in a cell

=IMAGE(url, [mode], [height], [width])
Mode Meaning
1 Fit image in cell (default)
2 Stretch to fill cell
3 Original size
4 Custom size (specify height+width)
=IMAGE("https://example.com/logo.png", 4, 80, 120)

SPARKLINE — tiny chart in a cell

=SPARKLINE(data, {options})
=SPARKLINE(B2:M2)                                          // line chart
=SPARKLINE(B2:M2, {"charttype","bar"; "max",100})          // bar chart
=SPARKLINE(B2:M2, {"charttype","column"; "color","blue"})  // column

HYPERLINK

=HYPERLINK("https://example.com", "Click here")

MAP / REDUCE (Sheets 2023+)

=MAP(A2:A10, LAMBDA(x, x*2))            // multiply every cell by 2
=REDUCE(0, A2:A10, LAMBDA(acc, x, acc+x))  // sum via LAMBDA

Array functions (modern)

Function Example Notes
FILTER =FILTER(A2:C100, B2:B100="North") Return rows matching condition
SORT =SORT(A2:C100, 2, FALSE) Sort by column 2 descending
UNIQUE =UNIQUE(A2:A100) Remove duplicate rows
SEQUENCE =SEQUENCE(10, 1, 1, 2) 10 rows, 1 col, start 1, step 2
FLATTEN =FLATTEN(A2:C10) Collapse 2D range to 1 column
TOCOL =TOCOL(A2:C10, 1) Range to column (skip blanks)
TOROW =TOROW(A2:A10) Column to row
HSTACK =HSTACK(A2:A10, C2:C10) Combine ranges side by side
VSTACK =VSTACK(Sheet1!A:A, Sheet2!A:A) Stack ranges vertically
CHOOSEROWS =CHOOSEROWS(A2:C10, 1, 3, 5) Pick specific rows by index

FILTER with multiple conditions:

=FILTER(A2:C100, (B2:B100="North") * (C2:C100 > 1000))

Named ranges & named functions

Create a named range: Select cells → Data → Named ranges → Define name.

=SUM(Revenue)          // instead of =SUM(B2:B1000)
=SUMIF(Region, "North", Revenue)

Named functions (custom formulas): Data → Named functions → New function.

// Define: YEAROVER(current, previous) = (current - previous) / previous
=YEAROVER(C2, B2)       // reusable across the sheet

Conditional formatting with formulas

Use Format → Conditional formatting → Custom formula is to colour rows based on formula logic:

Goal Formula (applies to row 2)
Highlight row if column B = "Urgent" =$B2="Urgent"
Highlight if value > average =A2>AVERAGE($A:$A)
Alternate row shading =ISEVEN(ROW())
Highlight duplicates =COUNTIF($A:$A,A2)>1
Overdue dates =AND(A2<TODAY(), A2<>"")

Data validation with formulas

Format → Data validation → Custom formula:

Validation rule Formula
Only positive numbers =A2>0
Only valid email =REGEXMATCH(A2, "^[^@]+@[^@]+\.[^@]+$")
Only from a list in another sheet =COUNTIF(Sheet2!A:A,A2)>0
Date in the future =A2>TODAY()
No duplicates in column =COUNTIF($A$2:$A2,A2)<=1

Common mistakes

Mistake Problem Fix
=VLOOKUP("item",A:C,4,FALSE) Column index exceeds range width Ensure index ≤ columns in range
Dynamic criteria without concatenation WHERE B = G1 treated as literal Use "WHERE B = '"&G1&"'"
ARRAYFORMULA filling empty rows Shows 0 or blank in every row Wrap with IF(A2:A="",,formula)
IMPORTRANGE #REF! Access not granted Click "Allow access" prompt
DATEDIF hidden function No autocomplete, no docs in Sheets Still works — type manually
Circular dependency Formula references its own cell Check for accidental self-reference
Comma vs semicolon =SUM(A1;A2) fails in English locale Match your locale's list separator
Mixed text/number in SUMIF range Counts or sums return 0 Ensure column data type is consistent

Excel vs Google Sheets: key differences

Feature Excel Google Sheets
Cross-file import Power Query / external links IMPORTRANGE
SQL queries Power Query M language QUERY function
In-cell images Not supported (natively) IMAGE function
Translation Not built-in GOOGLETRANSLATE
Sparklines Dedicated Sparkline feature SPARKLINE function
XLOOKUP Excel 2019+ / 365 Sheets (added 2023)
LET function Excel 365 Sheets (added 2023)
LAMBDA Excel 365 Sheets (added 2022)
Dynamic arrays Excel 365 FILTER/SORT/UNIQUE always dynamic
Collaboration SharePoint / OneDrive Native real-time
Macros VBA Google Apps Script (JavaScript)
DATEDIF Documented Hidden (works, no autocomplete)

Google Apps Script: go beyond formulas

For automation that formulas can't handle, use Extensions → Apps Script (JavaScript):

function sendWeeklyReport() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("Sales");
  const total = sheet.getRange("C2:C100").getValues()
    .flat()
    .reduce((sum, v) => sum + (Number(v) || 0), 0);

  MailApp.sendEmail({
    to: "manager@example.com",
    subject: "Weekly Sales Report",
    body: `Total sales this week: $${total.toLocaleString()}`
  });
}

Trigger options: time-driven (hourly/daily/weekly), on-open, on-edit, on-form-submit.


FAQ

Q: What is the difference between Google Sheets and Excel formulas?
Most functions are identical. Google Sheets adds QUERY, IMPORTRANGE, GOOGLETRANSLATE, IMAGE, SPARKLINE, and always-dynamic array functions (FILTER, SORT, UNIQUE). Excel has more financial functions and full VBA support.

Q: How do I reference another sheet in Google Sheets?
Use SheetName!CellRef, for example =Sheet2!A1 or =SUM(Sheet2!B2:B100). For another spreadsheet entirely, use IMPORTRANGE.

Q: Why does my QUERY formula return a #VALUE! error?
Usually caused by mixed data types in a column (e.g. some cells are text, some numbers). Try converting the column with =VALUE() or format all cells consistently before querying.

Q: How do I make a drop-down list in Google Sheets?
Select cells → Data → Data validation → Dropdown (from a range) or Dropdown (from a list). You can also use a UNIQUE formula range as the source to auto-update the list.

Q: What's the difference between ARRAYFORMULA and FILTER?
ARRAYFORMULA expands a single formula across a range (like drag-fill but dynamic). FILTER returns a subset of rows matching a condition — it outputs multiple rows automatically without ARRAYFORMULA.

Q: How do I use QUERY to combine data from multiple sheets?
Use VSTACK to stack the ranges first, then QUERY the combined data:

=QUERY(VSTACK(Sheet1!A1:C100, Sheet2!A1:C100), "SELECT Col1, SUM(Col3) GROUP BY Col1", 1)

Related tools

Keep reading

All Toolmingotools are free & run in your browser

No sign-up, no upload, no watermark. Your files never leave your device.

Browse all tools