If you've been using Excel for more than a decade, you've seen both file extensions. You probably know .xlsx is "the newer one." But what actually changed between .xls and .xlsx — and more importantly, what breaks when you convert? This guide covers every meaningful difference, including the one that silently destroys VBA macros if you migrate wrong.
Microsoft Excel has used the .xls extension since Excel 2.0 in 1987. The underlying format is called BIFF (Binary Interchange File Format), and it evolved through eight versions — BIFF2 through BIFF8 — with Excel 97's BIFF8 being the version most people mean when they say ".xls." For roughly two decades, .xls was Excel.
In 2007, Microsoft shipped the Office Open XML standard, and with it came .xlsx. The format change was significant: instead of a proprietary binary blob, .xlsx is a ZIP archive containing XML files. Open one with any ZIP tool and you'll find folders and human-readable XML describing every sheet, cell, style, and chart relationship.
The "x" in .xlsx stands for XML. The "m" in .xlsm (Excel Macro-Enabled Workbook) stands for macro. That distinction — between .xlsx and .xlsm — is where most migrations go wrong.
The architectural difference between .xls and .xlsx isn't just cosmetic. It has practical consequences for everything from file size to third-party compatibility.
| Attribute | .xls (BIFF8) | .xlsx (Open XML) |
|---|---|---|
| Introduced | Excel 97 (1997) | Excel 2007 (2007) |
| Underlying format | Binary (proprietary) | ZIP archive of XML files |
| Standard | Microsoft-proprietary | ECMA-376 / ISO/IEC 29500 |
| Human-readable | No | Yes (unzip and inspect) |
| Typical file size | Larger | Smaller (compressed) |
| Third-party support | Reverse-engineered | Open specification |
| Can store VBA macros | Yes | No — use .xlsm |
| Max rows per sheet | 65,536 | 1,048,576 |
| Max columns per sheet | 256 (IV) | 16,384 (XFD) |
The ZIP-based structure of .xlsx has real benefits: files are typically 20–50% smaller than equivalent .xls files (XML compresses well), and because the format is an open standard, non-Microsoft tools — LibreOffice, Google Sheets, Python's openpyxl — support it natively without reverse-engineering binary blobs.
The most visible difference for data-heavy workbooks is the row limit increase.
The BIFF8 format uses a 16-bit integer for row addressing, which caps at 216 = 65,536 rows. Open XML uses a 20-bit row index, giving 220 = 1,048,576 rows. That's 16 times more rows per sheet.
For most users, 65,536 rows is plenty — typical business spreadsheets rarely approach it. But if you're using Excel as a data dump for transaction logs, sensor readings, or large exports, you've probably hit row 65,536 and watched Excel silently truncate the rest. .xlsx eliminates this ceiling for most practical purposes.
.xls supports 256 columns (A through IV). .xlsx supports 16,384 columns (A through XFD). This matters for wide pivot tables, survey data exports, and cross-tab analyses with many time periods.
Both formats support up to 255 worksheets per workbook in practice (limited by available memory). This is not a meaningful difference between the formats.
LegacyLeaps's free scan shows you exactly what will change — row counts, macro presence, formula compatibility — before you migrate a single file.
Try the Free ScanThis is the most important difference, and the one most likely to cause a real problem during migration.
The Open XML specification deliberately excludes VBA macro code from the .xlsx format. Microsoft made this decision when designing the format: .xlsx is a clean, macro-free document format. If you want macros, you use .xlsm.
An .xlsm file is structurally identical to .xlsx — same ZIP/XML format, same Open XML standard, same row limits. The only difference is that .xlsm includes a vbaProject.bin file inside the ZIP archive, which stores the VBA project (modules, forms, and references).
If your .xls file contains any VBA code — a single macro, a Workbook_Open event, a custom function — you must save as .xlsm, not .xlsx. Saving as .xlsx will strip the code.
How to check before you migrate: In Excel, press Alt+F11 to open the VBA editor. If you see any modules listed in the Project Explorer on the left, you have VBA code. Close the editor, and save as .xlsm.
When migrating many files, manually checking each one for macros isn't realistic. LegacyLeaps's free scan audits every file in your batch and automatically identifies which ones contain VBA — so macro files get saved as .xlsm and clean files get saved as .xlsx with no manual intervention required.
The vast majority of Excel formulas work identically across .xls and .xlsx. Basic arithmetic, text functions, lookup functions, date math — all of it transfers cleanly.
There are two categories of exceptions to be aware of:
When Microsoft introduced Excel 2010, they replaced several statistical functions with improved versions that calculate more accurately. The old function names still work as compatibility aliases, but if your .xls files use them, you should know what changed:
| Old Function (.xls era) | New Function (Excel 2010+) | What Changed |
|---|---|---|
STDEV | STDEV.S | Clearer naming; same calculation |
STDEVP | STDEV.P | Clearer naming; same calculation |
RANK | RANK.EQ / RANK.AVG | Tie-handling made explicit |
PERCENTILE | PERCENTILE.INC / PERCENTILE.EXC | Inclusive/exclusive boundary made explicit |
QUARTILE | QUARTILE.INC / QUARTILE.EXC | Inclusive/exclusive boundary made explicit |
BETADIST | BETA.DIST | Additional parameters added |
NORMDIST | NORM.DIST | Renamed for consistency |
The old names still work in modern Excel — they're not removed, just deprecated. Your formulas won't break. But if you're doing critical statistical work, it's worth reviewing which version's behavior you're relying on.
Excel 365 introduced dynamic array functions (FILTER, SORT, UNIQUE, XLOOKUP) that don't exist in Excel 2003 or earlier. .xls files obviously can't contain them. This only matters if you're migrating in the opposite direction — from .xlsx back to .xls — which you shouldn't be doing anyway.
Outside of these narrow scenarios, there is no reason to stay on .xls in 2026.
The right approach depends on how many files you're moving and whether they contain macros.
For organizations migrating dozens or hundreds of files, manual conversion isn't practical. A PowerShell script can automate basic conversion, but it won't handle macro detection, PtrSafe updates, or formula validation. LegacyLeaps handles all of this automatically — scan first to see what you're working with, then migrate with one click per batch.
For a complete walkthrough of batch migration including a PowerShell script for the simpler cases, see the Complete Guide to Legacy Excel Migration.
Download LegacyLeaps and scan your files for free. See exactly what needs to be converted — macros, formula issues, row counts — before you spend a penny.
Download Free Scanner.xls uses Microsoft's binary BIFF format (Excel 97–2003). .xlsx uses the Open XML format introduced in Excel 2007. The main differences: .xlsx supports 1,048,576 rows vs 65,536 in .xls; .xlsx uses a ZIP-based open standard; .xlsx cannot store VBA macros (use .xlsm instead); and .xlsx files are generally smaller and faster to open.
No. .xlsx files cannot store VBA macros. If your .xls file contains macros, you must save as .xlsm (Excel Macro-Enabled Workbook) to preserve them. Saving as .xlsx silently strips all VBA code.
.xlsx is the modern standard and better for most purposes: larger row limits, smaller file sizes, better compatibility with non-Microsoft tools, and based on an open standard. The only reason to stay on .xls is compatibility with Excel 97–2003, which is rarely a real constraint in 2026.
Most formulas work identically. A small number of legacy statistical and math functions were replaced with more accurate versions in Excel 2010+. If your .xls uses STDEV, RANK, PERCENTILE, or similar functions, verify results after conversion. LegacyLeaps's free scan flags these before you migrate.
.xls supports a maximum of 65,536 rows and 256 columns per sheet. .xlsx supports 1,048,576 rows and 16,384 columns per sheet — 16x more rows and 64x more columns.
Practical fixes for legacy Excel and Access problems. No spam.