Before you start
You will be able to
- Build an Excel table, and write structured references, calculated columns and a total row.
- Use sorting, filtering, data validation and Remove Duplicates, and explain what each one does to the data.
- Clean imported text, numbers and dates with TRIM, CLEAN, PROPER, SUBSTITUTE, VALUE, DATEVALUE and DATE, keeping the raw data untouched and logging each step.
- Choose between formulas, Text to Columns, Flash Fill, Find and Replace and Power Query for a cleaning job.
- Use UNIQUE, SORT, SORTBY and FILTER, and explain spill ranges and the #SPILL! error.
Review first
- Lookups: VLOOKUP, INDEX and MATCH, XLOOKUP — Lookups into tables, and the idea of a formula that spills, come from that lesson.
- Functions, logic, text and dates — TRIM, SUBSTITUTE, VALUE, DATEVALUE and DATE are introduced there as general tools; here they become a cleaning workflow.
- Incorrect data types and inconsistent dates — Numbers stored as text and ambiguous slash dates, and how B02 decided Lantern’s, are explained there.
- Data quality reporting and a reproducible workflow — The raw data, the cleaning log and reproducibility are defined there.
Fictional case A fictional coffee business founded by Ana Lim. It starts as a catering and barista-training service, opens its own cafés and an online shop for beans, and plans a canned cold brew.
The idea
Fictional case
Ana’s order workbook holds the 231 cleaned spring orders as a plain range, A1:M232. Every month she pastes new orders underneath, and then has to stretch every formula, every SUM range and every chart to reach the new rows; twice she has forgotten one and reported a total that stopped at June’s first week. Each month’s orders also arrive as a raw export from the shop platform, with the same untidy text, prices and dates that B02 cleaned, and she cleans them again by hand.
An Excel table solves the first problem. It is a range that Excel manages as one object, with a name, a header row, and columns that formulas can refer to by name. To make one, click any cell in the data and choose Insert › Table, or press Ctrl+T (Ctrl+L also works; on a Mac, ⌘+T or Control+T), and confirm that the table has headers. Excel names it Table1; give it a better name in the Table Design tab (Table on a Mac) › Table Name. Ana calls hers Orders.
Table names have rules: they start with a letter, an underscore or a backslash, contain no spaces (use an underscore or a full stop), run to at most 255 characters, can’t look like a cell reference such as Z100, and must be unique in the workbook, ignoring capitals. Three things change as soon as the range is a table. Filter buttons appear on every header. Typing or pasting in the row directly below the table, or the column to its right, makes the table grow to include it. And formulas can name columns instead of cell ranges.
| What it does | With cell references | With structured references |
|---|---|---|
| Total order value | =SUM(J2:J232) | =SUM(Orders[order_total]) |
| Recompute this row’s total | =G2*H2-I2 | =[@quantity]*[@unit_price]-[@discount] |
| App order value | =SUMIFS(J2:J232,K2:K232,"app") | =SUMIFS(Orders[order_total],Orders[channel],"app") |
| Number of orders | =COUNTA(A2:A232) | =ROWS(Orders) |
A structured reference such as Orders[order_total] means “the data in the order_total column of the Orders table”, however many rows that is today. When July’s orders are pasted under the table, =SUM(Orders[order_total]) includes them, while =SUM(J2:J232) stops at row 232. Structured references are also easier to read: a reviewer can see what =SUMIFS(Orders[order_total],Orders[channel],"app") adds up without opening the columns.
The second problem, cleaning the raw export, needs a workflow rather than a feature. B02 set its rules: keep the raw data exactly as received, build the cleaned version from it by steps that can be repeated, and record each step in a cleaning log. In Excel that means a raw sheet nobody edits, a cleaning sheet whose columns are formulas pointing at it (or a Power Query that does the same), and a table of the clean result that the analysis reads.
In depth
Structured references
Excel writes structured references for you: start a formula, click a cell or a column of the table, and the reference appears by name. You can also type them. Inside the table, a reference to the same row needs no table name; outside it, name the table.
| Reference | Means |
|---|---|
Orders[order_total] | The data rows of the order_total column |
[@quantity] or Orders[@quantity] | The quantity in the same row as the formula (Excel writes @ for “this row”) |
Orders | All the data rows of the table |
Orders[#Headers], Orders[#Totals], Orders[#All] | The header row; the total row; the whole table including both |
Structured references adjust themselves: when rows are added or removed, the column references cover the new extent, and when you rename a column or the table, Excel updates every formula in the workbook that uses it. Copying a formula keeps its structured references exactly as written. Filling a fully qualified reference across, as Microsoft puts it, adjusts the column specifiers “like a series”, so Orders[quantity] filled one column to the right becomes Orders[unit_price], the next column’s name.
Calculated columns and the total row
Type a heading in the empty column to the right of a table and the table widens to include it. Type a formula in one cell of that column, press Enter, and Excel fills it down the whole column: a calculated column. Rows added later receive the formula too, so the column never has a gap. Ana’s first calculated column checks every order’s arithmetic, the B02 cross-field check written as a formula: =[@order_total]-([@quantity]*[@unit_price]-[@discount]) should be 0 in every row.
The total row is switched on with Table Design › Total Row. Each cell in it has a drop-down of summary functions, and the defaults use SUBTOTAL: the sum of a column is written =SUBTOTAL(109,[order_total]). SUBTOTAL’s first argument chooses the calculation and what to do with hidden rows: 9 sums including rows you have hidden by hand, 109 sums excluding them, and both always leave out rows hidden by a filter. SUBTOTAL also ignores other SUBTOTALs inside its range, so subtotals are never counted twice.
That makes the total row a live summary of whatever the filter shows. Filter Orders to the app channel and the total row shows the app orders’ value, while =SUM(Orders[order_total]) elsewhere still shows all 231 orders. Neither is wrong; they answer different questions, so label them.
Sorting and filtering
Sorting rearranges rows: Sort A to Z or Sort Largest to Smallest on a column, or several levels at once with Data › Sort and Add Level. Sort whole records, never one column on its own: sorting part of a range separates the sorted cells from the rest of their records, and when Excel notices that you have selected only part of the data it offers to expand the selection, which you should accept. A table always sorts whole rows. If the original order matters (the order the export arrived in, say), keep an id column you can sort back by.
Filtering hides the rows that don’t meet a condition; nothing is deleted. A table has filter buttons on its headers already, and a plain range gets them from Data › Filter. Each button offers text, number or date filters to suit the column, such as channel equals app, order_total greater than 35, or order_date in May. Pair a filter with SUBTOTAL, not SUM, when the total should follow what you see.
Data validation
Data validation (Data › Data Validation) restricts what can be typed into cells. It guards new entries: B02’s validation rule checks data that already exist, while Excel’s data validation stops some errors at the moment of typing. Its Settings tab allows whole numbers, decimals, a list, dates, times, a text length or a custom formula, each with a condition.
| Column | Allow | Condition |
|---|---|---|
| channel | List | app, web (a drop-down, so “Web ” or “website” can’t be typed) |
| quantity | Whole number | greater than or equal to 1 |
| discount | Decimal | greater than or equal to 0 |
| order_date | Date | between 1 July 2026 and 31 July 2026 for July’s sheet |
An Input Message tab shows a hint when the cell is selected. The Error Alert tab chooses the response to a bad entry: Stop prevents it, Warning warns but lets the user keep it, and Information is the most lenient, letting the user accept or reject the value. Two limits matter. Microsoft notes that validation shows messages and blocks entries only when data are typed directly into a cell, so pasting or filling can bring invalid values in. And adding a rule to cells that already hold data doesn’t flag the bad ones; Data Validation › Circle Invalid Data marks them.
Remove Duplicates
Data › Remove Duplicates deletes rows that repeat values in the columns you tick. Microsoft lists its rules: it keeps the first occurrence and deletes the others; it compares what appears in the cells, not the underlying value; it removes whole rows even though only the ticked columns are compared; and the deletion is permanent apart from Undo. Work on a copy, and count before you delete: =COUNTIF($A$2:$A$21,A2) filled down counts each id’s occurrences (a conditional aggregate), so any count above 1 marks a repeated id.
Which columns to tick is a business decision, the one B02’s duplicates lesson calls the business key. Ticking every column removes only exact duplicates, such as order LC-10003, which appears twice in Lantern’s raw export with identical values. Ticking only order_id would also delete an updated version of an order, keeping whichever came first rather than the one that is right.
Cleaning Lantern’s raw export, step by step
The first 20 rows of B02’s raw export show the usual problems. Every price and total arrived as text, 13 of the 20 prices with a dollar sign; 18 dates are ISO 8601, 1 is written out and 1 is a slash date; one email has a stray leading space and capitals; order LC-10003 appears twice; 6 ratings are blank; and LC-10016’s total doesn’t equal quantity × price − discount.
| Clean column | Problem in the raw data | Formula |
|---|---|---|
| “ Ivan.Zimmer@Example.Com”: leading space, capitals | =LOWER(TRIM(D2)) | |
| quantity, unit_price, discount, order_total | Numbers stored as text, some as “$58.00” | =VALUE(I2) and so on |
| order_date (ISO 8601 and written out) | “2026-03-01”, “March 2, 2026” | =DATEVALUE(B2), then test it |
| order_date (slash dates) | “05/03/2026”: the web shop writes the day first | =DATE(RIGHT(B2,4),MID(B2,4,2),LEFT(B2,2)) |
| duplicate flag | LC-10003 twice | =COUNTIF($A$2:$A$21,A2)>1 |
| total check | LC-10016: $21.35 for one $16.50 bag less $1.65 | =VALUE(K2)-(VALUE(H2)*VALUE(I2)-VALUE(J2)) |
| rating | Blank: no rating given | Leave blank; never turn it into 0 |
TRIM removes every space except single spaces between words, but only the ordinary space character (code 32): the non-breaking space (code 160) that web pages use survives it, and needs =TRIM(SUBSTITUTE(A2,CHAR(160)," ")). CLEAN removes the non-printing control characters with codes 0 to 31. PROPER capitalises the first letter and every letter that follows a non-letter, and lowers the rest, so it turns “house blend 250g” into “House Blend 250G”: harmless for a lookup, which ignores case, but check its output before you publish it.
VALUE converts text that looks like a number, date or time in a format Excel recognises: =VALUE("$1,000") is 1000, and arithmetic such as =I2*1 converts the same way. SUM does not: it skips text, as B02 showed. After converting, =COUNT(L2:L21) should equal the number of rows; any shortfall is a value that failed to convert and needs a look.
Dates need the most care. DATEVALUE converts date text to a serial number, and Microsoft warns that the computer’s system date setting can change its results, so the same text can give different dates on different machines. With US settings, “05/03/2026” becomes 3 May 2026, silently. B02 established that Lantern’s web shop writes the day first, so this order was placed on 5 March; =DATE(RIGHT(B2,4),MID(B2,4,2),LEFT(B2,2)) builds the date from its parts in the order you decide, and gives the same answer everywhere. Use DATEVALUE only for unambiguous text (ISO dates, written-out months), and test a few results against the source.
Each step goes in the log, B02-style: what the column does, the rule, and the count it affected. For example: “unit_price: VALUE of the raw text; 20 of 20 converted.” “order_date: DATEVALUE for ISO and written dates (19 rows), DATE from parts for day-first slash dates (1 row).” “LC-10003: exact duplicate, second copy removed; 20 rows become 19.” “LC-10016: total disagrees with its parts by $6.50; set to $14.85, as B02 decided.”
Text to Columns, Flash Fill, Find and Replace and Power Query
| Tool | What it does | Watch out for | Rerun next month? |
|---|---|---|---|
| Formulas in a cleaning sheet | Compute a clean column from each raw one | Long formulas need checking | Yes: paste new raw data |
| Data › Text to Columns | Splits one column into several at a delimiter (comma, space…) | Overwrites the columns to its right; keep enough empty columns | No: repeat it by hand |
| Data › Flash Fill (Ctrl+E; Control+E on a Mac) | Fills a column by following the pattern of examples you type | It infers the pattern from your examples, so check every result | No: repeat it by hand |
| Find and Replace (Ctrl+H; Control+H on a Mac) | Replaces text in cells, one at a time or all at once | Replace All edits cells in place; use Match case and Match entire cell contents | No: repeat it by hand |
| Power Query (Data › Get & Transform Data) | Imports data and records each transformation as a step | Learning a new editor | Yes: Refresh reruns every step |
Power Query is the tool built for the monthly export. It connects to the data, transforms it, can combine it with other sources and loads the result to a worksheet, leaving the original source unchanged. Each transformation appears in the editor’s Applied Steps list, where steps can be renamed, deleted, edited or reordered, and when the query is refreshed each step runs again automatically: a cleaning log that executes itself. Microsoft states that it is available in every stand-alone version of Excel for Windows from Excel 2016, and on a Mac to Microsoft 365 subscribers. This lesson stays with formulas, which work everywhere and show their logic cell by cell; B07 SQL returns to the same steps as queries.
Dynamic arrays: UNIQUE, SORT, SORTBY and FILTER
The lookups lesson showed a formula that returns several values and spills them into neighbouring cells. Four dynamic array functions make that their job. Excel draws a border round the spill range while you select it, only the top-left cell can be edited, and the range grows or shrinks by itself when the source changes. Pointed at a table column, they keep up with the table.
| Function | Example | Result |
|---|---|---|
| UNIQUE(array, [by_col], [exactly_once]) | =UNIQUE(Orders[region]) | The 5 regions, each once |
| SORT(array, [sort_index], [sort_order], [by_col]) | =SORT(UNIQUE(Orders[region])) | The 5 regions from Central to West |
| SORTBY(array, by_array1, [sort_order1], …) | =SORTBY(Orders[order_id],Orders[order_total],-1) | All 231 ids, largest order first (LC-10144) |
| FILTER(array, include, [if_empty]) | =FILTER(Orders[order_id],Orders[order_total]>100,"none") | The 6 orders over $100 |
FILTER’s include argument is a column of TRUE and FALSE values as tall as the array. Multiply conditions for AND and add them for OR: =FILTER(Orders,(Orders[region]="Central")*(Orders[channel]="web")) keeps Central’s web orders, all columns. If nothing qualifies and if_empty is left out, FILTER returns #CALC!, because Excel has no empty array. UNIQUE’s exactly_once set to TRUE keeps only values that occur once, and wrapping UNIQUE in ROWS counts the distinct values: =ROWS(UNIQUE(Orders[customer_id])) gives 112 customers.
A spilled formula fails with #SPILL! when it can’t spill. The usual causes are these: the spill range isn’t empty (delete or move whatever is in the way), the formula is inside a table (spilled array formulas aren’t supported in tables, so put it beside the table), the result would run off the edge of the sheet, or it would spill into merged cells. To refer to a whole spill range, put # after its first cell: if D2 holds =SORT(UNIQUE(Orders[region])), then =COUNTA(D2#) counts what it spilled, however many rows that becomes.
Formulas
The order-total check (a cross-field rule)
- Quantity: the number of items in the orderitems
- Unit price: Lantern’s shop price per item$ per item
- Discount on the whole order (10% for subscriptions, $5 for a promotion code)$
Assumes. Delivery and tax are not part of order_total in Lantern’s export. A row where the two sides differ by more than a cent fails the check.
In a table, the calculated column =[@order_total]-([@quantity]*[@unit_price]-[@discount]) applies the check to every row; B02 explains what to do with the rows that fail.
Worked examples
Fictional figures
Ana practises on the first eight spring orders: order_id, quantity, unit_price, discount, order_total and channel in A1:F9. Turn them into a table called Orders, add a column that checks each total, add a total row, and filter to the app channel. What do the check column and the total row show?
| A: order_id | B: quantity | C: unit_price | D: discount | E: order_total | F: channel | G: check | |
|---|---|---|---|---|---|---|---|
| 2 | LC-10001 | 2 | $58.00 | $5.00 | $111.00 | app | =[@order_total]-([@quantity]*[@unit_price]-[@discount]) |
| 3 | LC-10002 | 2 | $17.00 | $3.40 | $30.60 | app | 0 |
| 4 | LC-10003 | 1 | $14.00 | $0.00 | $14.00 | web | 0 |
| 5 | LC-10004 | 3 | $14.00 | $5.00 | $37.00 | app | 0 |
| 6 | LC-10005 | 2 | $46.00 | $0.00 | $92.00 | web | 0 |
| 7 | LC-10006 | 1 | $14.00 | $1.40 | $12.60 | app | 0 |
| 8 | LC-10007 | 1 | $58.00 | $5.00 | $53.00 | web | 0 |
| 9 | LC-10008 | 1 | $19.50 | $0.00 | $19.50 | app | 0 |
| 10 | Total | =SUBTOTAL(109,[order_total]) |
- Click a cell in A1:F9, press Ctrl+T, confirm the headers, and rename the table Orders in Table Design › Table Name.
- Type check in G1: the table widens to column G. In G2 type
=[@order_total]-([@quantity]*[@unit_price]-[@discount])(clicking the cells writes the references) and press Enter. Excel fills G2:G9 with the same formula, and every row shows 0: each total equals quantity × price − discount. - Switch on Table Design › Total Row and choose Sum under order_total. Excel writes
=SUBTOTAL(109,[order_total]), which shows $369.70. - Filter channel to app. 5 rows remain visible and the total row changes to $210.70 ($111.00 + $30.60 + $37.00 + $12.60 + $19.50), because SUBTOTAL leaves out rows hidden by a filter. A
=SUM(Orders[order_total])outside the table still shows $369.70.
Answer. The check column is 0 in all eight rows. The total row shows $369.70 unfiltered and $210.70 with the filter on app.
What it means. The table now carries its own arithmetic check and a total that follows the filter, and both extend themselves when the next orders are pasted underneath. A check column of zeros is a result worth keeping: the day a row shows something else, the export has a problem.
Fictional figures
Six rows of B02’s raw export, as typed. Every value is text. Build the clean values with formulas, flag what needs a decision, and write the log entries.
| A: order_id | B: order_date | C: quantity | D: unit_price | E: discount | F: order_total | G: channel | |
|---|---|---|---|---|---|---|---|
| 2 | LC-10002 | “March 2, 2026” | “2” | “$17.00” | “3.40” | “$30.60” | app |
| 3 | LC-10003 | “2026-03-02” | “1” | “$14.00” | “0.00” | “$14.00” | web |
| 4 | LC-10006 | “2026-03-03” | “1” | “14.00” | “1.40” | “$12.60” | app |
| 5 | LC-10007 | “05/03/2026” | “1” | “58.00” | “5.00” | “$53.00” | web |
| 6 | LC-10003 | “2026-03-02” | “1” | “$14.00” | “0.00” | “$14.00” | web |
| 7 | LC-10016 | “2026-03-09” | “1” | “16.50” | “1.65” | “$21.35” | app |
- Numbers:
=VALUE(…)on quantity, unit_price, discount and order_total turns “$17.00” into 17, “14.00” into 14 and “$21.35” into 21.35.=COUNT(…)on each new column returns 6: nothing failed to convert. - Dates: the ISO dates (“2026-03-02”, “2026-03-03”, “2026-03-09”) and the written-out “March 2, 2026” go through DATEVALUE. The web order’s “05/03/2026” does not: with US settings DATEVALUE would make it 3 May. Built with
=DATE(RIGHT(B5,4),MID(B5,4,2),LEFT(B5,2))it is 5 March 2026, the day-first reading B02 established for the web shop. - Duplicates:
=COUNTIF($A$2:$A$7,A2)is 2 for both LC-10003 rows. Every field is identical, so this is an exact duplicate: keep the first, delete the second (Remove Duplicates with every column ticked does exactly that). - Arithmetic: the check total − (quantity × price − discount) is 0 for every row except LC-10016: $21.35 − (1 × $16.50 − $1.65) = $6.50. The parts agree with each other (a 10% subscription discount on one bag), so the total is the odd one out; B02 set it to $14.85.
- Log the four decisions with their counts: 6 values converted per numeric column; 1 slash date read day first; 1 exact duplicate removed (6 rows become 5); 1 total corrected.
Answer. Five clean rows: dates 2, 2, 3, 5 and 9 March 2026; all prices and totals numeric; LC-10003 once; LC-10016’s total $14.85 instead of $21.35. Four log entries record what changed and why.
What it means. Each problem needed a different tool, and two of them, the slash date and the wrong total, needed a decision that no function can make. Formulas do the routine conversions repeatably; the log records the judgements, so the same choices are made next month and anyone can check them.
Fictional figures
Spokewise Cycles, a fictional bike shop, keeps its repair jobs in a table called Jobs: job, mechanic, status, due (a date) and estimated hours. The manager wants each mechanic’s open jobs, soonest first, and to know whether anyone has more open work due by 10 July than the 8 workshop hours they have before then.
| job | mechanic | status | due | hours |
|---|---|---|---|---|
| J-301 | Luis | open | 6 Jul | 2.5 |
| J-302 | Mei | done | 3 Jul | 1.0 |
| J-303 | Luis | open | 7 Jul | 3.0 |
| J-304 | Dana | open | 6 Jul | 1.5 |
| J-305 | Luis | waiting for parts | 9 Jul | 2.0 |
| J-306 | Mei | open | 8 Jul | 1.0 |
| J-307 | Luis | open | 8 Jul | 2.0 |
| J-308 | Dana | open | 10 Jul | 2.5 |
| J-309 | Luis | open | 10 Jul | 2.0 |
- Protect the status column first: data validation with a List of open, waiting for parts, done. Without it, a status typed as “open ” with a trailing space, or as “in progress”, would drop out of every filter on “open”.
- For one mechanic’s open jobs, soonest first:
=SORT(FILTER(Jobs,(Jobs[mechanic]="Luis")*(Jobs[status]="open")),4), placed beside the table (a spilled formula can’t go inside it). Multiplying the two conditions means both must hold. It spills Luis’s 4 open jobs: J-301, J-303, J-307 and J-309. - Hours per mechanic:
=SUM(FILTER(Jobs[hours],(Jobs[mechanic]="Luis")*(Jobs[status]="open")))gives 9.5 hours; for Dana 4.0 and for Mei 1.0. (=SUMIFS(Jobs[hours],Jobs[mechanic],"Luis",Jobs[status],"open")gives the same.) - Compare with capacity: Luis has 9.5 hours of open work against 8 available; moving J-309 (2.0 hours, due 10 July) to Mei leaves him 7.5 and gives her 3.0.
Answer. Luis is overloaded by 1.5 hours; reassigning J-309 to Mei brings everyone within 8 hours.
What it means. Because Jobs is a table and the formulas use FILTER on its columns, tomorrow’s new jobs appear in each mechanic’s list without anyone editing a formula. The validation rule matters as much as the formulas: a filter is only as reliable as the consistency of the values it tests.
Explore
Common mistakes
“A table is just formatting.”
The banded rows are the least of it. A table has a name, grows when rows are added, fills calculated columns and lets formulas say
Orders[order_total]instead of a range that has to be stretched by hand. Ranges that stop short are one of the commonest causes of a wrong total.“The total row and SUM give the same total.”
Only when no filter is on. The total row uses SUBTOTAL, which leaves out rows hidden by a filter; SUM counts every row. Decide which the reader needs and label it.
“Data validation keeps the column clean.”
It blocks bad values typed into a cell, not values pasted or filled in, and it doesn’t flag data that were already there. Use Circle Invalid Data after adding a rule, and keep checking imported data with formulas.
“DATEVALUE converts the dates.”
It converts them using the computer’s date settings, so a day-first slash date such as 05/03/2026 becomes 3 May on a US-settings machine without any error. Build ambiguous dates with DATE from their parts, in the order the source used.
“I’ll fix the export in place; it’s quicker.”
Edits typed over the raw data can’t be checked, repeated or undone next month. Keep the raw sheet untouched, clean with formulas or Power Query steps, and log each step.
“#SPILL! means the formula is wrong.”
It usually means the formula is fine but has nowhere to put its results: something sits in the spill range, or the formula is inside a table. Clear the range or move the formula beside the table.
Guided practice
Work through these with hints when you need them. Every hint and every worked solution is there to be used.
Loading four questions…
On your own
No hints this time. Answer, check, and read the feedback; the solution appears once you have answered or if you ask for it. Your first answers count toward mastery.
Loading six questions…
In practice
Lantern’s monthly refresh. Ana’s workbook now has three sheets: Raw (the export pasted as text), Clean (formulas pointing at Raw, with check and flag columns), and the Orders table, which she updates from Clean with Paste Values. Her month-end routine is short: paste, read the flags, record decisions in the log, paste values, refresh. Totals and PivotTables built on Orders pick up the new rows because the table grows.
A charity’s donation file. Greenway Community Pantry, a fictional food bank, receives a donations file from its payment provider every week. Its volunteer treasurer built a Power Query that removes test transactions, splits the donor name, converts amounts and dates with the locale stated, and loads a table. Each week she clicks Refresh; the Applied Steps list doubles as the documentation the trustees ask for.
A sign-up sheet that stays tidy. A gym that takes class bookings in a shared workbook uses a table with data validation lists for class and time, so a FILTER beside it can list tomorrow’s attendees for each instructor. When bookings are pasted in from the website, the manager runs Circle Invalid Data, because pasted values skip validation.
Spokewise’s workshop. The bike shop’s job board in the applied example is the same pattern on operational data: a validated table, FILTER and SORT beside it, and a capacity check that tells the manager who needs help before customers are kept waiting.
Knowledge check
Six questions, one attempt each, no hints. Score 80% or more to complete the lesson; you can take it again at any time.
Loading six questions…
Summary
- An Excel table (Ctrl+T) has a name, grows with its data, and lets formulas use structured references such as Orders[order_total] and [@quantity].
- A calculated column fills one formula down the whole table, including rows added later; the total row uses SUBTOTAL, which leaves out rows hidden by a filter.
- Sorting rearranges and filtering hides; data validation guards typed entries but not pasted ones; Remove Duplicates keeps the first occurrence and deletes the rest permanently.
- Clean with formulas pointing at an untouched raw sheet: TRIM, CLEAN and PROPER for text, VALUE for numbers, DATE from parts for ambiguous dates, and check columns for duplicates and arithmetic.
- DATEVALUE follows the computer’s date settings, so day-first slash dates can be misread silently; decide the order and build the date.
- Power Query records each step and reruns them all on Refresh; Text to Columns, Flash Fill and Find and Replace change cells once.
- UNIQUE, SORT, SORTBY and FILTER spill their results (Microsoft 365, 2021, 2024); #SPILL! means the spill range is blocked or the formula is inside a table.
Key formulas
Terms introduced
- Excel table
- A range that Excel manages as one named object, with a header row, filter buttons and columns that formulas can refer to by name; it grows when rows or columns are added next to it.
- Structured reference
- A reference to part of an Excel table by its table and column names, such as Orders[order_total], or [@quantity] for the value in the formula’s own row.
- Calculated column
- A column of an Excel table filled by one formula, which Excel copies to every row, including rows added later.
- Total row
- An optional last row of an Excel table that summarises its columns, by default with SUBTOTAL so that rows hidden by a filter are left out.
- Data validation
- An Excel feature that restricts what can be typed into cells (a list, a range of numbers or dates, a text length or a formula) and shows an input message or an error alert.
- Dynamic array function
- A function, such as FILTER, SORT, SORTBY or UNIQUE, that returns several values which spill into the neighbouring cells; available in Excel for Microsoft 365, Excel 2021 and Excel 2024.
- Power Query
- Excel’s tool for importing and reshaping data (Data › Get & Transform Data), which records each transformation as a step and reruns all of them when the query is refreshed.
Sources
- Microsoft Support. Using structured references with Excel tables. support.microsoft.com/en-us/excel/using-structured-reference…
- Microsoft Support. SUBTOTAL function. support.microsoft.com/en-us/excel/subtotal-function
- Microsoft Support. More on data validation. support.microsoft.com/en-US/Excel/more-on-data-validation
- Microsoft Support. Filter for unique values or remove duplicate values. support.microsoft.com/en-US/excel/get-started/filter-for-uni…
- Microsoft Support. DATEVALUE function. support.microsoft.com/office/datevalue-function-df8b07d4-776…
- Microsoft Support. Power Query data sources in Excel versions. support.microsoft.com/office/power-query-data-sources-in-exc…
- Microsoft Support. Dynamic array formulas and spilled array behavior. support.microsoft.com/excel/dynamic-array-formulas-and-spill…
