Learn Excel by doing
Short lessons with a spreadsheet in your browser. Every answer is checked instantly, and when it's wrong you see exactly why.
Start here: Excel basics
Never used Excel? Start with cells, your first formula and adding things up.
- BAS-01 schedule2 min ● Ready
Cells and cell names
Find any cell by its column letter and row number.
fx=B3Start ↗ - BAS-02 schedule3 min ● Ready
Your first formula
Make Excel do the maths with =, +, -, * and /.
fx=25+17Start ↗ - BAS-03 schedule3 min ● Ready
Using cell names in formulas
Write =
A2+B2so the answer updates by itself.fx=A2+B2Start ↗ - BAS-04 schedule3 min ● Ready
Copying a formula down
One formula, every row: the fill handle and Ctrl+D.
fx=B2*C2Start ↗ - BAS-05 schedule3 min ● Ready
Adding up a column with SUM
Your first function, and what
B2:B8means.fx=SUM(B2:B8)SUM Start ↗ - BAS-06 schedule3 min ● Ready
AVERAGE, MAX and MIN
The average, the highest and the lowest.
fx=AVERAGE(B2:B8)AVERAGE · MAX · MIN Start ↗ - BAS-07 schedule3 min ● Ready
Brackets and the order of calculation
Why =2+3*4 is 14, not 20.
fx=(2+3)*4Start ↗ - BAS-08 schedule4 min ● Ready
Locking a cell with $
Use one rate in every row without it moving.
fx=B2*$F$1Start ↗ - BAS-09 schedule3 min ● Ready
Counting with COUNT and COUNTA
How many cells have something in them, or a number.
fx=COUNTA(A2:A9)COUNT · COUNTA Start ↗ - BAS-10 schedule3 min ● Ready
Rounding with ROUND
Split a bill and round it to the penny.
fx=ROUND(A2/3,2)ROUND Start ↗ - BAS-11 schedule4 min ● Ready
Percentages
Work out each part's share of a total.
fx=B2/$B$7Start ↗ - BAS-12 schedule3 min ● Ready
Joining text with &
Turn a first and last name into a full name.
fx=A2&" "&B2Start ↗ - BAS-13 schedule3 min ● Ready
Comparisons: TRUE or FALSE
Ask yes-or-no questions with >, < and =.
fx=B2>=50Start ↗ - BAS-14 schedule4 min ● Ready
IF: making a decision
Show "Pass" or "Fail" depending on a score.
fx=IF(B2>=50,"Pass","Fail")IF Start ↗
Logic
Make formulas decide: pass or fail, bonus or not.
- LOG-01 schedule5 min ● Ready
More than two answers: IF inside IF
Merit, Pass or Fail: three answers from one formula.
fx=IF(B2>=70,"Merit",IF(B2>=50,"Pass","Fail"))IF · IFS Start ↗ - LOG-02 schedule5 min ● Ready
AND and OR inside IF
Combine several conditions.
fx=IF(AND(B2>=500,C2>=2),"Yes","No")AND · OR · IF Start ↗ - LOG-03 schedule4 min ● Ready
Checking cells with ISNUMBER, ISTEXT and ISBLANK
Ask what kind of value a cell holds.
fx=ISNUMBER(B2)ISNUMBER · ISTEXT · ISBLANK Start ↗ - LOG-04 schedule4 min ● Ready
NOT and XOR
Flip a condition, or check that exactly one is true.
fx=XOR(B2="Yes",C2="Yes")NOT · XOR Start ↗ - LOG-05 schedule4 min ● Ready
SWITCH: one of several values
Turn codes into labels without a chain of IFs.
fx=SWITCH(B2,"N","North","S","South")SWITCH Start ↗ - LOG-06 schedule3 min ● Ready
Fixing #DIV/0! errors
Show a message instead of an error when dividing by zero.
fx=IFERROR(B2/C2,"No orders")IFERROR · IF Start ↗
Counting and totals
Count and add up only the rows that match.
- AGG-01 schedule4 min ● Ready
Counting matches with COUNTIF
How many people are in each team?
fx=COUNTIF(B2:B11,"North")COUNTIF Start ↗ - AGG-02 schedule5 min ● Ready
Adding up matches with SUMIF
Total the sales for each team.
fx=SUMIF(B2:B11,"North",C2:C11)SUMIF Start ↗ - AGG-03 schedule5 min ● Ready
SUMIFS with several conditions
Total the sales for one team on one channel.
fx=SUMIFS(D2:D20,B2:B20,"North",C2:C20,"Web")SUMIFS Start ↗ - AGG-04 schedule4 min ● Ready
Criteria from a cell
Use ">="&
F1so the condition can change.fx=COUNTIF(C2:C20,">="&F1)COUNTIF · SUMIFS Start ↗ - AGG-05 schedule5 min ● Ready
COUNTIFS between two values
Count the ages, prices or scores that fall in each band.
fx=COUNTIFS(B2:B50,">="&E2,B2:B50,"<="&F2)COUNTIFS Start ↗ - AGG-06 schedule4 min ● Ready
Averages that match with AVERAGEIF
The average sale for one team only.
fx=AVERAGEIF(B2:B11,"North",C2:C11)AVERAGEIF · AVERAGEIFS Start ↗ - AGG-07 schedule4 min ● Ready
Highest and lowest that match with MAXIFS and MINIFS
The best or smallest sale in each team.
fx=MAXIFS(C2:C11,B2:B11,E2)MAXIFS · MINIFS Start ↗ - AGG-08 schedule4 min ● Ready
Multiply and add up with SUMPRODUCT
The total value of an order, without a helper column.
fx=SUMPRODUCT(B2:B9,C2:C9)SUMPRODUCT Start ↗ - AGG-09 schedule3 min ● Ready
Counting blanks with COUNTBLANK
Find the gaps: how many cells are still empty.
fx=COUNTBLANK(B2:B20)COUNTBLANK · COUNTA Start ↗ - AGG-10 schedule5 min ● Ready
Fixing a broken total
Spot why a total is wrong: short ranges, text numbers, double counting.
fx=SUMIF(A2:A20,"<>*Subtotal",B2:B20)SUM · SUMIF Start ↗
Statistics and rounding
Middle values, top 3s, and rounding the way you need.
- STA-01 schedule3 min ● Ready
ROUNDUP and ROUNDDOWN
Always round up boxes needed, or down to whole units.
fx=ROUNDUP(A2/12,0)ROUNDUP · ROUNDDOWN Start ↗ - STA-02 schedule3 min ● Ready
Odd, even and remainders with MOD
Every other row, and what is left over.
fx=MOD(A2,2)MOD · ISEVEN · ISODD Start ↗ - STA-03 schedule3 min ● Ready
MEDIAN and MODE
The middle value and the most common one.
fx=MEDIAN(B2:B20)MEDIAN · MODE Start ↗ - STA-04 schedule3 min ● Ready
Top and bottom values with LARGE and SMALL
The second highest score, or the three cheapest prices.
fx=LARGE(B2:B20,2)LARGE · SMALL Start ↗ - STA-05 schedule3 min ● Ready
Rounding to a step with FLOOR and CEILING
Round up to whole stacks, or prices down to the nearest 5.
fx=CEILING(A2,5)FLOOR · CEILING · MROUND Start ↗ - STA-06 schedule4 min ● Ready
Ranking with RANK.EQ
League positions from points, or from race times where lowest wins.
fx=RANK.EQ(B2,$B$2:$B$9)RANK.EQ · RANK Start ↗ - STA-07 schedule3 min ● Ready
Percentage change
How much each figure went up or down since last year.
fx=(C2-B2)/B2Start ↗
Text
Clean, split and join text so it is ready to use.
- TXT-01 schedule4 min ● Ready
Cleaning text with TRIM and PROPER
Fix spaces and capitals in a messy list.
fx=PROPER(TRIM(A2))TRIM · PROPER Start ↗ - TXT-02 schedule4 min ● Ready
LEN, SEARCH and wildcards
Measure text, find words in it, and match with * and ?.
fx=SEARCH("ltd",A2)LEN · SEARCH · COUNTIF Start ↗ - TXT-03 schedule5 min ● Ready
Splitting with LEFT, MID and FIND
Pull codes and names apart, the classic way.
fx=LEFT(A2,FIND(" ",A2)-1)LEFT · MID · RIGHT · FIND Start ↗ - TXT-04 schedule3 min ● Ready
Splitting text with TEXTBEFORE and TEXTAFTER
The modern way to split text at a character.
fx=TEXTBEFORE(A2,"@")TEXTBEFORE · TEXTAFTER Start ↗ - TXT-05 schedule3 min ● Ready
Joining text with TEXTJOIN
Combine cells with a separator, skipping the gaps.
fx=TEXTJOIN(", ",TRUE,A2:A6)TEXTJOIN · CONCAT Start ↗ - TXT-06 schedule3 min ● Ready
Find and replace with SUBSTITUTE
Replace characters inside a formula.
fx=SUBSTITUTE(A2,"-","")SUBSTITUTE Start ↗ - TXT-07 schedule3 min ● Ready
Numbers stored as text
Why "42" and 42 do not match, and how to fix it.
fx=VALUE(A2)VALUE Start ↗ - TXT-08 schedule5 min ● Ready
Cleaning data so lookups match
Fix hidden spaces and text numbers inside the lookup.
fx=XLOOKUP(TRIM(D2),A2:A50,B2:B50)TRIM · VALUE Start ↗ - TXT-09 schedule4 min ● Ready
Formatting numbers and dates with TEXT
Put a date or an amount in a message, formatted your way.
fx=TEXT(C2,"dd mmm yyyy")TEXT Start ↗
Lookups
Find a value in one table and bring back the matching details.
- LKP-01 schedule3 min ● Ready
VLOOKUP exact match
Look up a price by product name.
fx=VLOOKUP(E2,A2:C11,3,FALSE)VLOOKUP Start ↗ - LKP-02 schedule4 min ● Ready
Locking the table range with $
Copy a lookup down without the range sliding away.
fx=VLOOKUP(G2,$A$2:$C$13,3,FALSE)VLOOKUP Start ↗ - LKP-03 schedule4 min ● Ready
XLOOKUP basics
The modern lookup: simpler, and it can look left.
fx=XLOOKUP(E2,B2:B11,A2:A11)XLOOKUP Start ↗ - LKP-04 schedule4 min ● Ready
HLOOKUP: lookups across rows
When your table runs sideways.
fx=HLOOKUP("Mar",A1:M3,2,FALSE)HLOOKUP Start ↗ - LKP-05 schedule4 min ● Ready
Looking up from another sheet
Sheet references and lookups across two tables.
fx=VLOOKUP(B2,Prices!$A$2:$C$11,3,FALSE)VLOOKUP · XLOOKUP Start ↗ - LKP-06 schedule4 min ● Ready
Hiding #N/A with IFNA
Show "Not found" instead of an error, without hiding real mistakes.
fx=IFNA(VLOOKUP(A2,D2:E50,2,FALSE),"Not found")IFNA · IFERROR Start ↗ - LKP-07 schedule5 min ● Ready
Approximate match: bands and grades
Tax bands, commission rates and grade boundaries.
fx=VLOOKUP(B2,$E$2:$F$7,2,TRUE)VLOOKUP · XLOOKUP Start ↗ - LKP-08 schedule3 min ● Ready
MATCH: finding a position
Which row is it in? The building block of
INDEXandMATCH.fx=MATCH("Kiwi",A2:A20,0)MATCH Start ↗ - LKP-09 schedule3 min ● Ready
INDEX: picking a cell by position
Give a row number, get the value.
fx=INDEX(B2:B20,5)INDEX Start ↗ - LKP-10 schedule5 min ● Ready
Looking left with INDEX and MATCH
Why
VLOOKUPcannot look left, and the classic fix.fx=INDEX(A2:A20,MATCH(E2,B2:B20,0))INDEX · MATCH Start ↗ - LKP-11 schedule5 min ● Ready
XLOOKUP: handling missing values
The not-found argument and search modes.
fx=XLOOKUP(E2,B2:B20,C2:C20,"Not found",0,-1)XLOOKUP Start ↗ - LKP-12 schedule6 min ● Ready
Two-way lookups
Find the value where a row and a column cross.
fx=INDEX(B2:M20,MATCH(P1,A2:A20,0),MATCH(P2,B1:M1,0))INDEX · MATCH · XLOOKUP Start ↗ - LKP-13 schedule5 min ● Ready
Lookups on two or more columns
Match on first name and last name together.
fx=XLOOKUP(E2&F2,A2:A50&B2:B50,C2:C50)XLOOKUP Start ↗ - LKP-14 schedule4 min ● Ready
XLOOKUP with wildcards
Find a company when you only know the start of its name.
fx=XLOOKUP(E2&"*",A2:A50,B2:B50,,2)XLOOKUP Start ↗ - LKP-15 schedule4 min ● Ready
Positions with XMATCH
Where something sits in a list, from the top or from the bottom.
fx=XMATCH(E2,A2:A13,0,-1)XMATCH Start ↗ - LKP-16 schedule7 min ● Ready
Lookup practice round
Two lookups on one order list: prices, names and a missing product.
fx=XLOOKUP(E2,A2:A50,C2:C50)VLOOKUP · XLOOKUP · INDEX · MATCH Start ↗
Dynamic arrays
One formula that fills a whole range: filter, sort and reshape.
- ARR-01 schedule3 min ● Ready
Flipping data with TRANSPOSE
Turn rows into columns.
fx=TRANSPOSE(A1:D5)TRANSPOSE Start ↗ - ARR-02 schedule3 min ● Ready
Picking columns with CHOOSECOLS
Keep only the columns you need.
fx=CHOOSECOLS(A1:F50,1,4)CHOOSECOLS Start ↗ - ARR-03 schedule4 min ● Ready
Filtering rows with FILTER
A live filtered copy of a table.
fx=FILTER(A2:C50,B2:B50="North")FILTER Start ↗ - ARR-04 schedule3 min ● Ready
Removing duplicates with UNIQUE
A list without repeats.
fx=UNIQUE(A2:A50)UNIQUE Start ↗ - ARR-05 schedule4 min ● Ready
Sorting with SORT and SORTBY
A sorted copy that updates itself.
fx=SORT(A2:C50,3,-1)SORT · SORTBY Start ↗
Dates
Work out ages, deadlines and month ends.
- DAT-01 schedule4 min ● Ready
How Excel stores dates
Dates are numbers: build and take them apart.
fx=DATE(2026,10,31)DATE · YEAR · MONTH · DAY Start ↗ - DAT-02 schedule3 min ● Ready
Month ends with EOMONTH
Due dates and month-end reports.
fx=EOMONTH(A2,0)EOMONTH Start ↗ - DAT-03 schedule4 min ● Ready
Working days with NETWORKDAYS
Count days excluding weekends and holidays.
fx=NETWORKDAYS(A2,B2)NETWORKDAYS Start ↗ - DAT-04 schedule4 min ● Ready
Deadlines in working days with WORKDAY
The delivery date a number of working days away, skipping holidays.
fx=WORKDAY(B2,C2,$F$2:$F$5)WORKDAY Start ↗ - DAT-05 schedule4 min ● Ready
Ages and durations with DATEDIF
Years, months and days between two dates.
fx=DATEDIF(A2,TODAY(),"Y")DATEDIF Start ↗ - DAT-06 schedule3 min ● Ready
TODAY and DAYS
Days until a deadline, updated every morning.
fx=DAYS(B2,TODAY())TODAY · DAYS Start ↗
Keyboard and navigation
Move, select and fill without the mouse.
- KEY-01 Soon
Moving around with the keyboard
Arrow keys, Ctrl+Arrow and Ctrl+Home.
keysCtrl+ArrowComing soon - KEY-02 Soon
Selecting ranges, rows and columns
Shift+Arrow, Ctrl+Shift+Arrow, Shift+Space and Ctrl+Space.
keysCtrl+Shift+ArrowComing soon - KEY-03 Soon
Fill down and fill right
Ctrl+D and Ctrl+R: copy a formula in one keystroke.
keysCtrl+D Ctrl+RComing soon - KEY-04 Soon
AutoSum
Alt+= writes the
SUMfor you.keysAlt+=SUM Coming soon - KEY-05 Soon
Cut, copy and paste values
Paste the result, not the formula.
keysCtrl+Alt+VComing soon
Formatting
Make numbers readable and let colour point out what matters.
- FMT-01 Soon
Number formats and their shortcuts
Currency, percentages, dates and decimals.
keysCtrl+Shift+%Coming soon - FMT-02 Soon
Conditional formatting
Highlight overdue dates, duplicates and top values.
fx=B2<TODAY()Coming soon
Tables, sorting and PivotTables
Organise a list, then summarise it in a few clicks.
- TBL-01 Soon
Sorting and filtering a list
Put rows in order and show only the ones you need.
keysCtrl+Shift+LComing soon - TBL-02 Soon
Excel tables
Ctrl+T, banded rows, and formulas that fill themselves.
keysCtrl+TComing soon - TBL-03 Soon
PivotTables
Totals by region and month without a single formula.
keysInsert > PivotTableComing soon - TBL-04 schedule4 min ● Ready
Working with several sheets
Total the same cell across monthly sheets, one by one or with Jan:Mar!
B2.fx=SUM(Jan:Mar!B2)SUM Start ↗
Projects
Build a real spreadsheet from start to finish, combining everything.
- PRJ-01 Soon
Build a monthly budget
Income, spending by category and what is left.
fx=SUMIF(B2:B50,"Food",C2:C50)SUM · SUMIF · IF Coming soon - PRJ-02 Soon
Build a class gradebook
Scores, averages, grades and a pass rate.
fx=IFS(B2>=70,"A",B2>=50,"B",TRUE,"C")AVERAGE · IFS · XLOOKUP · COUNTIF Coming soon - PRJ-03 Soon
Build a sales report
Totals by region and month, and the top sellers.
fx=SUMIFS(D2:D500,B2:B500,F2,C2:C500,G1)SUMIFS · COUNTIFS · LARGE Coming soon - PRJ-04 Soon
Build an invoice
Look up prices, add tax and total it up.
fx=ROUND(SUM(D2:D10)*1.2,2)XLOOKUP · ROUND · SUM Coming soon - PRJ-05 Soon
Reconcile two exports
Match two systems and flag what is missing or different.
fx=IF(COUNTIF(Other!A2:A500,A2),"OK","Missing")XLOOKUP · COUNTIF · IF Coming soon
Know someone fighting with a spreadsheet? Send them this page.