Most Excel trainers tell you to 'just use IMPORTRANGE' when someone asks about cross-workbook data. They’re not just wrong — they’re setting people up for failure. Excel has never had IMPORTRANGE, and it never will. Google Sheets built that function on a cloud-first architecture; Excel runs locally and treats workbooks as isolated files. Confusing the two isn’t helpful — it’s harmful. The real question isn’t ‘Does Excel have IMPORTRANGE?’ It’s ‘What’s the right way to get live, dynamic, maintainable data from another Excel file?’ And the answer depends entirely on your version, security policy, and whether you need automatic refresh.
Quick Answer
No — Excel does not have IMPORTRANGE. That function exists only in Google Sheets. In Excel, you can achieve similar results using Power Query (recommended for Excel 2016+), legacy Data Connections (ODBC/OLE DB), or INDIRECT + external references (fragile, manual, and broken by file moves). None replicate IMPORTRANGE’s simplicity, but Power Query comes closest with true refreshability, error handling, and transformation.
All the Methods
| Method | Steps | Best For | Limitations |
|---|---|---|---|
| Power Query (Get & Transform) | Data → Get Data → From File → From Workbook → Browse → Select sheet → Load | Live refresh, large datasets, cleaning, multi-source joins | Requires Excel 2016+, no formula-level control (no cell-by-cell referencing) |
| External Reference (=[file.xlsx]Sheet1!A1) | Type ='[C:\Reports\Q2-2024.xlsx]Sales'!B5 in any cell | Quick one-off links, static reports, internal teams with fixed file paths | Breaks if source file is moved, renamed, or closed; no error recovery; slow recalc |
| ODBC Connection + Microsoft Query | Data → Get Data → Legacy Wizards → From Database → From Microsoft Query → Excel Files → Select .xlsx | Legacy environments, SQL-aware users, complex filtering pre-load | Deprecated UI, inconsistent driver support, requires 32/64-bit matching |
| COM-based VBA (Workbooks.Open) | VBA macro opens source workbook, copies range, pastes values/formulas into active sheet | Automated daily imports where refresh timing must be precise | Macro security warnings, breaks if source is password-protected or open elsewhere |
Method 1 Deep Dive
Let’s say Sarah Chen in Finance maintains Q2-Forecast-2024.xlsx, stored at C:\Finance\Q2-Forecast-2024.xlsx. You need live access to her Revenue_By_Region table — columns: Region (A), Q2 Forecast ($, B), Last Updated (C). She updates it weekly. Here’s how Power Query solves this cleanly:
- Open your workbook. Go to Data tab → Get Data → From File → From Workbook.
- Browse to
C:\Finance\Q2-Forecast-2024.xlsx. Click Import. - In the Navigator, check Revenue_By_Region (not ‘Sheet1’ — select the actual named table or range). Uncheck ‘Select multiple tables’.
- Click Transform Data. In Power Query Editor, right-click the column header for
Last Updated→ Sort Descending. Then go to Home → Close & Load To… → choose Table and place it starting at A1 of Sheet2.
The beauty of this approach is that every time you hit Alt + F5 (the keyboard shortcut for Refresh All), Excel pulls fresh values — and preserves all formatting, filters, and formulas referencing that table (e.g., =SUM(Sheet2!B2:B10)). If Sarah adds a new region, Power Query auto-expands the table. If she renames the sheet? No problem — you linked to the table name, not the sheet.
Sample loaded data looks like this:
| Region | Q2 Forecast | Last Updated |
|---|---|---|
| North America | $1,245,800 | 2024-06-12 |
| EMEA | $892,350 | 2024-06-12 |
| APAC | $674,100 | 2024-06-12 |
| Latin America | $328,900 | 2024-06-12 |
| Global Total | $3,141,150 | 2024-06-12 |
Surprising tip: You can edit the source path later. Right-click the query in the Queries & Connections pane (View → Show → Queries & Connections), select Edit, then go to Advanced Editor. Change the file path inside Source = Excel.Workbook(File.Contents("..."), null, true). Done.
Method 2 Deep Dive
Sometimes you need something lighter — no queries, no ribbons, just a formula that behaves like IMPORTRANGE for one cell or a small range. That’s where external references shine (and fail). Let’s say David Lin in Sales keeps Sales-Tracker-Q2.xlsx open daily at D:\Sales\Sales-Tracker-Q2.xlsx. His target range is Dashboard!F10:H14.
Type this directly into your cell (say, A1 of your workbook):='D:\Sales\[Sales-Tracker-Q2.xlsx]Dashboard'!F10
To bring in the full block F10:H14, select A1:C6 first, then type:='D:\Sales\[Sales-Tracker-Q2.xlsx]Dashboard'!F10:H14
and press Ctrl + Shift + Enter (if using older Excel) or just Enter (Excel 365/2021).
This works — but here’s what most miss: if David closes his file, your cells show #REF!, and Excel won’t auto-reconnect unless you manually click Data → Edit Links → Startup Prompt → set to “Ask” or “Automatic”. Worse: if you email your file to someone else, the path D:\Sales\... won’t exist on their machine — and Excel won’t warn you until refresh time.
Counterintuitive fix: Use a relative path only if both files sit in the same folder. Save both files in C:\Projects\Q2-2024\, then reference with:='[Sales-Tracker-Q2.xlsx]Dashboard'!F10
That’s portable — as long as the source file stays in the same folder.
Cheat Sheet
| Task | Shortcut / Formula | Notes |
|---|---|---|
| Refresh all Power Queries | Alt + F5 | Works even if Power Query pane is closed |
| Edit external link source | Data → Edit Links → Change Source | Only works if source file is accessible |
| Create volatile external ref | ='C:\[data.xlsx]Sheet1'!A1 | Use single quotes around path if spaces exist |
| Check active connections | Data → Queries & Connections | Shows Power Queries + legacy connections |
| Force recalc of external refs | F9 (full calc) or Shift + F9 (active sheet) | Won’t reload closed files — only updates cached values |