ToolsTray

Star a tool to keep it here.

Spreadsheet Compare

Compare two Excel or Google Sheets ranges by pasting them side by side. Changed cells light up, added rows go green, removed rows red.

Comparison rules

Nothing compared yet. Copy a block of cells from your spreadsheet and paste one version into each box above. The two tables appear here side by side with every changed cell highlighted.

How to use

  1. Select the range in your sheet, copy it, click into Original and paste. There is no file to choose and no import step.
  2. Paste the version you are checking against into Changed. The row and column count under each pane confirms the paste landed whole.
  3. Tick First row is header if your selection includes the titles. It starts unticked, and until you tick it the Match rows by list can only offer you Column 1, Column 2 and so on.
  4. Leave Match rows by on Row order (position) when line 12 genuinely should line up with line 12. Point it at an ID, an email or an order number when the two copies are sorted differently.
  5. Turn on Ignore case or Ignore whitespace for differences you do not want reported. Ignore whitespace squeezes every run of spaces into one and trims the ends, so New York and New York stop counting as a change.
  6. Read the summary line, then try Unified if you would rather see 4200 → 4350 in one cell than hold two tables in your head. Copy diff puts the result on the clipboard as tab-separated columns; Download CSV saves spreadsheet-diff.csv.

How this works

Two exports of the same sheet a week apart, and somewhere inside them a handful of numbers moved. Copy a range out of Excel, Google Sheets, LibreOffice Calc or Numbers, paste it into Original, paste the newer copy into Changed, and the comparison draws itself. Spreadsheet apps put a selection on the clipboard as a real HTML table and that is what gets read first, so a cell holding a line break or a comma arrives in one piece. Under each pane sits a count like 412 rows × 9 columns, which is the quickest way to notice a selection that grabbed one column too few.

Two settings decide whether the answer is worth anything. First row is header starts switched off; tick it and your titles stop being compared as data and start naming the entries in the Match rows by list. Then point Match rows by at a column that identifies a row, an order number or an email address, and the order of the rows stops mattering. Sort one copy differently from the other and they still find each other. Ignore case and Ignore whitespace mute the differences you did not come here to look at.

A price list, one week on

Last week's price list and this week's, both around forty rows of SKU, Product and Price. Paste last week's into Original, this week's into Changed, tick First row is header, then set Match rows by to SKU. Somebody re-sorted this week's copy alphabetically, which by row position would have painted nearly every line as changed. Keyed on SKU the summary comes back honest: 3 cells changed · 1 row added · 1 row removed.

Switch to Unified and the three changed cells read 12.50 → 13.20 in place. The discontinued SKU shows in red where it sat in last week's order, and the new one is appended at the bottom in green, because key matching walks every original row first and puts the unmatched newcomers after them. Download CSV writes spreadsheet-diff.csv with a Status column in front of your data.

Good to know

  • It compares what the cells display, not what sits behind them. A formula and a typed-in number both showing 10 are equal here. So are two cells whose underlying values differ in a decimal place your sheet is rounding out of sight.
  • Number formatting counts as content, because formatting is what the clipboard carries. 1,000 copied from a column with a thousands separator will not equal 1000 copied from one without. Match the formatting on both sides before you copy, or strip it from both.
  • Rows hidden by a filter never reach the clipboard, so they never reach the comparison. A filtered view compares as a smaller sheet, and the hidden rows are absent from the counts and from the export as well.
  • Duplicate values in the key column get paired in the order they appear. Two rows sharing an order number means the first on the left is matched with the first on the right, the second with the second, and anything left over on the right is appended at the bottom as added.
  • The diff runs on the page's main thread, so a very wide paste of several thousand rows makes the tab pause while it works, and it redoes the whole comparison every time you flip a toggle. Trimming to the columns you are actually checking fixes that faster than anything else.

Frequently asked questions

How do I compare two Excel files when there is nothing to upload?

Open both files, copy the range you care about from the first and paste it into Original, then go to the second and paste its range into Changed. Two windows of the same app is fine, and so is one range from Excel and one from Google Sheets. The clipboard is the only thing that has to travel between them.

Why does everything show as changed when all I did was re-sort the sheet?

Row order is the default pairing, so row 1 is compared with row 1 and a sort throws that off completely. Set Match rows by to a column that identifies the row, an ID or an email address, and it pairs on that value instead. Rows that only moved come back unchanged, and what is left is the real difference.

Can I use it on two plain lists of names rather than a table?

A single column behaves the same as a full table. Paste one list into each pane and leave Match rows by on row order to compare them line by line, or point it at that one column to find which entries appeared and which went missing regardless of order.

One of my cells has a comma in it. Will the columns split?

No. Nothing here splits on commas. A pasted selection is read from the clipboard's HTML table when the app provides one and from tab-separated text otherwise, so a comma is only ever a character. Cells containing a line break survive too, because spreadsheets quote them on the way out.

Does it show which cells changed, or only which rows?

Both. The row is marked as changed and the individual cells inside it are highlighted, so a row with one edited price does not look like a row rewritten end to end. The summary counts them separately: changed cells on one side, added and removed rows on the other.

What is the arrow in the Unified view?

Old value, arrow, new value, printed only in the cells that actually differ. Unchanged cells in the same row show their value once. Side by side keeps the two tables apart instead, with a synced scroll so they move together as you read.

How do I get the result into a sheet or an email?

Copy diff puts the whole comparison on the clipboard as tab-separated text, which pastes straight back into Excel or Sheets as proper columns with a Status column added in front. Download CSV writes the same thing to spreadsheet-diff.csv. Both export everything, whichever of the two views you happen to be looking at.

How much can I paste before it slows down?

A few thousand rows and a couple of dozen columns is comfortable. Past that the pause after each paste gets noticeable, since the comparison runs on the page's main thread. Cutting the columns down to the ones you are checking helps more than cutting the rows.

Missing something in Spreadsheet Compare? Suggest a feature →

Tell someone who needs this.