# Convert formulas between Excel and Google Sheets

> Convert a formula from Excel to Google Sheets or back, with a note on everything that changes and a flag for functions with no equivalent.

Source: https://spreadsheetpractice.com/tools/excel-to-google-sheets · Updated October 29, 2026 · Formulas and results on this page were run by the Spreadsheet Practice formula engine on October 29, 2026

## What it does

Convert formulas from Excel to Google Sheets and back: ARRAYFORMULA, QUERY, SPLIT and TEXTSPLIT, REGEX functions, FILTER and more, with notes on what changes.

- Both directions, with an explanation of each change
- Flags functions with no equivalent
- Conversions tested in our engine on both sides

Open it at [Formula converter](https://spreadsheetpractice.com/tools/excel-to-google-sheets). It runs in the browser; nothing you paste is uploaded.

## Excel to Google Sheets

| Case | Excel | Google Sheets | Notes |
|---|---|---|---|
| Range math that spills | =B2:B10*C2:C10 | =ARRAYFORMULA(B2:B10*C2:C10) | Math on whole ranges spills by itself in Excel. Google Sheets needs ARRAYFORMULA around it. |
| TEXTSPLIT | =TEXTSPLIT(A2,",") | =SPLIT(A2,",",FALSE,FALSE) | SPLIT turns pieces that look like numbers into numbers, where TEXTSPLIT keeps them as text. |
| REGEXTEST | =REGEXTEST(A2,"^inv-",1) | =REGEXMATCH(A2,"(?i)^inv-") | Case-insensitive matching becomes the (?i) flag at the start of the pattern. Google Sheets uses RE2 regular expressions: no lookarounds or backreferences. |
| TAKE | =TAKE(A2:D99,10) | =ARRAY_CONSTRAIN(A2:D99,10,COLUMNS(A2:D99)) | Google Sheets has no TAKE. |
| TAKE, last rows | =TAKE(A2:D99,-3) | =CHOOSEROWS(A2:D99,SEQUENCE(3,1,-3)) | Google Sheets has no TAKE. |
| DROP | =DROP(A1:D99,1) | =CHOOSEROWS(A1:D99,SEQUENCE(ROWS(A1:D99)-1,1,2)) | Google Sheets has no DROP, so CHOOSEROWS and CHOOSECOLS keep the rest. |
| TEXTBEFORE | =TEXTBEFORE(A2,"@") | =LEFT(A2,FIND("@",A2)-1) | Google Sheets has no TEXTBEFORE. LEFT, MID and FIND give the same text when the delimiter is found; when it isn't, they return #VALUE! where TEXTBEFORE returns #N/A. |
| TEXTAFTER | =TEXTAFTER(A2,"@") | =MID(A2,FIND("@",A2)+LEN("@"),LEN(A2)) | Google Sheets has no TEXTAFTER. LEFT, MID and FIND give the same text when the delimiter is found; when it isn't, they return #VALUE! where TEXTAFTER returns #N/A. |
| FILTER with if_empty | =FILTER(A2:C9,B2:B9="East","None") | =IFNA(FILTER(A2:C9,B2:B9="East"),"None") | Google Sheets FILTER has no if_empty argument and returns #N/A when nothing matches, so IFNA supplies the fallback. |
| SORT order | =SORT(A2:C9,3,-1) | =SORT(A2:C9,3,FALSE) | Excel SORT uses 1 or -1 for the order; Google Sheets uses TRUE or FALSE. |
| SORTBY | =SORTBY(A2:B9,C2:C9,-1) | =SORT(A2:B9,C2:C9,FALSE) | Google Sheets SORT accepts a column outside the range to sort by, so SORTBY becomes SORT. |
| CONCAT of a range | =CONCAT(A2:A9) | =CONCATENATE(A2:A9) | Google Sheets CONCAT joins exactly two values. CONCATENATE takes any number of values and ranges, like Excel's CONCAT. |
| GROUPBY | =GROUPBY(A2:A99,C2:C99,SUM) | =QUERY({A2:A99,C2:C99},"select Col1, sum(Col2) where Col1 is not null group by Col1 label sum(Col2) ''",0) | Google Sheets has no GROUPBY. QUERY groups and totals; unlike GROUPBY it adds no Total row, and the data needs no header row here. |
| STOCKHISTORY | =STOCKHISTORY("MSFT",DATE(2026,1,1),DATE(2026,3,31)) | =GOOGLEFINANCE("MSFT","close",DATE(2026,1,1),DATE(2026,3,31),"DAILY") | GOOGLEFINANCE prices come from a different provider and may be delayed by up to 20 minutes, so values can differ slightly. |

## Google Sheets to Excel

| Case | Google Sheets | Excel | Notes |
|---|---|---|---|
| ARRAYFORMULA | =ARRAYFORMULA(B2:B10*C2:C10) | =B2:B10*C2:C10 | Excel calculates arrays on its own (dynamic arrays in Microsoft 365 and Excel 2021+), so ARRAYFORMULA is dropped. In Excel 2019 and earlier, confirm the formula with Ctrl+Shift+Enter instead. |
| FILTER with several conditions | =FILTER(A2:C9,B2:B9="East",C2:C9>100) | =FILTER(A2:C9,(B2:B9="East")*(C2:C9>100)) | Google Sheets FILTER takes each condition as its own argument; Excel takes one, so the conditions are multiplied: (condition 1)*(condition 2) means both must be true. |
| SORT order | =SORT(A2:C9,3,FALSE) | =SORT(A2:C9,3,-1) | Google Sheets SORT uses TRUE or FALSE for the order; Excel uses 1 or -1, and SORTBY when the sort column is outside the range. |
| SPLIT | =SPLIT(A2,",") | =TEXTSPLIT(A2,",",,TRUE) | TEXTSPLIT is in Microsoft 365 and Excel 2024. It returns every piece as text, while SPLIT turns pieces that look like numbers into numbers; wrap the result in VALUE if you need numbers. TEXTSPLIT needs Microsoft 365 or Excel 2024. |
| JOIN | =JOIN(", ",A2:A9) | =TEXTJOIN(", ",FALSE,A2:A9) | TEXTJOIN with FALSE keeps empty cells, as JOIN does. Use TRUE to skip them. |
| COUNTUNIQUE | =COUNTUNIQUE(A2:A99) | =COUNTA(UNIQUE(TOCOL(A2:A99,1))) | COUNTA(UNIQUE(TOCOL(range,1))) skips blanks as COUNTUNIQUE does. Excel's UNIQUE ignores case, so "Apple" and "apple" count once; Google Sheets counts them as two. TOCOL needs Microsoft 365 or Excel 2024. |
| REGEXMATCH | =REGEXMATCH(A2,"^INV-\d+$") | =REGEXTEST(A2,"^INV-\d+$") | REGEXTEST is in Microsoft 365. Google Sheets uses RE2 regular expressions and Excel uses PCRE2; common patterns work the same, but lookarounds work only in Excel. |
| REGEXEXTRACT with a group | =REGEXEXTRACT(A2,"#(\d+)") | =REGEXEXTRACT(A2,"#(\d+)",2) | Excel's REGEXEXTRACT is in Microsoft 365. Google Sheets returns the capture group when the pattern has one; Excel returns the whole match unless return_mode is 2, so 2 is added. |
| FLATTEN | =FLATTEN(A2:C4) | =TOCOL(A2:C4) | TOCOL reads row by row, as FLATTEN does. Empty cells show as 0 in Excel's result; TOCOL(range,1) skips them. TOCOL needs Microsoft 365 or Excel 2024. |
| SORTN | =SORTN(A2:B20,3,0,2,FALSE) | =TAKE(SORT(A2:B20,2,-1),3) | TAKE needs Microsoft 365 or Excel 2024. |
| ARRAY_CONSTRAIN | =ARRAY_CONSTRAIN(A2:D99,10,2) | =TAKE(A2:D99,10,2) | TAKE needs Microsoft 365 or Excel 2024. |
| Arrays from ranges | ={A2:A9,C2:C9} | =HSTACK(A2:A9,C2:C9) | Google Sheets builds arrays from ranges with braces; Excel uses HSTACK for side by side and VSTACK for stacking (Microsoft 365 and Excel 2024). HSTACK needs Microsoft 365 or Excel 2024. |
| Open-ended ranges | =SUM(B2:B) | =SUM(B2:B1000) | Excel has no open-ended ranges like B2:B, so the converted formula stops at row 1000. Change 1000 to your last row, or turn the data into a table. |
| GOOGLEFINANCE history | =GOOGLEFINANCE("MSFT","close",DATE(2026,1,1),DATE(2026,3,31)) | =STOCKHISTORY("MSFT",DATE(2026,1,1),DATE(2026,3,31),0,1,0,1) | STOCKHISTORY is in Microsoft 365, and its prices come from a different provider, so values can differ slightly. |
| QUERY | =QUERY(A1:C99,"select A, sum(C) group by A",1) | =QUERY(A1:C99,"select A, sum(C) group by A",1) | Excel has no QUERY. Rebuild it from parts: FILTER for where, CHOOSECOLS for select, SORT or SORTBY for order by, TAKE for limit, and GROUPBY or PIVOTBY (Microsoft 365) for group by and pivot. A pivot table works in any version. The formula is left as it was. |
| IMPORTRANGE | =IMPORTRANGE("https://docs.google.com/spreadsheets/d/abc123","Sales!A1:D50") | =IMPORTRANGE("https://docs.google.com/spreadsheets/d/abc123","Sales!A1:D50") | Excel has no IMPORTRANGE. Link to the other workbook (='[Sales.xlsx]Sheet1'!A1:D50) or pull it in with Data > Get Data (Power Query). The formula is left as it was. |

---

Spreadsheet Practice (https://spreadsheetpractice.com) teaches spreadsheet formulas by practice: every exercise is graded in a live grid and re-checked on changed data.
