Return the nth largest or nth smallest value in a range.
MAX gives you the biggest value. LARGE gives you the nth biggest, which is what you actually need whenever the question is about a top three rather than a top one. SMALL is its mirror, returning the nth from the bottom.
Their main job is building a top-N table without sorting the source. =LARGE($B$2:$B$100, 1) in one cell, then 2, then 3 down the column, gives you a ranked list that updates itself while the underlying data stays in whatever order it arrived in. Replacing the hard-coded number with ROW()-1 means you can fill it down instead of typing each one.
One behaviour worth knowing: duplicates each take a place. If the top two values are both 28,000, LARGE with k=1 and k=2 both return 28,000. That is usually right — the second largest value really is 28,000 — but it means a top-five list can show the same number twice.
=LARGE(array, k) =SMALL(array, k)arraykHeaders in row 1, data in A2:C8. Note how far F8's salary sits above the rest.
| A | B | C | |
|---|---|---|---|
| 1 | Employee | Salary | Team |
| 2 | Alice Moreau | 32000 | Support |
| 3 | Bruno Santos | 28000 | Support |
| 4 | Chen Wei | 45000 | Engineering |
| 5 | Dana Okafor | 28000 | Support |
| 6 | Erik Halls | 38000 | Engineering |
| 7 | Farah Idris | 41000 | Engineering |
| 8 | Greg Nolan | 154000 | Executive |
=LARGE(B2:B8, 1)Result: 154000
The largest salary. Identical to MAX for k of 1.
=LARGE(B2:B8, 3)Result: 41000
The third largest — the question MAX cannot answer.
=SMALL(B2:B8, 2)Result: 28000
The second smallest. Both 28,000 entries count separately, so k of 1 and 2 return the same figure.
=LARGE($B$2:$B$8, ROW()-1)Result: 154000
The fill-down pattern. On row 2 this is k=1, on row 3 it is k=2, so one formula builds the whole ranked column.
Reading about a formula is not the same as writing one. Open this function's exercise and type it into a real grid — you get instant feedback on exactly which cell is wrong and why.
Why it happens: k is zero, negative, or larger than the count of numbers in the range — asking for the 8th largest of seven values.
How to fix it: Guard the fill-down: =IFERROR(LARGE($B$2:$B$8, ROW()-1), "") so the column stops cleanly when it runs out.
Why it happens: k is text, or array contains an error value.
How to fix it: Check k resolves to a number. If it is ROW()-1, make sure the formula starts on the row you think it does.
Why it happens: Duplicates each occupy a position.
How to fix it: That is correct behaviour. For distinct values, run LARGE over UNIQUE(range) instead.
Put =LARGE($B$2:$B$100, ROW()-1) in the first cell and fill down five rows, wrapping it in IFERROR so it degrades gracefully. With dynamic arrays, =TAKE(SORT(B2:B100, 1, -1), 5) does the same in one formula.
Use INDEX and MATCH around it: =INDEX($A$2:$A$8, MATCH(LARGE($B$2:$B$8, 1), $B$2:$B$8, 0)). Note this returns the first match, so tied values always show the same name.
MAX only ever returns the single biggest value. LARGE takes a position argument, so LARGE(range, 1) equals MAX but LARGE(range, 3) gives the third biggest, which MAX cannot express.
Longer reads where this function does real work in a real sheet.